PF防火墙

PF （Packet Filter ，常缩写为 pf）是一个以 BSD 许可发布的，常被用于 BSD 系统的防火墙软件。类似于其他系统中的 netfilter (iptables)、 ipfw 或 ipfilter。

PF 起初是为 OpenBSD 开发的，但已被移植到许多其他操作系统。

历史 
PF 的开发始于 OpenBSD 开发人员不满 Darren Reed 开发的 IPFilter 防火墙所用的许可证，而在 IPFilter 于 2001 年 5 月 30 日被从 OpenBSD 的 CVS 源码树中删除后，PF 被设计来取代 IPFilter。它的大部分规则语法也都源自 IPFilter。

PF 的最初版本由 Daniel Hartmeier 编写， 并随 OpenBSD 3.0 于 2001 年 12 月 1 日发布，在此后 Henning Brauer 和 Ryan McBride 对其进行了深度的重新设计，大部分代码由 Henning Brauer 编写。目前 Henning Brauer 是 PF 的主要开发者。

特征 
语法方面，PF 的过滤语法与 IPFilter 类似，但进行了一些修改以使其更清晰。

功能方面，PF 支持 SMP（对称多处理）和 STO（状态跟踪选项），也集成了常见的网络地址转换 (NAT) 和服务质量 (QoS) 管理模块。在扩展方面，PF 支持用于故障转移和冗余的 pfsync 和 CARP 、用于会话身份验证的 authpf ，以及使配置复杂的 FTP 协议防火墙更容易的 ftp-proxy 等。 

PF 的日志记录是众多创新功能之一。用户可在 pf.conf 中按规则进行配置 PF 的日志记录，被记录的日志会由 PF 通过名为 pflog 的伪网络接口（pseudo-network interface）向应用程序提供。这是从内核态将数据提取至用户态程序的唯一方法。记录下的日志既可以通过 tcpdump （该实用程序在 OpenBSD 中已专门为此目的进行了扩展） 等常见工具来监视，也可以使用 pflogd 守护程序以  tcpdump / pcap 二进制格式保存到磁盘。

其他平台上的移植版本 

除了在其开发平台 OpenBSD 上运行之外，PF 还被移植到了许多其他操作系统，但功能上存在重大差异。有些移植版的历史可以追溯到很多年前，因此与当下  OpenBSD 上拥有最多功能的最新版本差异巨大。

PF 目前被用于：

 FreeBSD  5.3 及以上版本

 Snow Leopard (Mac OS X 10.6) 及以上版本的 Apple macOS 
 所有 iPhone 和 iPad 使用的 Apple iOS 和 iPadOS
 NetBSD 3.0 及以上版本
 DragonFly BSD 1.1 及以上版本
 Debian GNU/kFreeBSD
 甲骨文Solaris 
 QNX 及许多搭载搭载 QNX 的黑莓智能手机型号

另见 

 TCP/IP协议族
 逆向转发

参考

图书

外部链接 

 
 
 The OpenBSD PF guide 
 Firewalling with PF : PF tutorial by Peter N. M. Hansteen
 OpenBSD/pf Firewalling For the Less Gifted 

使用BSD许可证的软件
防火墙软件
MacOS
OpenBSD
BSD软件