Pfstat no OpenBSD 4.x

Publicado por Andre Luiz Facina em 09/01/2009

[ Hits: 7.569 ]

 


Pfstat no OpenBSD 4.x



O pfstat é um pequeno utilitário do OpenBSD que realiza a coleta de informações de uma interface e com base nas informações coletadas ele gera gráficos estatísticos sobre vários eventos e que posteriormente podem ser visualizados pelo browser para análises e auditorias.

Como podem ver, são várias informações que o pfstat pode coletar, entre elas o número de pacotes bloqueados e liberados, states das conexões, número de pacotes que entraram e saíram da interface, congestionamento, dentre outras informações.

Instalação

A instalação do pfstat é muito simples, podendo ser feita via ports ou via pkg_add:

1) ports:

# cd /usr/ports/net/pfstat/
# make
# make install


2) pkg_add:

# export PKG_PATH="http://mirrors.uol.com.br/pub/OpenBSD/4.4/packages/i386/"
# pkg_add pfstat


Configuração

1) packet filter - o pfstat requer que a opção de logging esteja ativada no Packet Filter (loginterface), essa opção deve ser configurada para a interface que deseja monitorar.

Para habilitar o logging da interface inclua no arquivo /etc/pf.conf a opção "set loginterface" seguido do nome da interface:

set loginterface pppoe0

Recarregar as regras do PF:

# pfctl -f /etc/pf.conf

2) pfstat - o arquivo de configuração do pfstat geralmente se encontra em /etc/pfstat.conf e a configuração também é muito simples. Abaixo um exemplo do pfstat.conf:

# Gráfico com a quantidade em bytes de pacotes (IPv4)
# que entraram ( in ) e saíram ( out ) pela interface pppoe0

# Bytes in and out #

# O parâmetro "collect" define os dados que serão coletados, nesse caso a quantidade em
# bytes de pacotes liberados (pass) do tipo IPv4 que entraram e saíram pela interface pppoe0.


collect 1 = interface "pppoe0" pass bytes in ipv4 diff
collect 2 = interface "pppoe0" pass bytes out ipv4 diff

# Local onde os gráficos serão salvos ( estatísticas do dia )
image "/var/www/htdocs/pfstat/pfstat_day.jpg" {

# Define o período do gráfico ( um dia )
        from 1 days to now

# Define a aparência e tamanho do gráfico
        width 980 height 200
        left
                graph 1 "in" "bytes/s" color 0 192 0 filled,
        right
                graph 2 "out" "bytes/s" color 0 0 255
}

# Local onde os gráficos serão salvos ( estatísticas da semana )
image "/var/www/htdocs/pfstat/pfstat_week.jpg" {

# Define o período do gráfico ( uma semana )
        from 1 weeks to now

# Define a aparência e tamanho do gráfico
        width 980 height 200
        left
                graph 1 "in" "bytes/s" color 0 192 0 filled,
        right
                graph 2 "out" "bytes/s" color 0 0 255
}

# Mesmo gráfico, mas com as estatísticas de um mês
image "/var/www/htdocs/pfstat/pfstat_month.jpg" {
        from 1 months to now
        width 980 height 200
        left
                graph 1 "in" "bytes/s" color 0 192 0 filled,
        right
                graph 2 "out" "bytes/s" color 0 0 255
}

#######################################################

# Gráfico com o número de pacotes ( IPv4 ) que foram liberados ( pass ) e pacotes
# que foram bloqueados ( block ) tanto para entrada ( in ),
# quanto para saída ( out ) na interface pppoe0.

## Pass/Block packets per second In/Out ##

collect 3 = interface "pppoe0" pass packets in ipv4 diff
collect 4 = interface "pppoe0" pass packets out ipv4 diff
collect 5 = interface "pppoe0" block packets in ipv4 diff
collect 6 = interface "pppoe0" block packets out ipv4 diff

