端口不通应逐层排查:先确认服务监听地址是否为0.0.0.0(非127.0.0.1),再检查本地防火墙(firewalld/iptables/ufw)是否按协议放行对应端口,接着核对云平台安全组入方向规则,最后用nc或nmap从外部验证全链路连通性。

端口不通时,别急着改安全组或关防火墙。先理清流量路径:公网 → 云平台安全组 → Linux 内核 → 本地防火墙(firewalld/iptables/ufw)→ 服务进程。任一环节卡住,都会表现为“连接超时”或“拒绝连接”。排查必须按顺序逐层验证,跳过任何一层都容易误判。
确认服务是否真在监听且绑对地址
这是最常被忽略的起点。很多服务默认只监听 127.0.0.1,本地 curl 能通,外网必然失败。
- 运行
ss -tlnp | grep :端口号,重点看第四列(Local Address:Port):
– 若是 127.0.0.1:8080 或 ::1:8080:仅本机可访问
– 若是 0.0.0.0:8080 或 *:8080:监听所有 IPv4 接口,正常
– 若是具体内网 IP(如 172.16.10.5:8080):只响应同子网请求 - 常见服务绑定修改方式:
– Nginx:检查listen指令是否带 IP,去掉或改为listen 80;
– Spring Boot:确认未配置server.address=127.0.0.1
– Node.js:避免app.listen(8080, '127.0.0.1'),改用'0.0.0.0'
检查本地防火墙是否放行对应协议
firewalld、ufw、iptables 三者通常互斥,先确认你系统实际启用的是哪一套:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 查 firewalld:
firewall-cmd --state(运行中?)→firewall-cmd --list-ports(有无目标端口?)→firewall-cmd --query-port=端口/tcp(显式放行?)
注意:DNS 需同时加--add-port=53/tcp和--add-port=53/udp;漏掉/tcp或/udp后缀,规则静默失效 - 查 ufw(Ubuntu/Debian):
ufw status verbose,确认状态为 active 且目标端口在 Allow 列表 - 查 iptables:
sudo iptables -L INPUT -n --line-numbers,看是否有匹配--dport 端口的 ACCEPT 规则,且位置在 DROP/REJECT 规则之前 - 加完规则别忘重载:
firewall-cmd --reload或sudo ufw reload
核对云平台安全组入方向规则
安全组是第一道网关,独立于系统防火墙。阿里云、腾讯云等默认拒绝所有入站流量,不手动添加就等于“物理断网”。
- 登录控制台,定位到对应 ECS 实例的安全组 → 查看“入方向”规则
– 协议类型:选 TCP 或 UDP(或二者都选)
– 端口范围:填具体端口(如 8080)或范围(如 8000-9000)
– 授权对象:外网访问需填 0.0.0.0/0;若只允许某 IP 段,确保客户端真实出口 IP 在其中 - 特别注意:
– 安全组无“出方向”影响入站访问,别在出方向瞎配
– 部分厂商默认只开放 22(SSH)和 3389(RDP),HTTP/HTTPS/自定义端口必须手动加
验证网络路径与中间状态
本地能连 ≠ 外网能连。用外部机器测试,结果才具诊断意义:
- 从另一台机器执行:
nc -zv 公网IP 端口
– Connection timed out:大概率被安全组或本地防火墙 DROP
– Connection refused:防火墙已放行,但服务未监听或监听地址错误 - 用
nmap -p 端口 公网IP辅助判断:
– filtered:被防火墙拦截
– closed:防火墙放行,服务没启或崩了
– open:全链路通畅 - 别依赖 telnet:它不发应用层数据,无法识别 TLS 握手失败等深层问题

















