[Anterior: Marcação de Pacotes] [Conteúdo] [Próximo: Performance]
Para ver o arquivo de log:
# tcpdump -n -e -ttt -r /var/log/pflog
Perceba que usando tcpdump(8) para ver um arquivo de log não mostra a atividade em tempo real. Um monitoramento em tempo real dos pacotes logados é conseguido usando a interface pflog0:
# tcpdump -n -e -ttt -i pflog0
NOTA: Quando examinando logs, cuidado especial deve ser tomado com a opção verbose do decodificador de protocolos do tcpdump (ativada pela opção -v). Os decodificadores de protocolos do tcpdump não possuem um perfeito histórico de segurança. Pelo menos em teoria, um ataque muito lento pode ser possível utilizando-se de partes do payload dos pacotes que são logados pelo dispositivo de log. É prática recomendada mover os arquivos de log fora da máquina do firewall antes de examiná-los desta maneira.
Cuidado adicional deve existir com a segurança no acesso aos logs. Por padrão, pflogd irá registrar 96 bytes do pacote no arquivo de log. Acesso aos logs pode prover acesso parcial a payloads de pacotes com informações sensíveis (como nomes de usuário e senhas telnet(1) ou ftp(1)).
# tcpdump -n -e -ttt -r /var/log/pflog port 80
Isso pode ser filtrado ainda mais limitando a exibição de pacotes com certa combinação de host e porta:
# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3
A mesma idéia pode ser aplicada quando lendo através da interface pflog0
# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2
Note que isso não tem nenhum impacto sobre pacotes que são logados no arquivos do pflogd; o comando acima mostra apenas pacotes conforme eles são logados.
Além de usar as regras de filtragem padrão do tcpdump(8), a linguagem do tcpdump do OpenBSD's foi extendida para ler a saída do pflogd:
Exemplo:
# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0
Isso mostra o log, em tempo real, de pacotes entrantes que foram bloquados na interface wi0.
Primeiro devemos criar um usuário, pflogger, com shell /sbin/nologin. A forma mais fácil de cria-lo é com adduser(8).
Após criar o usuário pflogger, crie os dois scripts:
/etc/pflogrotate
#!/bin/sh FILE=/home/pflogger/pflog5min.$(date "+%Y%m%d%H%M") kill -ALRM $(cat /var/run/pflogd.pid) if [ $(ls -l /var/log/pflog | cut -d " " -f 8) -gt 24 ]; then mv /var/log/pflog $FILE chown pflogger $FILE kill -HUP $(cat /var/run/pflogd.pid) fi
/home/pflogger/pfl2sysl
#!/bin/sh # feed rotated pflog file(s) to syslog # do not start if another instance of this script is already running pgrep pfl2sysl >/dev/null 2>&1 if [ $? -ne 0 ] ; then for logfile in /home/pflogger/pflog5min* ; do if [ -f "$logfile" ] ; then tcpdump -n -e -ttt -r $logfile | logger -t pf -p local0.info rm $logfile fi done fi
Edite o cron do root:
# crontab -u root -e
Adicione as duas linhas seguintes:
# rotate pf log file every 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate
Crie uma entrada no cron para o usuário pflogger:
# crontab -u pflogger -e
Adicione as duas linhas seguintes:
# feed rotated pflog file(s) to syslog
0-59/5 * * * * /bin/sh /home/pflogger/pfl2sysl
Adicione a linha a seguir em /etc/syslog.conf:
local0.info /var/log/pflog.txt
Se você também quiser logar num servidor remoto, insira a linha:
local0.info @syslogger
Certifique-se de que syslogger esteja definido no arquivo hosts(5).
Crie o arquivo /var/log/pflog.txt para que o syslog possa logar nele.
# touch /var/log/pflog.txt
Avise o syslogd sobre a alteração, reinciando-o:
# kill -HUP $(cat /var/run/syslog.pid)
Todos pacotes logados agora são enviados para /var/log/pflog.txt. Caso a segunda linha tenha sido adicionada eles também são enviados para o host remoto syslogger.
O script /etc/pflogrotate agora processa e deleta /var/log/pflog assim, a rotação do pflog por newsyslog(8) não é mais necessária, e deve ser desabilitada. Contudo, /var/log/pflog.txt subistitui /var/log/pflog e sua rotação deve ser ativada. Altere /etc/newsyslog.conf da seguinte forma:
#/var/log/pflog 600 3 250 * ZB /var/run/pflogd.pid /var/log/pflog.txt 600 7 * 24
Agora o PF loga em /var/log/pflog.txt no formato ASCII. Se estiver configurado em /etc/syslog.conf, também logará num servidor remoto. O log não é imediato podendo ser necessário no máximo 5-6 minutos (o intervalo da tarefa no cron) para que eles apaceçam no arquivo.
[Anterior: Marcação de Pacotes] [Conteúdo] [Próximo: Performance]