用 firewall-cmd --reload 可将永久规则载入运行时而不中断连接;临时规则立即生效但重启丢失,永久规则需 --permanent 写入配置且必须 --reload 才生效。

在 Linux 中重新加载 firewalld 的防火墙规则,用 firewall-cmd --reload 命令即可。它会把永久配置(--permanent 添加的规则)应用到当前运行环境中,同时不中断已建立的网络连接。
为什么必须用 --reload?
firewalld 区分临时规则和永久规则:
- 临时规则:执行
firewall-cmd --add-port=8080/tcp这类命令后立即生效,但重启服务或系统就丢失; - 永久规则:加了
--permanent(如firewall-cmd --permanent --add-service=http)才会写入配置文件,但不会自动生效; -
--reload是唯一能把永久规则“载入运行时”的操作,不是重启服务,也不清空现有连接。
常见误操作与对应做法
以下操作容易出错,需特别注意:
- 只执行
--permanent添加规则,却忘记--reload→ 规则不生效; - 误用
systemctl restart firewalld→ 会短暂中断所有连接,非必要不推荐; - 混淆
--reload和--complete-reload→ 后者强制重置状态,会断开所有连接,仅调试时使用; - 未用 root 或 sudo 执行 → 提示 permission denied,必须提权运行。
验证是否成功加载
执行 reload 后建议立即检查:
- 查看当前开放端口:
firewall-cmd --list-ports; - 列出所有服务:
firewall-cmd --list-services; - 显示完整配置(含 zone、端口、服务、富规则):
firewall-cmd --list-all; - 确认服务仍在运行:
firewall-cmd --state应返回 running。
配套要点:确保规则持久化
reload 只是“加载”,要让规则开机还在,还需两步:
- 所有修改都加
--permanent参数(如开放端口、添加服务); - 启用 firewalld 开机自启:
systemctl enable firewalld; - 重启后可再次用
firewall-cmd --list-ports验证是否保留。











