从iptables迁移到nftables需理解其“表→链→规则”分层结构、统一协议管理及简洁语法;迁移前须确认内核≥3.13(推荐≥4.10)、安装nft工具、停用iptables/firewalld服务,并通过nft list ruleset验证环境;配置使用inet表统管IPv4/IPv6,以set优化多IP规则,且必须手动保存规则至/etc/nftables.conf并启用nftables服务。

从iptables迁移到nftables不是简单替换命令,而是理解规则组织方式、表达逻辑和内核接口的转变。核心在于nftables以“表→链→规则”分层结构统一管理所有协议(IPv4/IPv6/ARP/bridge),并用更简洁语法替代iptables中重复的target和match扩展。
迁移前必须确认的几件事
确保系统内核版本 ≥ 3.13(推荐 ≥ 4.10),用户空间工具 nft 已安装(通常随发行版默认提供,如 Debian/Ubuntu 的 nftables 包、CentOS 8+/RHEL 8+ 已默认启用)。检查当前是否仍在运行 iptables-service 或 firewalld —— 若启用,需先停用并禁用,避免规则冲突:
- systemctl stop iptables && systemctl disable iptables
- systemctl stop firewalld && systemctl disable firewalld
- 验证:运行 nft list ruleset 应返回空或默认策略,而非报错“No such file or directory”
基础配置结构与常用语法对照
nftables 不再按协议拆分命令(如 iptables/ip6tables/arptables),所有规则写在一张表里,通过地址族(inet 表可同时处理 IPv4 和 IPv6)自动适配。典型结构如下:
- table inet filter { —— 创建名为 filter 的 inet 类型表
- chain input { type filter hook input priority 0; policy drop; } —— 定义 input 链,挂钩到内核 input hook,缺省策略为 drop
- chain forward { type filter hook forward priority 0; policy drop; }
- chain output { type filter hook output priority 0; policy accept; }
添加一条允许已建立连接的规则示例:
nft add rule inet filter input ct state established,related accept从 iptables 规则平滑过渡的关键技巧
不要逐条翻译;优先重构逻辑。例如原 iptables 中多条 -s 指定源IP的ACCEPT规则,nftables 可合并为一个带集合(set)的规则,提升性能与可维护性:
- 先创建命名集:nft add set inet filter trusted_hosts { type ipv4_addr; }
- 添加成员:nft add element inet filter trusted_hosts { 192.168.1.10, 10.0.0.5 }
- 引用该集:nft add rule inet filter input ip saddr @trusted_hosts accept
注意:nftables 默认不保存规则到磁盘。重启后会丢失,需手动导出并设置开机加载:
- 保存当前规则:nft list ruleset > /etc/nftables.conf
- 启用 systemd 服务:systemctl enable nftables && systemctl start nftables
- 部分发行版(如 Debian)需额外安装 nftables-persistent 并运行 nftables-save > /etc/nftables.conf
调试与排错实用命令
规则不生效?别急着重写,先查三件事:
- nft list ruleset -a:显示每条规则的句柄(handle),便于精准删除或插入
- nft monitor trace:开启跟踪模式,在另一终端触发连接(如 ping 或 curl),实时看到哪条规则匹配/未匹配
- nft -d counters list ruleset:查看各规则命中计数,快速定位是否被跳过或拦截
- 检查链是否正确挂载:nft list chain inet filter input,确认 priority 和 hook 类型无误
不复杂但容易忽略。真正掌握 nftables 的关键是把“规则即程序”的思路建立起来:表是命名空间,链是执行流分支点,规则是带条件的动作语句。










