应直接使用 nftables 而非 iptables,因主流发行版已默认停用 iptables 原生后端,nftables 具备性能优势(匹配延迟亚微秒级)、统一语法、原生集合支持、原子更新及可持续内核架构。

现在新建防火墙规则,应该直接用 nftables,而不是 iptables。这不是“可选升级”,而是实际运维中的必要切换——主流发行版(RHEL 9、Debian 12+、Ubuntu 22.04 LTS 及更新)已默认停用 iptables 原生后端,仅通过兼容层 iptables-nft 运行。这层翻译不仅带来性能损耗,还会掩盖连接跟踪状态、计数器精度等关键行为差异。
规则匹配机制完全不同
iptables 采用纯线性遍历:1000 条规则平均要检查 500 次才能命中;nftables 在内核中使用哈希表或红黑树索引,同规模下匹配延迟压到亚微秒级。实测显示:
- 1000 条规则时,nftables 包过滤速度快约 33%(12μs → 8μs/包)
- 5000 条规则时,性能优势扩大至 35% 以上
- UDP 高频场景(DNS、QUIC、gRPC-Web)下,nftables 可避免 iptables 强制触发 conntrack 导致的 CPU 突增
一套语法覆盖全部协议和功能
iptables 需要维护多套工具和规则集:
-
iptables(IPv4)、ip6tables(IPv6)、arptables(ARP)、ebtables(桥接) - 每套都要单独写规则、单独保存、单独调试
nftables 用一个 nft 命令统一处理:
- 支持
ip、ip6、inet(双栈)、arp、bridge地址簇 - 一条规则即可覆盖双栈:
nft add rule inet filter input meta nfproto { ip, ip6 } tcp dport 22 accept - 回环流量建议用
meta iifname "lo",不依赖地址族,更稳妥
原生支持集合、映射与原子操作
iptables 管理批量 IP 或端口必须依赖外部工具 ipset;nftables 内置 set 和 map,支持超时自动过期、O(1) 查找:
- 允许 SSH/HTTP/HTTPS 的三端口,iptables 要写 3 行;nftables 一行搞定:
tcp dport {22, 80, 443} accept - 黑名单万级 IP 查找,nftables 不再随规则数线性变慢
- 规则更新是原子事务:要么全生效,要么全回滚,没有临时失效窗口
内核架构更干净,扩展更可持续
iptables 依赖多个独立的 x_tables 模块,每个新 match/target 都需编译内核模块;nftables 基于统一的 nf_tables 子系统:
- 所有协议共用同一套内核接口,无冗余复制
- 用户态语法是声明式(类似 BPF),不是命令式参数堆砌
- 支持 JSON 接口,便于自动化工具集成和策略即代码(GitOps)
- 2026 年起,iptables 原生命令将彻底退出主流内核支持路径










