18.3 IPFilter(IPF)
IPFilter(IPF)是早期跨平台开源防火墙,在 FreeBSD 等多种操作系统上均可运行。
IPF 提供包过滤和网络地址转换(NAT)功能,其核心作者为 Darren Reed。IPF 几乎由他一人写就,并移植到多种系统。
警告
本节所述内容建议在测试环境中验证后再用于生产部署。
18.3.1 启用 IPF 防火墙
启用 IPF 防火墙需要准备配置文件并启动相关服务,具体步骤如下。
如需启用 IPF,可执行以下命令:
sh
# 复制示例文件作为默认配置规则集文件,否则 ipfilter 启动后将无规则生效。示例文件自带的规则不影响使用
# cp /usr/share/examples/ipfilter/ipf.conf.sample /etc/ipf.rules- 启动 IPF 防火墙:
sh
# service ipfilter enable # 设置 ipfilter 在系统启动时自动启动
# service ipfilter start # 启动 ipfilter 服务- 启动 ipnat:
ipnat 是 IPF 的组成部分,专门用于维护网络地址转换(NAT)规则。NAT 可以实现内网 IP 与公网 IP 的转换,以及端口转发等功能。
sh
# cp /usr/share/examples/ipfilter/ipnat.conf.sample /etc/ipnat.rules # 复制示例文件作为默认配置规则集,否则 ipnat 无法启动
# service ipnat enable # 设置 ipnat 在系统启动时自动启动
# service ipnat start # 启动 ipnat 服务注意
ipfilter 服务重启后,ipnat 也需要重启。
IPF 的管理命令主要有 ipf、ipfstat 和 ipnat,常用操作示例如下:
18.3.1.1 相关文件结构
IPFilter 的配置文件结构如下。
sh
/
├── etc
│ ├── ipf.rules # IPFilter 防火墙规则文件
│ └── ipnat.rules # IPNAT 转发规则文件
└── usr
└── share
└── examples
└── ipfilter
├── ipf.conf.sample # IPFilter 示例配置
└── ipnat.conf.sample # IPNAT 示例配置18.3.2 参考文献
- FreeBSD Project. ipf -- alters packet filtering lists for IP packet input and output[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipf&sektion=8. IPFilter 包过滤规则管理工具手册页,描述规则加载、刷新与状态表操作。
- FreeBSD Project. ipf -- IP packet filter[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipf&sektion=4. IPFilter 内核模块手册页,描述设备接口与内核可调参数。
- FreeBSD Project. ipf, ipf.conf -- IPFilter firewall rules file format[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipf.conf&sektion=5. IPFilter 规则文件格式手册页,定义过滤、NAT 与状态跟踪规则语法。
- FreeBSD Project. ipfstat -- reports on packet filter statistics and filter list[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipfstat&sektion=8. IPFilter 统计信息查看工具手册页。
- FreeBSD Project. ipnat -- user interface to the NAT subsystem[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipnat&sektion=8. IPFilter NAT 子系统管理工具手册页。
- FreeBSD Project. ipnat.conf -- IPFilter NAT rules file format[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipnat.conf&sektion=5. IPFilter NAT 规则文件格式手册页,定义了
rdr等规则的正确语法。 - FreeBSD Project. ipmon -- monitors /dev/ipl for logged packets[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ipmon&sektion=8. IPFilter 日志监控守护进程手册页。
- FreeBSD Project. ippool, ippool.conf -- IP Pool file format[EB/OL]. [2026-04-14]. https://man.freebsd.org/cgi/man.cgi?query=ippool&sektion=5. IPFilter 地址池配置文件格式手册页。
- FreeBSD Project. FreeBSD Handbook, Chapter 33.4: IPFILTER (IPF)[EB/OL]. [2026-04-14]. https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-ipf. FreeBSD 手册中关于 IPF 防火墙的配置指南与示例。