PF 防火墙的配置命令。

补充说明

pfctl 命令是 PF 防火墙的配置命令,PF 防火墙 ( 全称:Packet Filter ) 是 UNIX LIKE 系统上进行 TCP/ip 流量过滤和网络地址转换的软件系统。PF 同样也能提供 TCP/IP 流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF 最早是由 Daniel Hartmeier 开发的,现在的开发和维护由 Daniel 和 openBSD 小组的其他成员负责。
PF 防火墙的功能很多,本站只列举一些基本配置。

激活

要激活 pf 并且使它在启动时调用配置文件,编辑/etc/rc.conf文件,修改配置 pf 的一行:

pf=yes

重启操作系统让配置生效。
也可以通过 pfctl 程序启动和停止 pf:

pfctl -e
pfctl -d

注意这仅仅是启动和关闭 PF,实际它不会载入规则集,规则集要么在系统启动时载入,要在 PF 启动后通过命令单独载入。

配置

系统引导到在 rc 脚本文件运行 PF 时 PF 从/etc/pf.conf文件载入配置规则。注意当/etc/pf.conf文件是默认配置文件,在系统调用 rc 脚本文件时,它仅仅是作为文本文件由 pfctl 装入并解释和插入 pf 的。对于一些应用来说,其他的规则集可以在系统引导后由其他文件载入。对于一些设计的非常好的 unix 程序,PF 提供了足够的灵活性。
pf.conf 文件有 7 个部分:

  • 宏:用户定义的变量,包括 IP 地址,接口名称等等。
  • 表:一种用来保存 IP 地址列表的结构。
  • 选项:控制 PF 如何工作的变量。
  • 整形:重新处理数据包,进行正常化和碎片整理。
  • 排队:提供带宽控制和数据包优先级控制。
  • 转换:控制网络地址转换和数据包重定向。
  • 过滤规则:在数据包通过接口时允许进行选择性的过滤和阻止。

除去宏和表,其他的段在配置文件中也应该按照这个顺序出现,尽管对于一些特定的应用并不是所有的段都是必须的。
空行会被忽略,以#开头的行被认为是注释。

控制

引导之后,PF 可以通过 pfctl 程序进行操作,以下是一些例子:

pfctl -f /etc/pf.conf  # 载入 pf.conf 文件
pfctl -nf /etc/pf.conf # 解析文件,但不载入
pfctl -Nf /etc/pf.conf # 只载入文件中的NAT规则
pfctl -Rf /etc/pf.conf # 只载入文件中的过滤规则
pfctl -sn # 显示当前的NAT规则
pfctl -sr # 显示当前的过滤规则
pfctl -ss # 显示当前的状态表
pfctl -si # 显示过滤状态和计数
pfctl -sa # 显示任何可显示的

完整的命令列表,请参阅 pfctl 的 man 手册页。