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
Nenhum comentário foi encontrado.