Hittil har vi ikke sagt så mye om logging. PF gir deg muligheten til å logge akkurat det du har behov for via nøkkelordet 'log' i de reglene du måtte ønske. Det kan være fornuftig å begrense datamengden noe ved å angi hvilket grensesnitt det skal logges på. Det gjør du i så fall med
set loginterface $ytre
og så i de reglene du ønsker å ha data om, noe slikt som
pass out log from <klient> to any port $epost \ label klient-epost keep state
Trafikken blir da logget i et format som er ment som inndata for tcpdump.
label-leddet fører til at det blir opprettet egne tellere for en del statistikk akkurat for denne regelen. Slikt kan være hendig for eksempel ved viderefakturering av brukt båndbredde.
Når du har aktivert logging i en eller flere regler, logger PF via grensesnittet pflog0, og lagrer binære loggdata i loggfilen /var/log/pflog. Denne loggfilen er nyttig som permanent registrering og for de tilfellene der du med visse mellomrom ønsker å konvertere dataene til andre formater. Hvis du på den annen side ønsker å se på trafikken i noe nær sanntid, kan du be tcpdump om å se på logg-grensesnittet pflog0 i stedet.
Her er et eksempel på hva som kan komme ut fra et par regler med logging på en ellers fredelig torsdag ettermiddag:
peter@skapet:~$ sudo tcpdump -n -e -ttt -i pflog0 tcpdump: WARNING: pflog0: no IPv4 address assigned tcpdump: listening on pflog0, link-type PFLOG Feb 16 16:43:20.152187 rule 0/(match) block in on xl0: 194.54.59.189.2559 > 194.54.107.19.139: [|tcp] (DF) Feb 16 16:48:26.073244 rule 27/(match) pass in on xl0: 61.213.167.236 > 194.54.107.19: icmp: echo request Feb 16 16:49:09.563448 rule 0/(match) block in on xl0: 61.152.249.148.80 > 194.54.107.19.55609: [|tcp] Feb 16 16:49:14.601022 rule 0/(match) block in on xl0: 194.54.59.189.3056 > 194.54.107.19.139: [|tcp] (DF) Feb 16 16:53:10.110110 rule 0/(match) block in on xl0: 68.194.177.173 > 194.54.107.19: [|icmp] Feb 16 16:55:54.818549 rule 27/(match) pass in on xl0: 61.213.167.237 > 194.54.107.19: icmp: echo request Feb 16 16:57:55.577782 rule 27/(match) pass in on xl0: 202.43.202.16 > 194.54.107.19: icmp: echo request Feb 16 17:01:27.108404 rule 0/(match) block in on xl0: 194.54.59.189.4520 > 194.54.107.19.139: [|tcp] (DF) Feb 16 17:11:02.137310 rule 0/(match) block in on xl0: 222.73.4.154.80 > 194.54.107.19.55609: [|tcp] Feb 16 17:14:05.739403 rule 0/(match) block in on xl0: 194.54.174.246.3970 > 194.54.107.19.135: [|tcp] (DF) Feb 16 17:14:08.715163 rule 0/(match) block in on xl0: 194.54.174.246.3970 > 194.54.107.19.135: [|tcp] (DF) Feb 16 17:14:09.308355 rule 0/(match) block in on xl0: 194.54.174.246.3970 > 194.54.107.19.135: [|tcp] (DF) Feb 16 17:19:01.853730 rule 27/(match) pass in on xl0: 203.84.214.5 > 194.54.107.19: icmp: echo request
Brukerhåndboken for PF har en egen del som handler om logging, med mange gode råd. Med denne informasjonen og blant annet man-sidene for tcpdump skulle du være i stand til å trekke ut de loggdataene du måtte ha behov for.