31.4. De OpenBSD Packet Filter (PF) en ALTQ

Herzien en bijgewerkt door John Ferrell.

Vanaf juli 2003 is de OpenBSD firewalltoepassing PF geporteerd naar FreeBSD en beschikbaar gekomen in de FreeBSD Portscollectie. In 2004 was FreeBSD 5.3 de eerste release die PF bevatte is integraal onderdeel van het basissysteem. PF is een complete en volledige firewall die optioneel ALTQ bevat (Alternate Queuing). ALTQ biedt Quality of Service (QoS) functionaliteit.

het OpenBSD Project levert een uitstekend werk wat betreft het onderhouden van de PF FAQ. Zodoende zal deze sectie van het handboek zich richten op PF met betrekking tot FreeBSD terwijl het ook wat algemene informatie over het gebruik zal geven. Voor gedetailleerde gebruikersinformatie wordt naar de PF FAQ verwezen.

Meer informatie over PF voor FreeBSD staat op http://pf4freebsd.love2party.net/.

31.4.1. De laadbare kernelmodules voor PF gebruiken

Voeg de volgende regel toe aan /etc/rc.conf om de kernelmodule PF te laden:

pf_enable="YES"

Draai vervolgens het opstartscript om de module te laden:

# /etc/rc.d/pf start

Merk op dat de PF module niet laadt als het het instellingenbestand met de regelverzameling niet kan vinden. De standaardlocatie is /etc/pf.conf. Als de regelverzameling voor PF zich elders bevindt, kan PF worden verteld om daar te kijken een regel analoog aan de volgende aan /etc/rc.conf toe te voegen:

pf_rules="/pad/naar/pf.conf"

Het voorbeeld pf.conf bestand kan gevonden worden in /usr/share/examples/pf

De module PF kan ook handmatig vanaf de opdrachtregel geladen worden:

# kldload pf.ko

Logondersteuning voor PF wordt geleverd door pflog.ko en kan worden geladen door de volgende regel aan /etc/rc.conf toe te voegen:

pflog_enable="YES"

Draai vervolgens het opstartscript om de module te laden:

# /etc/rc.d/pflog start

Als u andere mogelijkheden van PF nodig heeft dient u ondersteuning voor PF in de kernel te compileren.

31.4.2. Kernelopties voor PF

Hoewel het niet nodig is om ondersteuning voor PF in de kernel te compileren, biedt dit wel de mogelijkheid om van een van PF's geavanceerde mogelijkheden gebruik te maken die niet in de laadbare module zitten, namelijk pfsync(4), dat een pseudo-apparaat is dat zekere veranderingen aan de toestandstabel die door PF wordt gebruikt prijsgeeft. Het kan worden gecombineerd met carp(4) om failover firewalls aan te maken die gebruik maken van PF. Meer informatie over CARP kan gevonden worden in Paragraaf 32.14 van het Handboek.

De kernelopties voor PF kunnen gevonden worden in /usr/src/sys/conf/NOTES en zijn hieronder gereproduceerd:

device pf
device pflog
device pfsync

De optie device pf schakelt ondersteuning voor de “Packet Filter” firewall (pf(4)) in.

De optie device pflog schakelt het optionele pflog(4) pseudo-netwerkapparaat in dat gebruikt kan worden om verkeer te loggen naar een bpf(4) descriptor. De pflogd(8) daemon kan gebruikt worden om de logboekinformatie naar schijf te schrijven.

De optie device pfsync schakelt het optionele pfsync(4) pseudo netwerkapparaat in waarmee de toestandswijzigingen gemonitord kunnen worden.

31.4.3. Beschikbare opties voor rc.conf

De volgende rc.conf(5) statements stellen PF en pflog(4) in tijdens het opstarten:

