[Precedente: Packet Tagging] [Indice] [Successivo: Performance]
Per ottenere il log dei pacchetti che passano attraverso PF, occorre usare la keyword log nelle regole NAT/rdr e di filtraggio. Da notare che PF può loggare solo i pacchetti che vengono bloccati o passano; non si può specificare una regola solo per il log dei pacchetti.
La keyword log causa il log di tutti i pacchetti che soddisfano la regola. Nel caso di regole che creano stati, solo il primo pacchetto (che crea lo stato) sarà loggato.
Le opzioni che possono essere date con la keyword log sono:
Le opzioni sono fornite in parentesi dopo la keyword log; opzioni multiple possono essere separate da virgola o spazio.
pass in log (all, to pflog1) on $ext_if inet proto tcp to $ext_if port 22 keep state
Per vedere il log file:
# tcpdump -n -e -ttt -r /var/log/pflog
Da notare che tcpdump(8) non consente l'analisi in tempo reale del file pflog. Per una visione in tempo reale dei log dei pacchetti si usa l'interfaccia pflog0:
# tcpdump -n -e -ttt -i pflog0
NOTE: Quando si esaminano i log, particolare attenzione dovrebbe essere data al decoding verbouse di tcpdump (attivato da linea di comando con l'opzione -v). Il protocollo decoder di tcpdump non ha una storia perfetta per quanto riguarda la sicurezza. Almeno in teoria sarebbe possibile un attacco ritardato utilizzando i payload parziali dei pacchetti registrati dal dispositivo di logging. Si raccomanda di spostare i file di log dal firewall prima di esaminarli.
Ulteriore attenzione dovrebbe essere dedicata all'accesso sicuro ai log. Di default, pflogd registrerà 96 bytes del pacchetto nel log file. L'accesso ai log dovrebbe fornire un accesso parziale a pacchetti di dati sensibili (come telnet(1) o ftp(1) username e password).
# tcpdump -n -e -ttt -r /var/log/pflog port 80
Si può limitare la visione dei pacchetti con una determinata combinazione di host e porta:
# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3
La stessa cosa può essere fatta quando si legge dall'interfaccia pflog0:
# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2
Da notare che ciò non ha impatto sui pacchetti loggati dal file di pflogd; il comando precedente visualizza solo i pacchetti quando vengono loggati.
Oltre all'utilizzo delle regole standard di filtraggio di tcpdump(8), il linguaggio di filtraggio del tcpdump di OpenBSD è stato esteso per la lettura dell'output di pflogd:
Esempio:
# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0
Questo mostra il log, in tempo reale, dei pacchetti in ingresso che sono stati bloccati all'interfaccia wi0.
Creare il seguente script:
/etc/pflogrotate
#!/bin/sh PFLOG=/var/log/pflog FILE=/var/log/pflog5min.$(date "+%Y%m%d%H%M") kill -ALRM $(cat /var/run/pflogd.pid) if [ -r $PFLOG ] && [ $(stat -f %z $PFLOG) -gt 24 ]; then mv $PFLOG $FILE kill -HUP $(cat /var/run/pflogd.pid) tcpdump -n -e -ttt -r $FILE | logger -t pf -p local0.info rm $FILE fi
Editare il cron job di root:
# crontab -u root -e
Aggiungere le due seguenti righe
# rotate pf log file every 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate
Aggiungere la riga seguente a /etc/syslog.conf:
local0.info /var/log/pflog.txt
Se inoltre si vuole loggare a un server remoto di logging, aggiungere la riga:
local0.info @syslogger
Assicurarsi che l'host syslogger sia stato definito nel file hosts(5).
Creare il file /var/log/pflog.txt per permettere a syslog di loggare a quel file, e dargli gli stessi permessi di pflog.
# touch /var/log/pflog.txt
# chmod 600 /var/log/pflog.txt
Rendere evidenti i cambiamenti a syslogd facendolo ripartire:
# kill -HUP $(cat /var/run/syslog.pid)
Tutti i pacchetti loggati vengono inviati a /var/log/pflog.txt. Se viene aggiunta la seconda riga, vengono inviati anche all'host remoto di logging syslogger.
Lo script /etc/pflogrotate ora processa e quindi cancella /var/log/pflog cosi' la rotazione di pflog eseguita da newsyslog(8) non e' piu' necessaria e puo' essere disabilitata. Comunque, /var/log/pflog.txt sostituisce /var/log/pflog e la sua rotazione puo' essere attivata. Cambiare /etc/newsyslog.conf come segue:
#/var/log/pflog 600 3 250 * ZB /var/run/pflogd.pid
/var/log/pflog.txt 600 7 * 24
PF ora loggera' in formato ASCII a /var/log/pflog.txt. Cosi' se configurato in /etc/syslog.conf, verra' loggato anche a un server remoto. Il logging non è immediato ma può richiedere anche 5-6 minuti (l'intervallo di cron job) prima che i pacchetti loggati siano nel file.
[Precedente: Packet Tagging] [Indice] [Successivo: Performance]