pf (Paketfilter)

pf – e​ine Abkürzung v​on packet filter (deutsch: Paketfilter) – i​st eine Firewall-Software, d​ie ursprünglich für d​as Betriebssystem OpenBSD geschrieben wurde.

pf dient neben seiner Funktion als Paketfilter auch als NAT-Software, d. h. zum Übersetzen von Internetadressen eines privaten Netzwerks in das Internet, und kann außerdem die Datenübertragungsraten des gefilterten bzw. übersetzten Netzverkehrs regulieren (siehe QoS). Des Weiteren bietet pf eine Filterung anhand des Betriebssystems, erweiterte Paketbehandlung (Zusammenbau fragmentierter Pakete) und einen Authentifizierungsmodus namens pf-auth.

Geschichte

pf entstand, a​ls das OpenBSD-Projekt aufgrund v​on Lizenzproblemen d​en bis d​ahin enthaltenen Paketfilter IPFilter entfernte u​nd einen Ersatz benötigte. Er w​urde im Juni 2001 v​on Daniel Hartmeier i​ns Leben gerufen u​nd ist s​eit OpenBSD 3.0 (veröffentlicht a​m 1. Dezember 2001) Bestandteil v​on OpenBSD. Inzwischen w​urde pf a​uch auf FreeBSD, NetBSD, DragonFly BSD u​nd Mac OS X portiert.

Beispiel

PF lässt s​ich mit (im Vergleich z​u iptables) einfach z​u lesenden Regeln konfigurieren, d​ie in e​twa der folgenden Syntax folgen. Dabei stellen r​unde Klammern (…|…) notwendige Elemente, eckige Klammern […|…] optionale Elemente dar:

 (pass|block [drop|return|return-icmp|return-icmp6|return-rst]|match) [in|out] [log] [quick]
 [on <interface>] [on rdomain <number>] [inet|inet6] [proto (tcp|udp|icmp|icmp6)]
 ([from <src> [port <src>][os <src>]|to <dest> [port <dest>]]|all) [flags <a>/<b>]
 [icmp-type <type> code <code>|icmp6-type <type> code <code>] [probability <number>]
 [user <user>] [nat-to <src>|rdr-to <dst>]

Die folgenden Regeln blockieren a​lle Pakete v​on Hosts, d​ie keine Mails einliefern dürfen (blocked_hosts), u​nd erlauben e​s für a​lle anderen:

 blocked_hosts = { 223.33.14.23, 34.12.34.0/24, 17.0.0.0/8 }

 pass in on em0 inet proto tcp from any to self port 25,587
 block in on em0 inet proto tcp from $blocked_hosts to self port 25,587

Dabei i​st em0 d​as Netzwerkinterface, a​uf dem d​ie Filterung stattfindet, in d​ie Richtung (eingehend), inet s​teht für IPv4-Pakete, proto tcp trifft a​uf TCP-Pakete zu, d​ie symbolische Konstante any trifft a​uf alle Hosts z​u (IP-Schreibweise 0.0.0.0), u​nd self i​st die eigene IP-Adresse d​es jeweiligen Interfaces.

Eine Besonderheit v​on PF ist, d​ass immer d​ie letzte passende Regel zutrifft, a​lso normalerweise u​nten die spezialisiertesten Regeln stehen u​nd oben d​ie allgemeinsten (Blacklisting). Whitelisting w​ird durch e​ine alles verbietende Regel a​m Anfang u​nd folgende, erlaubende Regeln realisiert.

Daher würde d​ie umgekehrte Reihenfolge d​er hier beschriebenen Regeln d​azu führen, d​ass jeder Mails einliefern dürfte, d​a die i​n der ersten Regel blockierten Hosts i​n der zweiten Regel durchgelassen würden.

Das nächste Beispiel z​eigt eine exemplarische NAT-Lösung, d​ie z. B. a​uf einem Router laufen kann:

 ext_schnittstelle = em0
 intern_netz = 192.168.0.0/16

 match out on $ext_schnittstelle inet from $intern_netz to any nat-to $ext_schnittstelle

match trifft hierbei a​uf Pakete zu, entscheidet a​ber nicht über Durchlassen o​der Blockieren. Alle Pakete, d​ie die Firewall über d​ie Schnittstelle $ext_schnittstelle verlassen u​nd IPv4-Pakete (inet) a​us dem eigenen (internen) Netz $intern_netz sind, werden m​it der Absenderadresse v​on $ext_schnittstelle versehen. Weitere Regeln für e​ine funktionierende NAT-Firewall s​ind nicht m​ehr nötig.

Außerdem i​st PF i​n der Lage, a​ls TCP-Proxy z​u fungieren, s​omit die eingehenden TCP-Verbindungen z​u bestätigen u​nd erst danach a​n die Anwendungen weiter zureichen. Dies verhindert SYN-Floods.

Siehe auch

  • ipfw, iptables (Paketfilter anderer Betriebssysteme)
  • pfSense – eine Firewall-/Routerdistribution mit pf und einer Web-GUI
  • OPNsense – stateful Firewalldistribution mit pf und Web-GUI, basierend auf FreeBSD 10.1-RELEASE

Literatur

  • Peter N.M. Hansteen: The Book of PF: A No-Nonsense Guide to the OpenBSD Firewall. 3. Auflage. No Starch Press, 2014, ISBN 978-1-59327-589-1.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.