pf_enable="YES"                 # Schakel PF in (laad module als nodig)
pf_rules="/etc/pf.conf"         # bestand met regels voor pf
pf_flags=""                     # aanvullende vragen voor opstarten pfctl
pflog_enable="YES"              # start pflogd(8)
pflog_logfile="/var/log/pflog"  # waar pflogd het logboekbestand moet opslaan
pflog_flags=""                  # aanvullende vlaggen voor opstarten pflogd

Als er een LAN achter de firewall staat en er pakketten doorgestuurd moeten worden naar computers op het LAN of als NAT actief is, dan is de volgende optie ook nodig:

gateway_enable="YES"            # Schakel in als LAN gateway

31.4.4. Filterregels aanmaken

PF leest de instelregels van pf.conf(5) (standaard /etc/pf.conf) en het verandert, verwijdert, of geeft pakketten door aan de hand van de regels of definities die daar zijn gespecificeerd. De FreeBSD-installatie bevat een aantal voorbeeldbestanden in /usr/share/examples/pf/. In de PF FAQ staat een complete behandeling van de PF regels.

WaarschuwingHoud tijdens het doornemen van de PF FAQ in de gaten dat verschillende versies van FreeBSD verschillende versies van PF kunnen bevatten. Momenteel gebruikt FreeBSD 8.X dezelfde versie van PF als OpenBSD 4.1. FreeBSD 9.X en hoger gebruiken dezelfde versie van PF als OpenBSD 4.5.

De FreeBSD pakketfilter mailinglijst is een goede plaats om vragen over het instellen en draaien van de PF firewall te stellen. Vergeet niet de mailinglijstarchieven te controleren alvorens vragen te stellen!

31.4.5. Werken met PF

Gebruik pfctl(8) om PF te beheren. Hieronder staan wat nuttige commando's (bekijk de hulppagina pfctl(8) voor alle beschikbare opties):

Commando Doel
pfctl -e PF aanzetten
pfctl -d PF uitzetten
pfctl -F all -f /etc/pf.conf Spoel alle regels door (nat, filter, toestand, tabel, etc.) en herlaad vanuit het bestand /etc/pf.conf pfctl -s [ rules | nat | state ] Rapporteer over de filterregels, NAT-regels, of toestandstabel
pfctl -vnf /etc/pf.conf Controleer /etc/pf.conf op fouten, maar laad de regelverzameling niet

31.4.6. ALTQ inschakelen

ALTQ is alleen beschikbaar ondersteuning ervoor in de FreeBSD Kernel te compileren. ALTQ wordt niet door alle netwerkkaartstuurprogramma's ondersteund. In altq(4) staat een lijst met ondersteunde stuurprogramma's voor de betreffende versie.

Met de volgende opties wordt ALTQ ingeschakeld en additionele functionaliteit toegevoegd:

options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)
options         ALTQ_NOPCC      # Required for SMP build

options ALTQ schakelt het ALTQ raamwerk in.

options ALTQ_CBQ schakelt Class Based Queuing (CBQ) in. Met CBQ kan de bandbreedte van een verbinding worden opgedeeld in verschillende klassen of wachtrijen om verkeer te prioriteren op basis van filterregels.

options ALTQ_RED schakelt Random Early Detection (RED) in. RED wordt gebruikt om netwerkverstopping te voorkomen. RED doet dit door de lengte van de wachtrij te meten en die te vergelijken met de minimale en maximale drempelwaarden voor de wachtrij. Als de wachtrij groter is dan de maximale waarde worden alle nieuwe pakketten genegeerd. Het werkt naar zijn naam, dus RED negeert willekeurig pakketten van verschillende verbindingen.

options ALTQ_RIO schakelt Random Early Detection In and Out in.

options ALTQ_HFSC schakelt de Hierarchical Fair Service Curve Packet Scheduler in. Meer informatie over HFSC staat op http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html.

options ALTQ_PRIQ schakelt Priority Queuing (PRIQ) in. PRIQ laat verkeer dat in een hogere wachtrij staat altijd eerder door.

options ALTQ_NOPCC schakelt SMP ondersteuning voor ALTQ in. Deze optie is verplicht op SMP systemen.