安全组放行了端口还是连不上?云服务器端口排查的完整链路
刚把服务部署到云服务器上,本地 curl 一下能通,换到自己的电脑上访问却连不上;安全组里明明已经放行了端口,换个端口还是一样。这种“明明都配了,就是不通”的问题,几乎每个用云服务器的人都遇到过。
端口不通很少是玄学,它一定卡在某一个环节上。本文把一次访问要经过的完整链路拆开,按顺序逐个排查,帮你快速定位到底是哪一环拦住了请求。
一、先把链路画出来:一次访问要过五道关
从你的电脑访问云服务器上的一个服务,请求依次经过:
- 客户端网络:你本地的网络、公司出口防火墙
- 云平台安全组:云上的虚拟防火墙,默认拒绝、按白名单放行
- 系统防火墙:服务器操作系统里的 firewalld、iptables 或 ufw
- 服务监听:服务是否真的在跑、监听在哪个地址和端口上
- 应用程序本身:服务收到请求后是否正常处理
排查的基本思路就是由内而外:先确认服务本身没问题,再一层层向外放开,最后从外部验证。顺序反了很容易白忙一场。
二、第一步:确认服务真的在监听
先登录服务器,看端口到底有没有被监听:
ss -tlnp | grep 8080
能看到类似 0.0.0.0:8080 的输出,说明服务在监听所有网卡;如果看到的是 127.0.0.1:8080,说明服务只监听了回环地址,只有本机能访问,从外面永远连不上。这是新手最常见的坑之一。
解决方法是改服务的监听地址:Nginx 改 listen 8080;、应用的配置文件里把 127.0.0.1 改成 0.0.0.0,然后重启服务。
如果 ss 里根本没有这个端口,先看服务跑起来没有:
systemctl status nginx
# 容器部署的服务看这里
docker ps | grep 8080
服务没启动、启动失败、端口被别的进程占了,都会表现为“端口不通”。
三、第二步:本机自测,先排除应用本身
在服务器本机上访问一次:
curl -v http://127.0.0.1:8080/
- 本机能通,说明应用本身没问题,问题在网络或防火墙这一侧,继续往下查。
- 本机也不通,那就不用去折腾安全组了,先看应用日志:
journalctl -u nginx或应用自己的日志文件,解决启动报错、配置错误、依赖缺失这类问题。
这一步的意义是把问题范围切成两半:应用问题还是网络问题。
四、第三步:查系统防火墙
很多系统默认开着防火墙,服务监听正常、本机能通,但外部请求在操作系统这一层就被拦下了。
# firewalld(CentOS / RHEL / EulerOS 常用)
firewall-cmd --state
firewall-cmd --list-all
# 放行端口后记得重载配置
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
# iptables
sudo iptables -L -n | grep 8080
# ufw(Ubuntu 常用)
sudo ufw status
sudo ufw allow 8080/tcp
注意一个细节:云服务器上安全组和系统防火墙是两道独立的关卡,只放行其中一道是不够的,两边都要放行。
五、第四步:查安全组,这是云上最容易踩的坑
在控制台找到这台云服务器绑定的安全组,逐项核对入方向规则:
- 方向:放行的是入方向还是出方向?从外部访问服务,需要的是入方向规则。
- 协议:Web 服务一般是 TCP,不要误选成 UDP。
- 端口范围:写的是
8080还是8080-8080?不要把服务端口和源端口搞混。 - 源地址:测试阶段可以用
0.0.0.0/0,正式使用建议按需收窄到可信地址段。 - 生效范围:确认规则加在当前这台服务器绑定的安全组上,而不是另一台机器的安全组。
还有两个容易忽略的点:安全组规则一般是改完即时生效,不需要重启服务器;一台服务器可以绑定多个安全组,多个安全组的规则是并集关系,任意一个放行即可。
另外要分清访问地址:公网访问要用公网 IP 或绑定的弹性公网 IP,内网 IP 只能在云内网环境访问,拿着内网 IP 从家里访问是永远不通的。
六、第五步:从外部验证,分清“超时”和“拒绝”
回到自己的电脑上测试:
telnet 公网IP 8080
nc -vz 公网IP 8080
curl -v http://公网IP:8080/
两种失败现象指向完全不同的方向:
- 连接超时(timeout):请求发出去没有回音,大概率是安全组或系统防火墙拦截,也可能是本地网络或运营商的问题。
- 连接被拒绝(refused):包已经到达服务器,但对应端口上没有服务在监听,回去查第二步的监听地址和服务状态。
如果换一台机器、换一个网络(比如手机热点)就能通,问题可能出在你原来那台机器所在的网络出口上,而不是服务器。
七、常见坑速查表
| 现象 | 最可能的原因 | 先查什么 |
|---|---|---|
| 本机通、外面不通 | 安全组或系统防火墙未放行 | 安全组入方向规则、firewall-cmd |
| 任何地方都不通 | 服务没启动或监听地址不对 | ss -tlnp、systemctl status |
| telnet 提示 refused | 服务未监听该端口 | 服务配置、监听地址 127.0.0.1 |
| telnet 一直超时 | 防火墙拦截或地址错误 | 安全组、系统防火墙、公网 IP |
| 换端口后还是不通 | 前面的环节没改对 | 按本文顺序从头重查一遍 |
八、推荐的排查顺序
ss -tlnp看服务是否监听、监听在哪个地址- 本机
curl 127.0.0.1:端口,确认应用本身正常 - 查系统防火墙,放行对应端口
- 查安全组入方向规则,确认协议、端口、源地址和绑定关系
- 从外部
telnet或nc验证,分清超时还是拒绝 - 还不行再看业务日志和本地网络
端口不通的问题,九成出在“监听地址、系统防火墙、安全组”这三处。按链路由内而外一层层缩小范围,大多数情况十几分钟就能定位,比反复重启服务、反复改配置要快得多。
- 点赞
- 收藏
- 关注作者
评论(0)