安全组连接跟踪 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

安全组连接跟踪

您的安全组使用连接跟踪来跟踪有关进出实例的流量的信息。将基于流量的连接状态应用规则以确定允许还是拒绝流量。有了这种方法,安全组就具有状态。这意味着无论出站安全组规则如何都允许对入站流量的响应流出实例,反之亦然。

例如,假设您从家中的计算机对您的实例启动 ICMP ping 命令,并且您的入站安全组规则允许 ICMP 流量。跟踪有关连接的信息(包括端口信息)。来自 ping 命令的实例的响应流量不会作为新请求来跟踪,而是作为已建立的连接来跟踪,并且可以流出实例,即使您的出站安全组规则限制出站 ICMP 流量也是如此。

对于除 TCP、UDP 或 ICMP 以外的协议,仅跟踪 IP 地址和协议编号。如果您的实例将流量发送到另一个主机(主机 B),并且在原始请求或响应的 600 秒内,主机 B 在单独的请求中发起到您的实例的同一类型的流量,则无论入站安全组规则如何,您的实例都将接受该请求。您的实例接受它,因为它被视为响应流量。

要确保该流量在您删除安全组规则后立即中断,或确保所有入站流量均遵循防火墙规则,您可以使用子网的网络 ACL。网络 ACL 是无状态的,因此不会自动允许响应流量。有关更多信息,请参阅 Amazon VPC 用户指南中的网络 ACL

未跟踪的连接

并非所有通信流都会被跟踪。如果有一个安全组规则允许所有通信(0.0.0.0/0 或 ::/0)的 TCP 或 UDP 流,而另一个方向上存在一个对应的规则允许所有端口 (0-65535) 的所有响应通信(0.0.0.0/0 或 ::/0),则不会跟踪该通信流。因此,允许响应流量基于允许响应流量的入站或出站规则流动,而不是基于跟踪信息流动。

如果删除或修改了支持该流的规则,则会立即中断未被跟踪的通信流。例如,如果您有一个开放 (0.0.0.0/0) 出站规则,并且删除了允许所有 (0.0.0.0/0) 入站 SSH(TCP 端口 22)流量传输到实例的规则(或修改它以使不再允许连接),则您与实例的现有 SSH 连接将立即删除。该连接以前未跟踪,因此更改将断开连接。另一方面,如果您有一个较细化的入站规则,最初允许 SSH 连接(意味着已跟踪该连接),但将该规则更改为不再允许来自当前 SSH 客户端地址的新连接,则更改规则不会断开现有连接。

Example

在以下示例中,安全组具有用于 TCP 和 ICMP 流量的特定入站规则,并具有一个允许所有 IPv4 和 IPv6 出站流量的出站规则。

入站规则
协议类型 端口号 源 IP
TCP 22 (SSH) 203.0.113.1/32
TCP 80 (HTTP) 0.0.0.0/0
TCP 80 (HTTP) ::/0
ICMP All 0.0.0.0/0
出站规则
协议类型 端口号 目的地 IP
All All 0.0.0.0/0
All All ::/0
  • 将会跟踪端口 22 (SSH) 上流入和流出实例的 TCP 流量,因为入站规则只允许来自 203.0.113.1/32 的流量,而不是所有 IP 地址 (0.0.0.0/0)。

  • 不会跟踪端口 80 (HTTP) 上流入和流出实例的 TCP 流量,因为入站和出站规则都允许所有流量(0.0.0.0/0 或 ::/0)。

  • 无论规则如何,始终跟踪 ICMP 流量。

  • 如果您从安全组删除出站规则,则将跟踪往返于实例上的所有流量,包括端口 80 (HTTP) 上的流量。

Throttling

Amazon EC2 定义每个实例可以跟踪的最大连接数量。达到最大值后,由于无法建立新连接,所有发送或接收的数据包都将丢失。发生这种情况时,发送和接收数据包的应用程序无法正常通信。

要确定数据包是否因为您实例的网络流量超过了可跟踪的最大连接数量而丢弃,请使用 conntrack_allowance_exceeded 网络性能指标。有关更多信息,请参阅监控 EC2 实例的网络性能

即使安全组配置无需跟踪,也会自动跟踪通过网络负载均衡器建立的连接。如果您超过了每个实例可跟踪的最大连接数量,建议您扩展负载均衡器注册的实例数或实例大小。