31.4. Paket Filter (PF) von OpenBSD und ALTQ

Revised and updated by John Ferrell.

Im Juli 2003 wurde PF, die Standard-Firewall von OpenBSD, nach FreeBSD portiert und in die FreeBSD-Ports-Sammlung aufgenommen. 2004 war PF in FreeBSD 5.3 Teil des Basissystems. Bei PF handelt es sich um eine komplette, vollausgestattete Firewall, die optional auch ALTQ (Alternatives Queuing) unterstützt. ALTQ bietet Ihnen Quality of Service (QoS)-Bandbreitenformung.

Das OpenBSD-Projekt leistet bereits hervorragende Dokumentationsarbeit mit der PF FAQ. Aus diesem Grund konzentriert sich dieser Handbuchabschnitt nur auf diejenigen Besonderheiten von PF, die FreeBSD betreffen, sowie ein paar allgemeine Informationen hinsichtlich der Verwendung. Genauere Informationen zum Einsatz erhalten Sie in der PF FAQ.

Weitere Informationen zu PF für FreeBSD finden Sie unter http://pf4freebsd.love2party.net/.

31.4.1. Verwendung der PF-Kernelmodule

Um die PF Kernel Module zu laden, fügen Sie folgende Zeile in ihre /etc/rc.conf ein:

pf_enable="YES"

Danach starten Sie das Startup Script um die Module zu laden:

# /etc/rc.d/pf start

Das PF Modul wird nicht geladen, falls es die Ruleset Konfigurationsdatei nicht findet. Standardmässig befindet sich diese Datei in /etc/pf.conf. Falls das PF Ruleset sich an einem anderen Platz befindet, können Sie das durch Hinzufügen einer Zeile ähnlich der folgenden, in ihrer /etc/rc.conf ändern:

pf_rules="/path/to/pf.conf"

Anmerkung: Ein Beispiel für die Datei pf.conf finden Sie im Verzeichnis /usr/share/examples/pf/.

Das PF-Modul kann auch manuell über die Kommandozeile geladen werden:

# kldload pf.ko

Protokollierungsfunktionen für PF werden durch das Modul pflog.ko zur Verfügung gestellt und können durch folgenden Eintrag in der /etc/rc.conf aktiviert werden:

pflog_enable="YES"

Danach starten Sie das Startup Script, um das Modul zu laden:

# /etc/rc.d/pflog start

Falls Sie noch weitere Features für PF benötigen, müssen Sie diese in den Kernel einbauen.

31.4.2. PF Kernel-Optionen

Es ist nicht zwingend nötig, dass Sie PF-Unterstützung in den FreeBSD-Kernel kompilieren. Sie werden dies tun müssen, um eine von PFs fortgeschritteneren Eigenschaften nutzen zu können, die nicht als Kernelmodul verfügbar ist. Genauer handelt es sich dabei um pfsync(4), ein Pseudo-Gerät, welches bestimmte Änderungen der PF-Zustandstabelle offenlegt. Es kann mit carp(4) kombiniert werden, um ausfallsichere Firewalls mit PF zu realisieren. Weitere Informationen zu CARP erhalten Sie in Abschnitt 32.13 des Handbuchs.

Die Kernelkonfigurationsoptionen von PF befinden sich in /usr/src/sys/conf/NOTES und sind im Folgenden wiedergegeben:

device pf
device pflog
device pfsync

Die Option device pf aktiviert die Unterstützung für die “Packet Filter”-Firewall (pf(4)).

Die Option device pflog aktiviert das optionale pflog(4)-Pseudonetzwerkgerät, das zum Protokollieren des Datenverkehrs über einen bpf(4)-Deskriptor dient. pflogd(8) ist in der Lage, diese Protokolldateien auf Ihre Platte zu speichern.

Die Option device pfsync aktiviert das optionale pfsync(4)-Pseudonetzwerkgerät für die Überwachung von “Statusänderungen”.

31.4.3. Verfügbare rc.conf-Optionen

Die folgenden rc.conf(5)-Einträge konfigurieren PF und pflog(4) beim Systemstart:

pf_enable="YES"                 # PF aktivieren (Modul, wenn nötig, aktivieren)
pf_rules="/etc/pf.conf"         # Datei mit Regeldefinitionen für pf
pf_flags=""                     # zusätzliche Parameter für den Start von pfctl
pflog_enable="YES"              # starte pflogd(8)
pflog_logfile="/var/log/pflog"  # wo soll pflogd die Protokolldatei speichern
pflog_flags=""                  # zusätzliche Parameter für den Start von pflogd

