备份 firewalld 配置须先执行 sudo firewall-cmd --runtime-to-permanent 同步运行时与永久配置,再完整复制 /etc/firewalld/ 目录并导出文本清单,确保恢复后策略完整有效。

导出和备份 firewalld 配置,关键在于区分“运行时配置”和“永久配置”,并确保两者同步后再归档。只备份文件或只导出命令输出都不完整,容易导致恢复后策略失效。
先同步运行时到永久配置
firewalld 默认区分临时(runtime)和永久(permanent)两套配置。你用 firewall-cmd 加的规则若没加 --permanent,重启就丢失;而当前生效的规则可能还没写入配置文件。所以备份前必须执行:
-
sudo firewall-cmd --runtime-to-permanent—— 把所有正在运行的规则写入/etc/firewalld/下的配置文件 - 执行后建议检查:运行
sudo firewall-cmd --list-all和sudo firewall-cmd --permanent --list-all,输出应一致
完整备份整个 /etc/firewalld 目录
firewalld 的永久配置全部存放在 /etc/firewalld/ 中,包括 zones、services、icmptypes 等子目录。这是最可靠、可直接用于恢复的备份方式:
sudo cp -r /etc/firewalld /backup/firewalld-$(date +%Y%m%d-%H%M)- 推荐加上时间戳,避免覆盖;目录路径可按需调整(如
/root/backup或网络存储位置) - 该方式能保留自定义 zone、修改过的 service 文件、rich rules 等所有细节
补充导出关键信息为文本(便于快速查阅)
纯文本备份不能替代目录备份,但对审计、比对或故障排查很有帮助:
- 所有活跃区域及规则:
sudo firewall-cmd --list-all-zones > /backup/firewalld-zones-$(date +%Y%m%d).txt - 仅当前默认区域:
sudo firewall-cmd --list-all > /backup/firewalld-default-$(date +%Y%m%d).txt - 开放的服务、端口、ICMP 类型:
sudo firewall-cmd --list-services > /backup/services.txt,同理可导出--list-ports、--list-icmp-blocks
注意事项
备份不是一劳永逸,几个实操要点要留意:
- 操作需 root 权限,普通用户加
sudo才有效 - 若系统启用了 SELinux,复制目录后恢复时注意上下文是否正确(可用
restorecon -Rv /etc/firewalld修复) - 不要只依赖
--list-all输出来恢复——它不包含 rich rule 的完整 XML 结构,也不含自定义 zone 的独立文件 - 定期验证备份有效性:在测试机上尝试
cp -r替换 +firewall-cmd --reload,确认规则如预期加载











