第一步排查应覆盖三个层面:网络层、实例系统层和云平台安全策略层。检查云平台控制台的安全组设置和云厂商提供的网络ACL规则;确认实例是否已分配公网IP或绑定负载均衡;在实例内部确认Windows服务是否监听该端口(使用netstat -ano或PowerShell的Get-NetTCPConnection)。同时验证本地/客户端网络是否可以到达目标IP(使用ping/tracert/tcpping)。
确认VPC路由、子网策略和公网出口设置,尤其是华南/香港节点有时需要额外的出口策略。若通过负载均衡或NAT方式访问,需确认转发规则和健康检查配置正确。
在Windows实例上,确认服务已启动并监听对应端口,检查Windows防火墙或第三方防护软件是否阻止入站连接,检查端口是否被其他进程占用。
核对安全组规则方向(入/出)、协议(TCP/UDP)、端口范围以及允许的源IP段,注意安全组规则优先级和是否存在互相冲突的规则。
判断步骤包括:在控制台临时添加一条针对本地IP的入站允许规则并测试;使用外部端口扫描工具(如nmap或在线端口检测)从公网扫描目标端口;在安全组日志或云平台流日志中查看是否有被拒绝的连接记录。如果修改安全组规则后问题立即消失,基本可以确认为安全组导致。
为避免误操作,先在允许来源中只添加自己的公网IP,再逐步放宽。如果使用CIDR范围,注意/32、/24等掩码含义,尽量避免设为0.0.0.0/0除非必要并配合其他安全手段。
很多人只修改了安全组的入站规则却忘记出站规则或反向路径,导致实例无法回传响应包。确保出站规则允许返回流量,或启用状态跟踪功能(stateful)。
Windows 防火墙默认会阻止未授权的入站连接,需为目标端口添加入站允许规则。第三方安全软件(例如杀毒或终端防护)也可能拦截某些端口或应用程序的网络访问,尤其是对高危端口(如3389、3306、22)会有额外策略。
在实例上以管理员身份打开PowerShell,运行Get-NetFirewallRule或netsh advfirewall firewall show rule name=all查看规则;可临时禁用Windows防火墙或第三方防护以排查是否为其引起(注意此操作有风险,只在受控网络/临时测试时进行)。
使用PowerShell命令New-NetFirewallRule -DisplayName "允许TCP端口XXXX" -Direction Inbound -Protocol TCP -LocalPort XXXX -Action Allow来添加规则,添加后再次使用netstat确认服务在监听。
如果实例没有直连公网IP而通过NAT网关或负载均衡器出入流量,需要在相应资源上开放和转发端口。负载均衡常需配置监听端口与后端服务器端口映射,并保证健康检查端口可达,否则后端将被判为异常而不转发流量。
场景一:通过NAT访问外网但公网无法直达实例 —— 需在NAT/弹性公网IP上配置端口映射或绑定弹性公网IP。场景二:负载均衡转发失败 —— 检查后端端口与健康检查端口是否一致,安全组是否允许来自负载均衡IP段的访问。
端口映射和SNAT/DNAT可能改变源IP,若应用依赖源IP白名单,需在负载均衡或NAT上启用保留源IP或将白名单调整为负载均衡的源IP段。
进一步定位可采用抓包、连通性测试和日志分析结合方式。先在实例内用tcpdump(Linux)或Microsoft Message Analyzer/Wireshark(Windows)抓取到达该端口的报文,确认请求是否到达;其次在客户端侧使用traceroute/tcping/nc等工具逐跳检查;同时查看云平台提供的流日志、审计日志或安全组日志以排查被拦截的连接。
抓包时关注三次握手是否完成、RST/ICMP错误返回类型(如destination unreachable)和TTL变化。若出现ICMP unreachable,说明中间路由或ACL拒绝;若只看到入站SYN但无ACK,说明服务未响应或被主机防火墙拦截。
将复杂环境最小化:临时将实例放入专用安全组并仅开放需要测试的端口,或在同一VPC内的另一台主机上直接测试,排除公网、负载均衡等中间层影响。