Wenn Sie ein lokales Netzwerk hinter dieser Firewall betreiben und Pakete für dessen Rechner weiterleiten oder NAT verwenden wollen, benötigen Sie zusätzlich die folgende Option:

gateway_enable="YES"            # LAN Gateway aktivieren

31.4.4. Filterregeln erstellen

PF liest seine konfigurierten Regeln aus pf.conf(5) (standardmässig /etc/pf.conf) und modifiziert, verwirft oder lässt Pakete passieren anhand der Regeln oder Definitionen, die in dieser Datei gespeichert sind. FreeBSD enthält dazu nach der Installation mehrere Beispieldateien, die in /usr/share/examples/pf/ abgelegt sind. Für eine ausführliche Behandlung des PF-Regelwerks lesen Sie bitte die PF FAQ.

Warnung: Beim Lesen der PF FAQ wollten Sie darauf achten, dass verschiedene Versionen von FreeBSD auch unterschiedliche Versionen von PF enthalten. FreeBSD 8.X (und älter) FreeBSD-Versionen benutzen PF aus OpenBSD 4.1. FreeBSD 9.X (und neuer) benutzen hingegen PF aus OpenBSD 4.5.

Die FreeBSD packet filter mailing list ist eine erste Anlaufstelle für Fragen zur Konfiguration und dem Einsatz der PF Firewall. Vergessen Sie nicht, vorher die Mailinglistenarchive zu durchsuchen, bevor Sie dort eine Frage stellen!

31.4.5. Arbeiten mit PF

Benutzen Sie pfctl(8), um PF zu steuern. Unten finden Sie ein paar nützliche Befehle (lesen Sie auch die Manualpage zu pfctl(8), um alle verfügbaren Optionen nachzuschlagen):

Befehl Zweck
pfctl -e PF aktivieren
pfctl -d PF deaktivieren
pfctl -F all -f /etc/pf.conf Alle Filterregeln zurücksetzen (NAT, Filter, Zustand, Tabelle, etc.) und erneut aus der Datei /etc/pf.conf auslesen
pfctl -s [ Regeln | NAT | Zustand ] Bericht über die Filterregeln, NAT-Regeln, oder Zustandstabellen
pfctl -vnf /etc/pf.conf überprüft /etc/pf.conf auf Fehler, lädt aber das Regelwerk nicht neu

31.4.6. ALTQ aktivieren

ALTQ muss vor der Verwendung in den FreeBSD-Kernel kompiliert werden. Beachten Sie, dass ALTQ nicht von allen verfügbaren Netzwerkkartentreibern unterstützt wird. Sehen Sie daher zuerst in altq(4) nach, ob Ihre Netzwerkkarte diese Funktion unter Ihrer FreeBSD-Version unterstützt.

Die folgenden Kerneloptionen aktivieren ALTQ sowie alle Zusatzfunktionen:

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      # Wird von SMP benötigt

options ALTQ aktiviert das ALTQ-Framework.

options ALTQ_CBQ aktiviert das Class Based Queuing (CBQ). CBQ erlaubt es, die Bandbreite einer Verbindung in verschiedene Klassen oder Warteschlangen zu unterteilen, um die Priorität von Datenpaketen basierend auf Filterregeln zu ändern.

options ALTQ_RED aktiviert Random Early Detection (RED). RED wird zur Vermeidung einer Netzwerkverstopfung verwendet. Dazu ermittelt RED die Größe der Warteschlange und vergleicht diesen Wert mit den minimalen und maximalen Grenzwerten der Warteschlange. Ist die Warteschlange größer als das erlaubte Maximum, werden alle neuen Pakete verworfen. Getreu seinem Namen verwirft RED Pakete unterschiedlicher Verbindungen nach dem Zufallsprinzip.

options ALTQ_RIO aktiviert Random Early Detection In and Out.

options ALTQ_HFSC aktiviert den Hierarchical Fair Service Curve-Paketplaner. Weitere Informationen zu HFSC finden Sie unter http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html.

options ALTQ_PRIQ aktiviert Priority Queuing (PRIQ). PRIQ lässt Verkehr einer Warteschlange mit höherer Priorität zuerst durch.

options ALTQ_NOPCC aktiviert die SMP Unterstützung von ALTQ. Diese Option ist nur auf SMP-System erforderlich.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.