防火墙放行后仍不通怎么排查
加了放行规则服务却依然连不上,最常见的三类原因:规则加在错误的区域或用 permanent 只写了持久配置没有重载、服务本身没有监听正确地址(例如只绑定回环地址)、以及检查范围只覆盖本机而遗漏了云安全组或上层网络设备。排查顺序应从服务端监听状态出发,再核对防火墙运行态与持久态是否一致,最后从外部复测。
基本信息
| 状态检查 | firewall-cmd --state 与 --get-active-zones |
|---|---|
| 规则查看 | firewall-cmd --list-all 查看目标区域 |
| 运行态与持久态 | --permanent 只写磁盘配置,需 reload 或同时加运行态 |
| 监听核对 | ss -lntp 确认端口与绑定地址 |
| 外部复测 | 从另一台机器用连接测试工具验证 |
典型使用场景
- 新部署服务对外端口已放行但外部仍访问失败
- 批量脚本加了永久规则,忘记执行重载导致不生效
- 服务只监听回环地址,从外部连接被拒
- 容器映射端口场景:宿主机放行但转发链路未生效
- 云环境多层防护排查,区分系统防火墙与安全组
- 变更后回归验证,确认放行范围与预期一致
检查与修正
检查与修正
firewall-cmd --state # 防火墙是否运行
firewall-cmd --get-active-zones # 哪些区域处于活动状态
firewall-cmd --list-all # 目标区域当前生效的规则
firewall-cmd --permanent --list-all | head # 持久配置内容
firewall-cmd --add-port=8080/tcp --permanent # 添加持久放行规则
firewall-cmd --reload # 永久规则需重载后生效
firewall-cmd --list-ports # 重载后确认规则已在运行态
ss -lntp | grep 8080 # 服务端监听地址与端口
nc -vz <服务器IP> 8080 # 从外部机器复测连通性现象与原因对照
| 现象 | 常见原因 | 处理方向 |
|---|---|---|
| 本机可连外部不通 | 防火墙规则或安全组未放行 | 核对区域、端口与上层策略 |
| 本机也不通 | 服务未启动或监听地址不对 | 检查进程与绑定地址 |
| 改完规则无变化 | 只写持久配置未重载 | 执行 reload 或同步加运行态 |
| 部分来源可连 | 区域或来源限制生效 | 核对区域绑定与来源限制规则 |
| 容器场景不通 | 转发链或映射配置问题 | 检查转发与端口映射配置 |
本机能连、外部不通,问题基本在防火墙、安全组或中间网络设备;如果本机也连不上,优先看服务是否在监听预期地址,回环地址与全网地址的区别是高频原因。
排查时把检查范围画清楚:服务进程、系统防火墙、云安全组或硬件策略、以及中间的网络设备,逐层确认比在同一层反复改规则更有效率。