TCPing 被安全组拦截是什么表现?
超时,不是拒绝。这个区别很关键。
为什么是超时
安全组的默认动作是丢弃,不是拒绝。
包到了云平台的网络边界,命中一条不允许的规则,直接扔掉,不给你任何回应。发起方收不到 RST,只能一直等到超时。
而如果是服务器本机的服务没起来,内核会明确回一个 RST,你看到的是「连接被拒绝」。
所以:拒绝 = 到达了主机但端口没开;超时 = 包在中间就没了。前者查服务,后者查策略。
典型特征
最明显的特征是「按地域分化」。
同一个端口,国内节点全部能连,海外节点全部超时;或者某个省份通、隔壁省不通。这种规律性极强的结果,基本就是安全组或者 ACL 按 IP 段放行造成的。
另一个特征是「突然变化」。昨天还好好的,今天某个地区全挂,去查一下最近有没有人改过安全组规则、有没有加过 WAF 或者高防。
和本机防火墙怎么区分
两者表现一样,都是超时,得靠位置判断。
安全组在云平台层面,包还没到服务器就被丢了。这时候服务器上的 tcpdump 抓不到任何东西。
本机防火墙在服务器内部,包到了网卡才被 drop。tcpdump 能看到 SYN 进来,但没有 SYN-ACK 出去。
所以在服务器上抓个包,就能分清是哪一层拦的。
怎么验证
最直接的办法是临时放行。在安全组里加一条允许所有来源的规则,再测一次。
如果立刻通了,那就确认无疑;如果还是超时,问题不在安全组,往本机防火墙、中间设备、路由方向查。
验证完记得把临时规则删掉,别留个 0.0.0.0/0 的全放行在那儿。
几个常见坑
安全组规则是有方向的,入方向放行了,出方向也可能有限制。
规则优先级要看清,拒绝规则有时候会覆盖允许规则。
还有地域问题:部分云厂商的安全组是地域级的,你在 A 地域改了规则,B 地域的机器不受影响。