修改 firewalld 规则后必须执行 sudo firewall-cmd --reload 才能生效,该命令同步 permanent 配置到 runtime 且不中断现有连接;漏掉 --permanent 或未 reload 均导致规则不生效。

在 Linux 系统中修改 firewalld 防火墙规则后,必须显式重新加载配置才能让新规则生效,否则即使执行了 --add-service 或 --add-port 命令,改动也仅停留在内存中、不会影响实际网络流量控制。
用 --reload 加载最新规则(推荐)
这一步操作起来很简单,直接运行一条命令即可:
执行 sudo firewall-cmd --reload
该命令会把当前所有 永久配置(permanent) 同步到运行时(runtime),同时保留已有连接不中断。这是生产环境中唯一安全的重载方式。
【必须使用 root 权限或 sudo】 普通用户执行会报错“Authorization failed”。
验证是否加载成功
运行以下命令查看当前区域的完整规则:
sudo firewall-cmd --list-all
如果刚添加的 service 或 port 出现在输出里,说明已生效;若没出现,大概率是漏掉了 --permanent 参数或未执行 --reload。
注意:不要用 systemctl restart firewalld 替代 —— 它会强制断开所有已有连接,且可能清空部分 runtime 规则。
两种典型场景下的操作路径
① 只加了一条临时规则(没加 --permanent):
firewall-cmd --zone=public --add-service=http → firewall-cmd --reload
② 先写入永久规则,再加载:
firewall-cmd --permanent --add-port=8080/tcp → firewall-cmd --reload
③ 删除某项服务并持久化:
firewall-cmd --permanent --remove-service=cockpit → firewall-cmd --reload

















