firewall-cmd --list-ports 仅显示 firewalld 显式放行的端口(如 8080/tcp),不反映服务是否实际监听;需配合 ss -tuln | grep :8080 查监听、firewall-cmd --query-port=8080/tcp 查放行,二者同时满足且排除 SELinux/zone/安全组干扰,端口才真正可用。

firewall-cmd --list-ports 能看到什么?
它只显示 firewalld 显式允许的端口,不是系统实际监听的端口。比如你用 firewall-cmd --add-port=8080/tcp --permanent 加了规则,firewall-cmd --list-ports 就会输出 8080/tcp;但如果你的服务根本没启动、也没监听 8080,这个命令照样显示它“已开放”——只是防火墙放行了,不代表服务真在跑。
怎么确认端口既被监听又被防火墙放行?
必须两步都查:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 查监听:
ss -tuln(推荐)或netstat -tuln(需装net-tools),看输出里有没有:8080且状态是LISTEN - 查放行:
firewall-cmd --query-port=8080/tcp,返回yes才算防火墙点头 - 查完整规则:
firewall-cmd --list-all,能看到端口、服务、富规则等全貌,比--list-ports更可靠
为什么 telnet 或 nc 测试失败,但 firewall-cmd 显示端口已开?
常见原因有三个:
- 服务没监听:
ss -tuln | grep :8080无输出 → 检查服务是否启动、配置绑定地址(如绑127.0.0.1就无法从外部访问) - firewalld zone 错了:默认是
public区域,但你的网卡可能属于trusted或其他 zone,用firewall-cmd --get-zone-of-interface=eth0确认 - SELinux 拦截:临时测一下
setenforce 0,如果连通了,就得配semanage port -a -t http_port_t -p tcp 8080这类策略
要不要用 nmap 扫自己?
要,但得区分场景:
- 扫
localhost:nmap -sT -p 8080 localhost,验证本机服务+防火墙 combo 是否生效 - 扫外网 IP:
nmap -sS -p 8080 your_server_ip,模拟真实访问,能暴露云厂商安全组、NAT 设备等外部拦截点 - 别漏掉
--reason参数:nmap -p 8080 --reason your_server_ip,返回filtered说明被防火墙/安全组挡了,closed是服务没监听,open才是通的

















