FreeBSD Firewall mit pf

FreeBSD Version: 7.2-RELEASE
Stand: 21.10.2009

Zum schützen der offenen Ports gibt es zwei unterschiedliche Firewalls unter FreeBSD: ipf und pf.
Auf dieser Seite wird pf vorgestellt, da pf von OpenBSD übernommen worden ist, ist es praktischer für einen BSD'ler eine Firewall Syntax zu lernen :).

Um pf nutzen zu können, muß man als erstes das Kernel modul laden mit

	kldload pf	
oder man passt seinen Kernel an und kompiliert pf in den Kernel ein. Wie man ein angepassten Kernel baut steht im FreeBSD Handbuch.

Ist pf im Kernel bekannt, so kann man mit dem Kommando Tool pfctl die Firewall aktivieren und die Konfiguration laden. Die Firewall Konfiguration befinden sich per default unter /etc/pf.conf .

	pfctl -e -f /etc/pf.conf

Für mein Laptop, mit dem ich zb. per UMTS, WLAN oder andere fremde Netze einlogge, habe ich folgende einfache Regel erstellt:

	set skip on lo0
set block-policy return

block log all

block out log quick proto { tcp, udp } from any to 224.0.0.251

pass out proto { tcp, udp, icmp } from any to any modulate state

Hier eine kurze Erläuterung:

Die Regeln werden sequentiell für jede Netzwerk Aktivität (TCP-Paket oder vergleichbares) von Anfang bis Ende in der pf.conf durchgearbeitet.

Als erstes wird das loopback Interface aus den Firewall Regeln ausgenommen.

	
set skip on lo0

Als nächstes werden sämtliche Netzwerk Aktivitäten, egal welches interface, welche Richtung oder welcher Service/Paket, geblockt und für die bessere Fehleranalyse zusätzlich gelogt.

	block log all

Als nächstes werden alle Ausgehenden Avahi (Multicast Traffic auf port 5353, group 224.0.0.251) Anfragen geblockt und gelogt. (Die Regel ist sehr wahrscheinlich überflüssig.)

	block out log quick proto { tcp, udp } from any to 224.0.0.251

Als nächstes werden alle Ausgenhende Verbindungen erlaubt, dabei wird der Status der Verbindung gehalten (modulate state).

	
pass out proto { tcp, udp, icmp } from any to any modulate state

Für die Fehleranalyse (Warum funktioniert meine Verbindung nicht?) kann man mithilfe von pflog und den dazugehörigen log Einträgen in den Regeln sich die geblockten Packete anschauen. Dazu führt man folgende Befehle aus:

   # kldload pflog
# ifconfig pflog0 up
# tcpdump -n -e -ttt -i pflog0
Links