pf - eine Kurzform von Packetfilter - ist eine Firewall-Software, die für das OpenBSD-Betriebssystem entwickelt wurde. pf ist nicht nur ein Packetfilter, sondern auch eine NAT-Software, um z. B. die Internetadresse eines Privatnetzwerks ins Netz zu übersetzen, und kann auch die Datenübertragungsrate des herausgefilterten oder übertragenen Netzwerkverkehrs regeln (siehe QoS).
pf stellt auch Betriebssystem-Filterung, erweitertes Paket-Handling (Zusammenstellen von fragmentierten Paketen) und einen Authentisierungsmodus namens pf-auth zur Verfügung. pf wurde erstellt, als das OpenBSD-Projekt den zuvor eingeschlossenen IPFilter-Paketfilter aufgrund von Lizenzierungsproblemen entfernt hat und einen Austausch benötig. Es wurde im Juli 2001 von Daniel Hartmeier erstellt und ist seit OpenBSD Version 2.0 (veröffentlicht am 11. Oktober 2001) Teil von OpenBSD.
Der PF kann mit (im Gegensatz zu iptables) leicht lesbaren Regelwerken konfiguriert werden, die der nachfolgenden Schreibweise nachempfunden sind. Folgende Regel blockiert alle Datenpakete von Rechnern, die keine Nachrichten zustellen dürfen (blocked_hosts), und erlaubt dies für alle anderen: eme0 ist die Netzwerkschnittstelle, auf der die Filtrierung in Fahrtrichtung (incoming) erfolgt, wobei emeet für ein IPv4-Paket steht, während für ein Protokoll für mehrere Pakte gilt, die Symbolkonstante any für alle Rechner gilt (IP-Notation 0.0.0. 0) und selbst die eigene IP-Adresse der entsprechenden Schnittstelle ist.
Das Besondere an der PK ist, dass immer die zuletzt zutreffende übereinstimmende Regelung gilt, d.h. in der Regel werden im Folgenden die am meisten spezialisierten Regelungen aufgelistet und die allgemeinste (Blacklisting). Das Whitelisting wird durch eine alles ausschließende Regelung am Beginn und am Ende verwirklicht, die es erlaubt. In umgekehrter Richtung der hier dargestellten Regelungen würde also jeder die Möglichkeit haben, Nachrichten zu versenden, da die in der ersten Regelung gesperrten Rechner in der zweiten Regelung zugelassen würden.
Im nächsten Beispiel wird eine beispielhafte NAT-Lösung gezeigt, die auf einem Rechner läuft, z.B.: Matchen gilt für Datenpakete, aber nicht für die Entscheidung, ob sie erlaubt oder blockiert werden sollen. Allen Paketen, die die Brandmauer über das $ext_interface verlässt und aus dem eigenen (internen) Netzwerk $intern_net stammen, wird die Senderadresse von $ext_interface mitgegeben.
Es sind keine weiteren Vorschriften für eine funktionsfähige NAT-Firewall mehr notwendig. Petrus N.M. Hansteen: The Book of PF: A No-Nonsense Guide to the OpenBSD Firewall.