阿里云ECS安全组设置正确但服务访问不通如何排查?

当阿里云 ECS 的安全组规则配置看似正确(例如已放行对应端口),但服务仍然无法访问时,问题通常不在安全组本身,而在于网络链路的其他环节主机内部状态

请按照以下逻辑顺序,由外而内、由简入繁进行排查:

1. 确认“公网”与“私网”的访问路径

这是最常见的新手误区。

  • 场景:你在本地电脑通过公网 IP 访问,或者在另一台阿里云 ECS(同一 VPC 内)通过内网 IP 访问。
  • 检查点
    • 公网访问:确保你使用的是实例的公网 IP(EIP 或弹性公网 IP)。如果实例没有绑定公网 IP,外部无法直接访问。
    • 内网访问:如果在 VPC 内部互访,必须使用内网 IP(私有 IP),且双方安全组的“授权策略”必须同时允许对方 IP 段(如 0.0.0.0/0 或具体 CIDR)。
    • 带宽限制:检查实例是否欠费导致带宽被限制,或者带宽包已满。

2. 验证安全组规则的具体细节

虽然你认为设置正确,但请再次核对以下细节:

  • 方向:确认规则是入方向(Inbound)还是出方向(Outbound)。服务访问不通通常是入方向没配好。
  • 协议类型:确认选对了协议(TCP/UDP/ICMP 等)。例如 Web 服务通常是 TCP 80/443。
  • 端口范围:确认端口号完全匹配。注意不要写成 80,81 这种逗号分隔,阿里云支持的是单个端口或 - 表示的范围(如 80-80)。
  • 优先级:如果有多个规则,确保没有低优先级的“拒绝(Deny)”规则覆盖了你的“允许(Allow)”规则(虽然阿里云默认行为不同,但需留意自定义策略)。
  • 生效时间:修改安全组规则后,通常需要几秒到几分钟生效,建议等待 1-2 分钟后再测试。

3. 检查操作系统内部防火墙(关键步骤)

云厂商的安全组只是第一道防线,Linux/Windows 系统内部的防火墙往往会拦截流量。

Linux 系统

  • Firewalld (CentOS/RHEL/Fedora):
    sudo firewall-cmd --list-all
    # 查看是否有对应的 service 或 port 被允许
    # 如果没有,添加并重启
    sudo firewall-cmd --permanent --add-port=80/tcp
    sudo firewall-cmd --reload
  • UFW (Ubuntu/Debian):
    sudo ufw status verbose
    # 查看状态是否为 active,确认端口是否在 ALLOWED 列表中
    # 临时关闭测试(生产环境慎用)
    sudo ufw disable
  • iptables:
    sudo iptables -L -n -v
    # 查看 INPUT 链是否有 DROP 或 REJECT 规则拦截了该端口

Windows 系统

  • 打开"Windows Defender 防火墙” -> “高级设置”。
  • 检查“入站规则”,确认是否有针对该端口的规则被启用。
  • 暂时关闭防火墙进行测试(仅用于排查,测试完需开启)。

4. 检查服务进程监听状态

确认服务本身是否正在运行,并且监听了正确的网卡和端口

  • Linux 检查命令
    # 查看端口监听状态
    netstat -tunlp | grep <端口号>
    # 或者
    ss -tunlp | grep <端口号>
  • 关键点分析
    • 如果输出显示 127.0.0.1:<端口>localhost:<端口>:说明服务只监听本地回环地址。此时外部请求会被拒绝。解决方法:修改服务配置文件,将监听地址改为 0.0.0.0
    • 如果没有任何输出:说明服务未启动,请检查服务日志。
    • 如果显示 0.0.0.0:<端口>:::<端口>:说明服务正常监听所有网卡,继续排查其他环节。

5. 使用阿里云控制台工具诊断

利用阿里云自带的工具可以跳过本地网络干扰:

  • 远程连接(Workbench):登录到 ECS 控制台,点击“远程连接”进入 Workbench。
    • 在工作bench 中尝试 telnet 127.0.0.1 <端口>curl localhost:<端口>
    • 如果 Workbench 能通,但外部不通,说明是安全组本地防火墙问题。
    • 如果 Workbench 也不通,说明是服务进程系统防火墙问题。
  • 云监控/健康检查:部分场景下可观察 CPU、内存负载是否过高导致服务无响应。

6. 检查中间网络设备或云产品

  • 负载均衡 (SLB/ALB/NLB):如果你是通过 SLB 访问,请检查 SLB 的健康检查配置、后端服务器组状态以及 SLB 自身的监听规则和安全组。
  • NAT 网关/路由表:如果是通过 NAT 网关访问,检查路由表是否正确指向了目标 ECS。
  • DDoS 防护:如果遭受攻击,可能触发了高防清洗,导致正常流量也被丢弃(通常会有告警提示)。

总结排查清单

如果上述步骤仍未解决,请按此顺序快速复核:

  1. 端口监听netstat/ss 确认服务监听的是 0.0.0.0 还是 127.0.0.1
  2. 系统防火墙:确认 Linux firewalld/ufw 或 Windows 防火墙已放行。
  3. 安全组方向:确认是入方向规则,且协议/端口/来源 IP 无误。
  4. 公网可达性:确认有公网 IP 且未欠费。
  5. 服务状态:确认服务进程本身没有崩溃或报错。

通过以上步骤,95% 以上的“安全组已开但连不上”的问题都能定位并解决。如果依然无法解决,建议查看 /var/log/messages (Linux) 或 Windows 事件查看器中的详细报错日志。