![防火墙:当出站规则已经存在时,是否需要入站规则来从服务器获取 SYN-ACK?](https://linux22.com/image/748894/%E9%98%B2%E7%81%AB%E5%A2%99%EF%BC%9A%E5%BD%93%E5%87%BA%E7%AB%99%E8%A7%84%E5%88%99%E5%B7%B2%E7%BB%8F%E5%AD%98%E5%9C%A8%E6%97%B6%EF%BC%8C%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E5%85%A5%E7%AB%99%E8%A7%84%E5%88%99%E6%9D%A5%E4%BB%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%8E%B7%E5%8F%96%20SYN-ACK%EF%BC%9F.png)
我有一个 VPC,其中在私有子网中部署了一个 EC2 实例。
我的 NACL(子网防火墙)允许所有入站和出站。
我有我的安全组规则(Ec2 防火墙),它在入站规则上阻止公共 IP,并在出站规则上允许公共 IP。
现在我的 EC2 实例启动与呼叫提供商(twilio)的连接并发起呼叫,并且成功。
从我的 ec2 应用程序,它发起三方握手,由于我的出站规则是允许所有它通过 NAT 到达 twilio。数据包将类似于(源 IP:是 NAT IP 和随机端口号,目标 IP:是 twilio IP 和服务侦听端口号)
然后,twilio 接受请求并向 ec2 服务器提供 SYN-ACK 响应。现在数据包将是(源 ip:twilio ip 和随机端口号,目标 ip:是 Ec2 实例的 NAT ip,端口号是(Ec2 源启动的随机端口号)。)
现在我的问题是,即使入站规则不允许 twilio ip 地址,三次握手是如何成功的?
答案1
AWS 安全组是有状态的。
如果您从实例发送请求,则无论入站安全组规则如何,该请求的响应流量都可以流入。无论出站规则如何,允许的入站流量的响应都可以流出。
即使您阻止通过安全组入站的公共 IP 地址,您仍允许出站连接,从而允许返回流量/握手。
参考