# Estatísticas do dia
image "/var/www/htdocs/pfstat/pfstat-packets_day.jpg" {
        from 1 days to now
        width 980 height 200
        left
                graph 3 "pass in"   "packets/s" color 0 192 0 filled,
                graph 4 "pass out"  "packets/s" color 0 0 255
        right
                graph 5 "block in"  "packets/s" color 255 0 0,
                graph 6 "block out" "packets/s" color 192 192 0
}

# Estatísticas da semana
image "/var/www/htdocs/pfstat/pfstat-packets_week.jpg" {
        from 1 weeks to now
        width 980 height 200
        left
                graph 3 "pass in"   "packets/s" color 0 192 0 filled,
                graph 4 "pass out"  "packets/s" color 0 0 255
        right
                graph 5 "block in"  "packets/s" color 255 0 0,
                graph 6 "block out" "packets/s" color 192 192 0
}

# Estatísticas do mês
image "/var/www/htdocs/pfstat/pfstat-packets_month.jpg" {
        from 1 months to now
        width 980 height 200
        left
                graph 3 "pass in"   "packets/s" color 0 192 0 filled,
                graph 4 "pass out"  "packets/s" color 0 0 255
        right
                graph 5 "block in"  "packets/s" color 255 0 0,
                graph 6 "block out" "packets/s" color 192 192 0
}

########################################################

# Terceiro gráfico, com as estatísticas de pacotes
# fragmentados e de congestionamento

collect 7 = global counters fragment       diff
collect 8 = global counters congestion     diff

# Estatísticas do dia
image "/var/www/htdocs/pfstat/pfstat-errors_day.jpg" {
       from 1 days to now
       width 980 height 200
        left
               graph 7 "frag" "/s" color 192 0 192,

        right
               graph 8 "cong" "/s" color 0 192 192,
}

# Estatísticas da semana
image "/var/www/htdocs/pfstat/pfstat-errors_week.jpg" {
        from 1 weeks to now
        width 980 height 200
        left
                graph 7 "frag" "/s" color 192 0 192,
        right
                graph 8 "cong" "/s" color 0 192 192,
}

# Estatísticas do mês
image "/var/www/htdocs/pfstat/pfstat-errors_month.jpg" {
        from 1 months to now
        width 980 height 200
        left
                graph 7 "frag" "/s" color 192 0 192,
        right
                graph 8 "cong" "/s" color 0 192 192,
}

# EOF

Executando o Pfstat

O pfstat irá executar uma tarefa a cada minuto para recolher informação sobre a interface. Estes dados serão colocados no arquivo /var/db/pfstat.db e a melhor maneira de executá-lo é a partir do crontab.

Existem três comandos que necessitam ser executados:
  • "pfstat -q -d /var/db/pfstat.db" - executar a cada minuto para colatar estatísticas da interface;
  • "pfstat -p -d /var/db/pfstat.db" - executar de hora em hora no horário comercial para gerar novos gráficos;
  • "pfstat -t 30 -d /var/db/pfstat.db" - executar uma vez por dia, geralmente de madrugada, para limpar a base de dados e manter apenas os últimos 30 dias de informações.

Exemplo do pfstat no crontab:

* * * * * /usr/local/bin/pfstat -q -d /var/db/pfstat.db
10 6-18 * * * /usr/local/bin/pfstat -p -d /var/db/pfstat.db
25 3 * * * /usr/local/bin/pfstat -t 30 -d /var/db/pfstat.db

Pronto, se o Apache estiver instalado e configurado, todos os gráficos poderão ser acessados via browser e ao estilo do MRTG. =p

Outras dicas deste autor

Renomeando arquivos com caracteres especiais

Cisco - Reload, um comando simples que pode salvar sua vida

Centralizando logs de dispositivos Cisco com o Syslog-ng

Quotas de disco no OpenBSD

Bootchart: Monitorando o boot do sistema Linux

Leitura recomendada

Arch Linux: Otimizando o seu makepkg para sua arquiterura

Removendo opção inválida "KDE" da lista de sessões da tela de login do GDM

Terminal bash com arquivos coloridos

Redimensionando o RAID 1

Instalação do servidor WebLogic no Linux

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário