安全组连接跟踪 - Amazon Elastic Compute Cloud

安全组连接跟踪

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

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

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

更改安全组规则时,其跟踪的连接不会立即中断。在现有连接超时之前,安全组将继续允许数据包。要确保该流量立即中断,或确保所有流量无论跟踪状态如何,均遵循防火墙规则,您可以使用子网的网络 ACL。网络 ACL 是无状态的,因此不会自动允许响应流量。添加阻止任一方向的流量的网络 ACL 会破坏现有连接。有关更多信息,请参阅 Amazon VPC 用户指南中的网络 ACL

注意

安全组对传入或传出 Route 53 Resolver 的 DNS 流量没有影响,Route 53 Resolver 有时称为“VPC+2 IP 地址”(请参阅《Amazon Route 53 开发者指南》中的什么是 Amazon Route 53 Resolver?)或“AmazonProvidedDNS”(请参阅《Amazon Virtual Private Cloud 用户指南》中的使用 DHCP 选项集)。如果希望通过 Route 53 Resolver 筛选 DNS 请求,则可以启用 Route 53 Resolver DNS Firewall(请参阅《Amazon Route 53 开发人员指南》中的 Route 53 Resolver DNS Firewall)。

未跟踪的连接

并非所有通信流都会被跟踪。如果有一个安全组规则允许所有通信(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 客户端地址的新连接,则由于现有的 SSH 连接被跟踪,它不会中断。

自动跟踪的连接

即使安全组配置无需跟踪,也会自动跟踪通过以下各项建立的连接。必须跟踪这些连接以确保对称路由,因为可能有多个有效的回复路径。

  • 仅出口互联网网关

  • Gateway Load Balancer

  • Global Accelerator 加速器

  • NAT 网关

  • Network Firewall 防火墙端点

  • 网络负载均衡器

  • AWS PrivateLink(接口 VPC 终端节点)

  • 中转网关挂载

限制

Amazon EC2 定义每个实例可以跟踪的最大连接数量。达到最大值后,由于无法建立新连接,所有发送或接收的数据包都将丢失。发生这种情况时,发送和接收数据包的应用程序无法正常通信。使用 conntrack_allowance_available 网络性能指标来确定该实例类型仍然可用的跟踪连接数。

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

如果您超过了每个实例可跟踪的最大连接数量,建议您借助 Elastic Load Balancing 扩展负载均衡器注册的实例数或实例大小。

示例

在以下示例中,安全组具有允许 TCP 和 ICMP 流量的入站规则,并具有允许所有出站流量的出站规则。

入站
协议类型 端口号
TCP 22 (SSH) 203.0.113.1/32
TCP 80 (HTTP) 0.0.0.0/0
TCP 80 (HTTP) ::/0
ICMP 全部 0.0.0.0/0
出站
协议类型 端口号 目标位置
全部 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 流量,因为入站和出站规则允许来自所有 IP 地址的流量。

  • 始终跟踪 ICMP 流量。

如果您删除 IPv4 流量的出站规则,则将跟踪所有入站和出站 IPv4 流量,包括端口 80(HTTP)上的流量。如果您删除 IPv6 流量的出站规则,这同样适用于 IPv6 流量。