firewalld规则“丢了”实为未写入永久配置、未重载生效或服务未运行;需分三层验证:查--permanent --list-all确认磁盘配置、--list-all确认运行时加载、systemctl status firewalld确认服务真实运行且无nftables初始化失败。

firewalld 规则“丢了”,通常不是真丢失,而是没写进永久配置、没重载生效、或服务根本没启动。排查要从“规则在哪”“是否加载”“是否运行”三层切入,不靠猜,靠验证。
确认规则是否真的进了 permanent 配置
加了 --permanent 只是把规则写进磁盘文件(如 /etc/firewalld/zones/public.xml),但不会自动生效。很多人执行完就以为完成了,结果重启后全空。
- 查永久配置里有没有:
firewall-cmd --permanent --list-all - 对比运行时配置:
firewall-cmd --list-all - 如果前者有内容、后者为空,说明规则写了但没 reload;如果两者都空,说明根本没加成功或加错 zone
检查 firewalld 服务是否开机自启且真正运行
服务没启用,reboot 后自然不读 permanent 配置;服务看似 running,但可能初始化失败,实际没加载任何规则。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 查是否设为开机自启:
systemctl is-enabled firewalld(应返回 enabled) - 查真实状态:
systemctl status firewalld,重点看:- Active: 是否为 active (running)
-
Logs 末尾是否有
Failed to initialize nftables backend或Zone 'public' not found类错误
- 若异常,先
firewall-cmd --reload再systemctl restart firewalld,避免假启动
验证当前 zone 是否匹配网卡和实际流量路径
规则加在 public 区域,但你的网卡绑在 trusted 区域,那放行再多端口也没用。常见于多网卡、云服务器弹性网卡或 NetworkManager 管理的环境。
- 查活跃 zone 和对应接口:
firewall-cmd --get-active-zones - 查某接口属于哪个 zone:
firewall-cmd --get-zone-of-interface=eth0 - 临时把接口切到目标 zone 测试:
firewall-cmd --zone=public --change-interface=eth0 - 永久生效需配合
--permanent并 reload
排除外部干扰:宝塔、脚本、nftables 后端冲突
尤其在生产环境,规则“莫名消失”往往不是 firewalld 自己的问题。
-
宝塔面板:会周期性检查端口监听状态,若
ss -tlnp | grep :8888没输出,它可能自动删掉对应放行规则——先确认服务真在监听 -
手动清理脚本:如有人执行过
iptables -F或ufw reset,会清空底层规则,firewalld 运行时视图变空 -
nftables 后端损坏:CentOS 8+/Rocky 9 默认用 nftables,若
/etc/firewalld/zones/public.xml格式错误或被截断,--reload会静默失败
不复杂但容易忽略:每次改 permanent 规则后,必须 firewall-cmd --reload;每次 reboot 前,务必确认 systemctl is-enabled firewalld 是 enabled,且 firewall-cmd --permanent --list-ports 和 --list-ports 输出一致。

















