首页/系统/信创系统运维速查/firewalld runtime 与 permanent 两套配置
安全加固65 条

firewalld runtime 与 permanent 两套配置

firewalld 规则分运行时与永久两份:runtime 立即生效但重启丢失,permanent 写盘但需 reload 才生效;分清后能避免改了不生效或临时改动被意外固化。

信创系统运维速查系统更新于 2026-10-13

两套配置为什么容易踩坑

firewalld 同时维护运行时与永久两份规则:不带 --permanent 的修改只影响运行时,立即生效但重启后消失;带 --permanent 的修改写入配置文件,需要 reload 才加载进运行时。理解这条机制,就能解释两类常见现象——『重启后规则没了』和『命令执行了但没生效』。排查规则问题时,把两份配置都列出来对比是最快的入口。

基本信息

运行时查看firewall-cmd --list-all、--list-ports
永久查看firewall-cmd --list-all --permanent、--list-ports --permanent
固化当前运行时firewall-cmd --runtime-to-permanent
重载firewall-cmd --reload(丢弃未固化的运行时改动)
完全重载firewall-cmd --complete-reload(重建全部规则)
权限要求root 或 sudo

典型使用场景

  • 临时放行端口做联调,确认无误后再固化
  • 排查规则失效时对比运行时与永久两份配置
  • 交付前把联调期间的临时放行固化或清理干净
  • 批量下发规则时统一用 --permanent 加 reload 的方式
  • 演练与回滚:用运行时改动快速试错,不影响重启后的基线

两套配置操作

两套配置操作
firewall-cmd --add-port=9090/tcp              # 仅运行时,重启即失效
firewall-cmd --list-ports                     # 看运行时端口
firewall-cmd --list-ports --permanent         # 看永久侧端口
firewall-cmd --runtime-to-permanent           # 把当前运行时整体固化到永久配置
firewall-cmd --reload                         # 重新加载永久配置(未固化改动被丢弃)
firewall-cmd --check-config 2>/dev/null || echo '永久配置存在问题'

对比与排错

对比与排错
diff <(firewall-cmd --list-all) <(firewall-cmd --list-all --permanent)   # 两份配置差异一目了然
firewall-cmd --zone=public --list-all --permanent | head -20             # 指定区域核对
systemctl status firewalld --no-pager | tail -5                           # 服务状态与最近报错
journalctl -u firewalld -n 20 --no-pager                                  # reload 报错时看这里
cp -a /etc/firewalld /etc/firewalld.bak.$(date +%F)                       # 大批量改动前先备份配置目录

runtime 与 permanent 对比

维度runtimepermanent
生效时机立即生效reload 或重启后生效
重启后是否保留不保留保留
查看方式默认参数追加 --permanent
典型命令--add-port、--add-service--add-port ... --permanent
被 reload 影响未固化的改动被丢弃重新加载为运行时规则
适用场景临时试错、联调基线配置、交付固化
--reload 会丢弃未固化的运行时改动:已经调试通过的临时放行要先 --runtime-to-permanent 再用 reload,否则一次 reload 就把改动清掉。
--complete-reload 会重建全部规则并可能中断已建立的转发会话:生产环境优先使用 --reload,只在规则结构混乱需要彻底重建时用它。

易错点

  • 「规则不生效」时只在运行时里找,忘了规则加的是 --permanent 而没执行 reload
  • 把未固化的临时放行直接 reload,改动被丢弃,问题表现为『刚才明明加过』
  • 长期只在运行时加规则,机器重启后安全策略回到基线之外的状态,甚至出现业务端口未放行
  • 使用 --complete-reload 中断了已有的转发连接,业务出现短时中断
  • 大批量改动前不备份 /etc/firewalld,配置写坏后只能靠记忆重建

数据来源与参考

  • firewalld 官方文档(Runtime vs Permanent)
  • man 1 firewall-cmd
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