首页/系统/Linux 内核与性能调优速查/iptables 后端与规则来源核对
网络栈调优98 条

iptables 后端与规则来源核对

同一台机器可能存在 nft 与 legacy 两套后端: 先确认当前 iptables 命令的实际后端, 再看规则全貌。

防火墙后端核对

同一台 Linux 主机上可能存在两套防火墙实现:传统的内核模块版本与基于新框架的兼容层。同名命令究竟操作哪一套,由发行版的默认设置和替代项决定。两套后端各自维护规则集,彼此不可见,因此排查放行问题时必须先确认命令的实际后端,统一口径再查看规则全貌。

基本信息

适用平台Linux 各发行版
确认方式版本输出中会标注当前后端;也可查看系统替代项配置
两种视图传统命令看到的规则与新框架命令看到的规则集
权限要求查看通常需要 root
干扰源容器运行时会自行插入链与规则

典型使用场景

  • 端口已放行但业务不通,怀疑规则加到了不生效的那一套后端。
  • 从旧系统迁移到新发行版后,同样的命令行为发生变化。
  • 容器节点上规则来源繁杂,需要区分主机规则与运行时规则。
  • 规则持久化服务与手工添加的规则互相覆盖,需要核对全貌。
  • 排查规则顺序造成的不生效:先命中拒绝规则后再也走不到放行规则。

确认与查看

确认与查看
iptables -V                       # 版本字符串中会标注实际后端
update-alternatives --display iptables 2>/dev/null   # 查看替代项指向
nft list ruleset | head -40        # 新框架视角的规则集
iptables-save | head -40           # 传统命令视角的规则集
nft list ruleset | grep -n 'hook\|policy' | head   # 关注链的挂载点与默认策略
iptables -L INPUT -n -v --line-numbers | head      # 带计数与序号的规则视图

两套视图的差异

查看方式覆盖范围常见误判
传统命令当前命令后端对应的规则集以为看到的就是全部规则
新框架命令全部规则集,含容器运行时插入的链被大量自动生成规则淹没
持久化文件重启后会被加载的规则与运行时规则不一致
不同后端下看到不同规则集属于正常现象;排查放行问题前先确认是哪一套在生效,否则会在两套视图之间反复绕圈。
在两套工具之间交替修改规则会造成互相不可见的状态:改动看起来生效了,重启后又回到另一套规则,建议统一为一套并明确持久化方式。

易错点

  • 在两套工具间反复修改,规则互相不可见,越改越乱且难以回退。
  • 把容器运行时自动插入的规则与主机规则混在一起解读,得出错误的放行结论。
  • 只看规则内容不看命中计数与顺序:被前面规则拦截的放行规则看起来「存在」但没有生效。
  • 忽略持久化:运行时改好但重启丢失,问题在重启后再次出现。
  • 用清空规则的方式验证问题:可能直接切断远程管理通道,需要先保留可回退的会话。

数据来源与参考

  • iptables 手册
  • nft(8) 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