安全组(Security Group)
在每一个EC2实例创建的过程中,你都会被要求为其指定一个安全组(Security Group)。这个安全组充当了主机的虚拟防火墙作用,能根据协议、端口、源IP地址来过滤EC2实例的入向和出向流量。
通过安全组,你可以定义该EC2实例对外开放哪一些服务端口。比如你可以开放TCP/22端口来用于SSH登陆,或者开放TCP/80端口来用于HTTP服务。
除了使用安全组之外,你还可以继续保留系统原生的防火墙(Linux下的iptable和Windows的防火墙)。
安全组有如下特性:
- 默认情况下,所有入方向的流量都会被拒绝
- 默认情况下,所有出方向的流量都会被允许
- 安全组的规则可以随时添加、删除和更改
- 更改安全组的设置会马上生效
- 一个安全组可以应用到多个不同EC2实例上,一个EC2实例也可以使用多个安全组(最多5个安全组,每个安全组50个规则)
- 安全组是有状态的- 如果某个流量被入方向的规则放行,那么无论它的出站规则如何,它的出方向响应流量都会被无条件放行- 如果从主机发出去的出站请求,无论入站规则如何,该请求的响应流量都会被无条件放行
- 你不能使用安全组来禁止某些特定的IP地址访问主机,要达到这个效果需要使用网络访问控制列表(NACL)
- 在安全组内只能设置允许的条目,不能设置拒绝的条目
- 安全组的源IP地址可以选择所有IP地址(0.0.0.0/0),特定的IP地址(比如8.8.8.8/24),或者处于同一个VPC中的其他安全组
- 一个流量只要被安全组的任何一条规则匹配,那么这个流量就会被允许放行
- 安全组会关联到EC2实例的ENI(网络接口)上
连接跟踪
- 安全组是有状态的,因此AWS使用连接跟踪来跟踪实例的入向和出向流量
- 对于入向流量的响应包,会被自动允许从实例出去,无论出向的安全组规则是如何。反之亦然
- 并不是所有通信都会被跟踪 - 如果安全组规则允许所有通信 (0.0.0.0/0) 的 TCP 或 UDP 流,并且另一个方向存在允许所有端口 (0-65535) 的所有响应通信 (0.0.0.0/0) 的对应规则,则不会跟踪该通信流。
- 跟踪的信息流在你删除了安全组规则后并不会马上消失,而可能会持续几分钟(甚至最多5天)
- 对于除了TCP、UDP或ICMP之外的协议,仅跟踪IP地址和协议编号
举个例子,如下图所定义的安全组规则。
- 安全组会跟踪TCP/22的入向和出向流量,因为源IP地址定义的是具体的地址(203.0.113.1/32),而不是所有IP地址(0.0.0.0/0)
- 安全组不会跟踪TCP/80的流量,因为其入向和出向的流量都是针对所有IP地址(0.0.0.0/0)
- 安全组会跟踪ICMP流量,因为无论规则如何,安全组都会跟踪ICMP流量
入站规则协议类型端口号****源 IPTCP22 (SSH)203.0.113.1/32TCP80 (HTTP)0.0.0.0/0ICMP全部0.0.0.0/0出站规则协议类型端口号****目的地 IP全部全部0.0.0.0/0
安全组(Security Group)和网络访问控制列表(Network Access Control List)都扮演了类似的防火墙功能。
版权归原作者 Loong_1213 所有, 如有侵权,请联系我们删除。