先把当时的情况摆出来。CentOS 8 升级到 4.18.0-348 之后,iptables -L 还有规则输出,可原本放行的 8080 端口从外网访问不通,nft list ruleset 里完全是另一套内容。

这类报错背后常见的原因有几处,逐个排除就行。RHEL 8 起 iptables 是 nftables 的前端,legacy 与 nft 两套规则并存但互不可见。少数情况下是firewalld 用的是 nft 后端,和 iptables 命令各管一套,谁生效取决加载顺序。

还有一种情况,升级后 iptables-services 没启用,iptables 规则只在内存里没落盘。

动手时先确认当前后端

iptables -V; nft list ruleset | head -20

随后统一到一套,先停 firewalld

systemctl disable --now firewalld

接着启用 iptables 服务并落盘

systemctl enable --now iptables && iptables-save > /etc/sysconfig/iptables

剩下的就是验证端口连通性

ss -lntp | grep 8080; nc -zv 127.0.0.1 8080

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

别只看报错消失,验证要多做一步。nft list ruleset 与 iptables -S 输出一致,外网访问 8080 正常,iptables -L 的计数器随访问增长。

补一句。两套防火墙同时管事时,看到的规则不等于生效的规则;要么全用 firewalld,要么全用 iptables-services,别混着来。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189