firewall-cmd --reload 仅将 permanent 规则加载到 runtime,不重置状态;若 runtime 存在冲突规则(如临时规则、direct rules 或 zone 未绑定网卡),permanent 规则可能被覆盖或静默忽略。

firewall-cmd --reload 不重载 permanent zone 规则?
不是失效,是设计如此:firewall-cmd --reload 只把 permanent 中保存的规则“加载进 runtime”,但不会重新初始化整个防火墙状态。如果 runtime 中已有冲突规则(比如之前手动加过临时规则、zone 被切换过、或服务/端口被重复添加),新加载的 permanent 规则可能被覆盖或静默忽略。
常见现象:改了 /etc/firewalld/zones/public.xml 或用 firewall-cmd --permanent --add-port=8080/tcp 后执行 --reload,firewall-cmd --list-ports 仍看不到 8080 —— 因为 runtime 里该端口已被其他规则挡住了,或者 zone 实际没绑定到对应网卡。
- 检查当前生效 zone:
firewall-cmd --get-active-zones - 确认 permanent 和 runtime 内容一致:
firewall-cmd --permanent --list-portsvsfirewall-cmd --list-ports - 临时规则优先级高于 permanent 加载结果,
--reload不清除它们
什么时候必须用 --complete-reload?
firewall-cmd --complete-reload 会彻底终止 firewalld 进程、清空内核 netfilter 规则、重启服务,并从 permanent 配置重建 runtime 状态。它解决的是“状态污染”问题,比如:
- 手动用
iptables -I直接插规则,干扰了 firewalld 管理链 - 多次
--reload后 runtime 出现重复或残留规则(firewall-cmd --list-all显示异常冗余) - 修改了
/etc/firewalld/firewalld.conf中的DefaultZone或FlushAllOnReload,但旧状态未清理
注意:--complete-reload 会导致所有连接中断(包括 SSH),且不保留任何 runtime 规则 —— 它只认 permanent 配置。生产环境慎用,建议在维护窗口执行。
permanent rule 生效的完整链路
permanent 规则不是“写完就生效”,它要经过三步才能真正起作用:
- 第一步:用
--permanent参数操作(如firewall-cmd --permanent --add-service=http)→ 写入 XML 文件(如/etc/firewalld/zones/public.xml) - 第二步:执行
firewall-cmd --reload→ 把 XML 解析成 runtime 规则并注入 iptables/nftables - 第三步:确保目标 zone 已绑定到实际网卡(
firewall-cmd --get-active-zones)且没有更高优先级的 direct rules 或 rich rules 拦截
漏掉任一环都会导致“permanent 写了但不通”。最常被忽略的是第三步:public zone 可能没绑定到 eth0,或者被 firewall-cmd --direct --add-rule 的自定义链绕过了。
调试 permanent rule 失效的实操顺序
别急着 --complete-reload,先按这个顺序查:
- 运行
firewall-cmd --permanent --list-all,确认规则真在 permanent 里 - 运行
firewall-cmd --list-all,对比是否缺失;若缺失,执行firewall-cmd --reload并立刻再查 - 查日志:
journalctl -u firewalld --since "1 hour ago" | grep -i "error\|fail\|reject",看 reload 是否报 XML 解析失败 - 检查 direct rules:
firewall-cmd --direct --get-all-rules,它们默认优先于 zone 规则 - 确认服务/端口没被 rich rule 拦截:
firewall-cmd --list-rich-rules
firewalld 的“永久性”只保证配置落盘,不保证自动同步到运行时——这中间的状态一致性,得靠你亲手验证和干预。










