firewalld需执行--reload才能使--permanent规则生效,因其仅写入配置文件而不影响运行时;--reload将永久配置加载至内存且不中断长连接,而restart会断连。

为什么需要 reload
firewalld 区分运行时(runtime)和永久(permanent)配置。用 --permanent 添加的规则只写入配置文件,不会自动应用到当前运行的防火墙;临时添加的规则(不带 --permanent)虽立即生效,但重启后丢失。只有 firewall-cmd --reload 能把永久配置载入运行时环境,且不中断现有连接。
正确执行 reload 的步骤
- 确保你有 root 权限,通常需加 sudo
- 运行命令:sudo firewall-cmd --reload
- 执行后无输出即表示成功;如有报错(如“Failed to reload”),说明配置语法错误或服务异常
- 建议 reload 后立即验证,例如运行 sudo firewall-cmd --list-all 查看当前生效的全部规则
常见误区提醒
- 不要用 systemctl restart firewalld:这会强制断开所有已有连接,影响线上服务
- 不要省略 --reload:仅执行 --add-port 或 --add-service(即使带 --permanent)后不 reload,规则依然不生效
- 区分 --reload 和 --complete-reload:后者会清空连接状态,仅在特殊调试场景使用
配套检查动作
reload 不是孤立操作,建议顺手确认几项:
- 查服务状态:sudo firewall-cmd --state(应返回 running)
- 查默认区域:sudo firewall-cmd --get-default-zone
- 查该区域开放端口:sudo firewall-cmd --zone=public --list-ports(把 public 换成你实际用的 zone)











