我无法理解AWS“安全组为有状态”的概念。我正在使用安全组规则,在该规则中,我在端口80上打开了入站流量,并且没有出站规则。
从技术上讲,我的理解是,当我们打开入站规则时,出站也会自动打开。当我转到Ec2实例并执行yum update -y时,它挂了。但是,当我为出站中的所有端口添加流量时,yum update工作正常。
帮助我理解。
答案 0 :(得分:1)
从某种意义上说,安全组是有状态的,如果允许一种方式的通信,则允许相反的方式的响应通信。
在您的情况下,当您运行yum update
时,它首先需要通过端口80上的HTTP到达存储库。由于您不允许此出站流量,因此将无法正常工作。但是,如果有人在端口80上请求您的实例,则来自您计算机的响应就会通过。
因此,它不是“如果我允许入站,则允许出站流量”,您需要允许先出现的流量。就您而言,它是出站的。
答案 1 :(得分:0)
当Web浏览器连接到Web服务器时,该连接上有两个端口在起作用:Web服务器上的端口80和客户端上一些高编号的临时端口(例如49152)。请求从客户端:49152发送到服务器:80。这些ip-address:port元组称为套接字。 Web服务器的响应必须从server:80返回到client:49152。
AWS安全组的“有状态”性质意味着会记住某些状态供以后使用。该状态包括构成有效TCP连接的client:49152和server:80套接字的组合。如果在服务器:80上从客户端:49152收到了请求,则将允许从服务器:80对客户端:49152的响应,而无需您配置任何其他出站防火墙规则。
例如,您不必创建第二条规则,以允许从服务器在端口80到客户端在端口49152的出站通信。由于安全组的状态性质,该第二条规则是隐式的。如果此规则不是隐式的,那么创建该规则实际上将非常困难,因为客户端的端口号是临时的,并且可以是多种数字中的任何一种,并且可以是一个连接与另一个连接之间不同的数字。您将事先不知道它将是哪个端口号,因此,如果这不是有状态的,那么您在这里只能做的就是在出站防火墙规则中打开广泛的端口。
EC2 / VPC也具有Network ACLs的概念。这些是无状态防火墙规则。在这种情况下,入站和出站规则都是必需的,流量才能双向流动。