Gjøre livet lettere med tabeller

Nå er det sikkert en del som sitter og synes alt dette blir veldig statisk. Det finnes da virkelig data som kan være viktige for filtrering og dirigering der og da, men som ikke fortjener plass i en konfigurasjonsfil! Ganske riktig, og PF har mekanismer som dekker dette også. Ett eksempel er tabeller, som først og fremst egner seg for lister som det skal være mulig å manipulere uten å laste hele regelsettet på nytt, og der det er viktig at oppslaget går raskt. Tabellnavn settes i < >, slik:

table <klienter> { 192.168.2.0/24, !192.168.2.5 }

her er nettverket 192.168.2.0/24 med i tabellen, med unntak av adressen 192.168.2.5, som utelukkes med operatoren ! (logisk NOT). Det går også an å laste tabeller fra filer der elementene står enkeltvis på hver sin linje, for eksempel med filen /etc/klienter

192.168.2.0/24
!192.168.2.5

som så brukes til å initialisere tabellen i /etc/pf.conf:

table <klienter> persist file /etc/klienter

Så kan du for eksempel endre regelen fra tidligere

pass inet proto tcp from <klienter> to any port $klient_ut \
         flags S/SA keep state

for å regulere trafikken ut fra klientmaskinene dine. Når det er gjort, kan du manipulere innholdet i tabellen i fart, for eksempel

$ sudo pfctl -t klienter -T add 192.168.1/16

Husk på at dette bare endrer tabellen i minnet, så endringen vil for eksempel ikke overleve neste strømbrudd eller annen omstart hvis du ikke sørger for å ta vare på endringene dine.

Tabellen på disk kan for eksempel vedlikeholdes med en cron-jobb som med jevne mellomrom dumper tabellen til disk, for eksempel ved å legge inn en kommando ala pfctl -t klienter -T show >/etc/klienter. Alternativt kan du redigere filen /etc/klienter og erstatte innholdet av tabellen når du har gjort endringer:

$ sudo pfctl -t klienter -T replace -f /etc/klienter

For operasjoner du trenger å gjøre ofte, vil du før eller senere lage shellscript som gjør slike ting som å sette inn og fjerne oppføringer eller erstatte innholdet i tabeller. Dine behov og din kreativitet er de eneste reelle begrensningene.

Vi kommer innom andre praktiske anvendelser for tabeller senere, inkludert noen programmer som bruker tabeller til forskjellige nyttige formål.