问题很可能出在安全组之外的其他网络控制层,需依次排查地域一致性、系统防火墙、服务监听状态、IP绑定方式及安全组规则方向与协议匹配性。

如果您已确认阿里云ECS实例的安全组中放行了目标端口,但外部仍无法访问该端口,则问题很可能出在安全组之外的其他网络控制层。以下是定位与解决此问题的多种方法:
一、确认ECS实例所属安全组与地域一致
安全组规则仅对同地域、同网络类型的ECS实例生效。若实例部署在华北1(北京),而安全组创建于华东2(上海),则规则完全不生效。
1、登录阿里云控制台,进入ECS实例详情页。
2、查看“实例信息”区域中的“地域”和“可用区”字段。
3、点击左侧导航栏“网络与安全”→“安全组”,核对当前安全组的“地域”是否与实例完全一致。
4、若不一致,需在对应地域下新建安全组并绑定至该ECS实例,或切换控制台顶部地域至匹配位置后操作。
二、检查系统级防火墙(iptables/firewalld/ufw)
即使安全组放行,Linux系统内置防火墙仍会拦截请求。该层拦截常导致Connection refused或超时,且无日志提示。
1、通过SSH连接ECS实例,执行sudo systemctl status firewalld检查firewalld状态。
2、若显示active (running),执行sudo firewall-cmd --list-ports查看已开放端口。
3、若目标端口未列出,执行sudo firewall-cmd --add-port=80/tcp --permanent(以80为例)并运行sudo firewall-cmd --reload。
4、若firewalld未启用,检查iptables:sudo iptables -L -n | grep :80;若无匹配项,添加规则:sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT,再保存:sudo service iptables save(CentOS 6)或sudo iptables-save > /etc/sysconfig/iptables(CentOS 7)。
5、Ubuntu系统请检查ufw:sudo ufw status verbose,如启用且未放行,执行sudo ufw allow 80。
三、验证目标端口服务是否真实监听
安全组与防火墙均放行后,若服务未启动或绑定错误地址,端口仍不可达。必须确认进程正在监听0.0.0.0(而非127.0.0.1)且处于LISTEN状态。
1、执行sudo netstat -tuln | grep :80(将80替换为目标端口)。
2、若输出为空,说明服务未运行或未监听;若显示127.0.0.1:80,表示仅本地可访问,需修改服务配置绑定0.0.0.0:80。
3、对于Nginx,检查listen指令是否含127.0.0.1字样,应改为listen 80;或listen 0.0.0.0:80;。
4、重启服务:sudo systemctl restart nginx(或其他对应服务名)。
四、排查服务绑定IP与网络类型
ECS实例若使用专有网络VPC且配置为内网IP,默认不响应公网请求。即使安全组放行,若服务仅绑定内网IP或未分配公网IP,外网仍无法建立TCP连接。
1、在ECS控制台实例详情页,确认“公网IP”字段存在有效IPv4地址。
2、执行ip addr show,确认eth0或ens3等主网卡是否含inet 后接公网IP段(非10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)。
3、若仅显示内网IP,需前往ECS实例“更多”→“网络和安全组”→“绑定弹性公网IP”。
4、确认应用配置文件中未强制指定host: 127.0.0.1或bind: 10.x.x.x等私有地址。
五、检查安全组规则方向与协议匹配
安全组默认拒绝所有入方向流量,仅放行明确配置的规则。常见疏漏包括:仅配置出方向、协议类型选错(如填TCP却尝试UDP访问)、授权对象未覆盖客户端IP。
1、进入安全组“入方向”规则列表,确认存在目标端口条目。
2、检查“协议类型”是否与实际请求一致:HTTP/HTTPS用TCP,DNS可能用UDP,自定义服务需严格对应。
3、检查“授权对象”:若填写1.2.3.4/32,仅该IP可访问;测试阶段建议临时设为0.0.0.0/0(含IPv4全部地址)。
4、确认“优先级”数值越小越先匹配,避免高优先级拒绝规则覆盖低优先级允许规则。
关键提示:安全组规则修改后无需重启ECS实例,但部分旧规则缓存可能延迟1–2分钟生效











