我在我的公共 NAT 网关的 VPC 流日志中看到了入站流量。我的公共 NAT 网关是否接受来自互联网的入站流量?

上次更新日期:2022 年 10 月 31 日

对于来自公有 IP 地址的入站流量,我的虚拟私有云 (VPC) 流日志显示 Action = ACCEPT。但我的理解是,网络地址转换 (NAT) 网关不接受来自互联网的流量。我的 NAT 网关是否接受来自互联网的入站流量?

解决方法

AWS 管理的 NAT 网关不接受从来自互联网的流量。但是,您的 VPC 流日志中可能显示正在接受来自互联网的入站流量,这有两个原因。

原因 1:您的安全组或网络访问控制列表 (ACL) 允许入站互联网流量

如果您的安全组或网络 ACL 允许入站互联网流量,则该流量将在 VPC 流日志中显示为接受。如果附加到 NAT 网关的网络 ACL 没有显式拒绝来自互联网的流量,则发送到 NAT 网关的流量将显示为接受。但是,该流量实际上并未被 NAT 网关接受,而是被丢弃。

要确认这一点,请执行以下操作:

  1. 打开 Amazon CloudWatch 控制台
  2. 在导航窗格中,选择 Insights
  3. 从下拉列表中,选择包含 NAT 网关的弹性网络接口和私有实例的弹性网络接口的日志组。
  4. 运行下面的查询。
filter (dstAddr like 'xxx.xxx' and srcAddr like 'public IP')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| limit 10

注意:仅使用搜索筛选条件中的前两个八位字节即可分析 VPC 中的所有网络接口。在上面的示例中,将 xxx.xxx 替换为 VPC 无类别域间路由的前两个八位字节。然后将 public IP 替换为您在 VPC 流日志条目中看到的公有 IP。

查询结果显示该 NAT 网关私有 IP 上有来自该公有 IP 的流量,但 VPC 中的其他私有 IP 上没有流量。这些结果确认入站流量属于未经请求的流量。但是,如果您确实在私有实例的 IP 上看到流量,那么请执行原因 2 中的步骤。

原因 2:到公有 IP 的流量是从私有实例发起的

如果有私有实例使用 NAT 网关访问互联网,则您的 VPC 流日志包含来自公有 IP 地址的响应流量。要确认到公有 IP 的流量由您的私有实例发起,请运行以下查询:

注意:在运行查询之前,请执行以下操作:

  • 选择与您在 VPC 流日志中观察到流量的时间范围对应的时间范围。
  • 如果您的 VPC 中有多个日志组,那么请选择相应的日志组。
filter (dstAddr like 'public IP' and srcAddr like 'xxx.xxx') or (srcAddr like 'public IP' and dstAddr like 'xxx.xxx')
| limit 10

确保将 xxx.xxx 替换为 VPC CIDR 的前两个八位字节。将 public IP 替换为您在 VPC 流日志条目中看到的公有 IP。如果您的 VPC 中超过 10 个资源发起了到该公有 IP 的流量,则增加限制

查询结果显示了私有实例和公有 IP 地址之间的双向流量。要确定发起方是私有实例还是外部公有 IP 地址,请参阅以下示例:

2022-09-28T12:05:18.000+10:00 eni-023466675b6xxxxxx 10.0.101.222 8.8.8.8 53218 53 6(17) 4 221 1664330718 1664330746 ACCEPT OK
2022-09-28T12:05:18.000+10:00 eni-023466675b6xxxxxx 8.8.8.8 10.0.101.222 53 53218 6(17) 4 216 1664330718 1664330746 ACCEPT OK
在此 TCP/UDP 流量(协议 ID = 6 或 17)示例中,源端口 53218(临时端口)的私有 IP 地址 10.0.101.222 是发起方。目标端口 53 的 IP 地址 8.8.8.8 是接收方和响应方。

注意:最佳做法是开启您的 VPC 流日志的 TCP 标志字段

例如,以下条目的最后一列中有 TCP 标志字段:

2022-09-28T12:05:52.000+10:00 eni-023466675b6xxxxxx 10.0.1.231 8.8.8.8 50691 53 6(17) 3 4 221 1664330752 1664330776 ACCEPT OK 2
2022-09-28T12:05:21.000+10:00 eni-023466675b6xxxxxx 8.8.8.8 10.0.1.231 53 50691 6(17) 19 4 216 1664330721 1664330742 ACCEPT OK 18

私有 IP 地址 10.0.101.222 是带有 TCP 标志 2(代表 TCP SYN 数据包)的发起方。

在以下 ICMP 协议示例中,由于没有端口信息或 TCP 标志,没有足够的信息来确定哪一端是发起方:

2022-09-27T17:57:39.000+10:00 eni-023466675b6xxxxxx 10.0.1.231 8.8.8.8 0 0 1 17 1428 1664265459 1664265483 ACCEPT OK
2022-09-27T17:57:39.000+10:00 eni-023466675b6xxxxxx 8.8.8.8 10.0.1.231 0 0 1 0 17 1428 1664265459 1664265483 ACCEPT OK

您的流日志条目的格式取决于其创建方式。有关日志行格式的更多信息,请参阅查看流日志


这篇文章对您有帮助吗?


您是否需要账单或技术支持?