[Vorige: Pakketmarkering] [Inhoud] [Volgende: Prestatie]
Om pakketten te loggen die langs PF gaan, moet het log sleutelwoord gebruikt worden binnen NAT/rdr en filterregels. Merk op dat PF alleen pakketten kan loggen die het blokkeert of doorlaat; u kan geen regel specificeren die alleen pakketten logt.
Het log sleutelwoord zorgt ervoor dat alle pakketten die overeenstemmen met een regel, gelogd worden. In het geval waar de regel een toestand aanmaakt, zal alleen het eerste pakket dat gezien wordt (datgene dat ervoor zorgt dat de toestand aangemaakt wordt) gelogd worden.
De opties die aan het log sleutelwoord gegeven kunnen worden, zijn:
Opties worden tussen haakjes meegegeven na het log sleutelwoord; meerdere opties kunnen gescheiden worden door een komma of spatie.
pass in log (all, to pflog1) on $ext_if inet proto tcp to $ext_if port 22 keep state
Om het logbestand te bekijken:
# tcpdump -n -e -ttt -r /var/log/pflog
Merk op dat tcpdump(8) gebruiken om naar het pflog bestand te kijken, geen real-time display geeft. Een real-time display van gelogde pakketten wordt bekomen door de pflog0 interface te gebruiken:
# tcpdump -n -e -ttt -i pflog0
OPMERKING: Bij het onderzoeken van de logs, moet opgelet worden met tcpdump's uitgebreide ("verbose") protocoldecodering (geactiveerd via de -v commandolijnoptie). Tcpdump's protocol decoders hebben geen perfecte veiligheidshistoriek. Ten minste in theorie, zou een vertraagde aanval mogelijk kunnen zijn via de partiлle pakket payloads geregistreerd door het log-device. Het is aanbevolen praktijk om de logbestanden van de firewallmachine af te halen om ze op deze manier te onderzoeken.
Bijkomende zorg moet ook besteed worden aan het beveiligen van toegang tot de logs. Standaard zal pflogd 96 bytes van het pakket registreren in het logbestand. Toegang tot de logs zou gedeeltelijke toegang tot gevoelige pakket payloads kunnen verschaffen (zoals telnet(1) of ftp(1) gebruikersnamen en wachtwoorden).
# tcpdump -n -e -ttt -r /var/log/pflog port 80
Dit kan verder verfijnd worden door het vertonen van pakketten te beperken tot een bepaalde combinatie van host en poort:
# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3
Dezelfde idee kan toegepast worden bij het lezen uit de pflog0 interface:
# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2
Merk op dat dit geen impact heeft op welke pakketten naar het pflogd bestand gelogd worden; de bovenstaande commando's tonen slechts pakketten terwijl ze gelogd worden.
Bovenop het gebruik van de standaard tcpdump(8) filterregels, werd de tcpdump filtertaal uitgebreid voor het lezen van pflogd uitvoer:
Voorbeeld:
# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0
Dit toont de log, in real-time, van de inwaartse pakketten die geblokkeerd werden op de wi0 interface.
Maak het volgende script aan:
/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
Bewerk de cron job van root:
# crontab -u root -e
Voeg de volgende twee lijnen toe:
# rotate pf log file every 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate
Voeg de volgende lijn toe aan /etc/syslog.conf:
local0.info /var/log/pflog.txt
Indien u ook wil loggen naar een remote log-server, voeg dan deze lijn toe:
local0.info @syslogger
Zorg ervoor dat de host syslogger gedefinieerd werd in het hosts(5) bestand.
Maak het bestand /var/log/pflog.txt aan om syslog toe te laten naar dat bestand te loggen, en geef het dezelfde permissies als het pflog bestand.
# touch /var/log/pflog.txt
# chmod 600 /var/log/pflog.txt
Laat syslogd de veranderingen opmerken door het te herstarten:
# kill -HUP $(cat /var/run/syslog.pid)
Alle gelogde pakketten worden nu naar /var/log/pflog.txt gestuurd. Als de tweede lijn toegevoegd wordt, worden ze ook naar de remote log-host syslogger gestuurd.
Het script /etc/pflogrotate verwerkt nu en verwijdert vervolgens
/var/log/pflog zodat rotatie van pflog door
newsyslog(8) niet langer nodig is en best wordt
uitgeschakeld. /var/log/pflog.txt vervangt echter
/var/log/pflog en rotatie ervan wordt best geactiveerd.
Verander /etc/newsyslog.conf als volgt:
#/var/log/pflog 600 3 250 * ZB /var/run/pflogd.pid
/var/log/pflog.txt 600 7 * 24
PF zal nu in ASCII loggen naar /var/log/pflog.txt. Als het zo geconfigureerd is in /etc/syslog.conf, zal het ook naar een remote server loggen. Het loggen is niet ogenblikkelijk maar het kan tot ongeveer 5-6 minuten (het cron job interval) duren voordat de gelogde pakketten in het bestand verschijnen.
[Vorige: Pakketmarkering] [Inhoud] [Volgende: Prestatie]