尽管所有 UDP 流量均已通过网络 ACL 阻止,但 Netcat 仍成功发送 UDP 数据包

尽管所有 UDP 流量均已通过网络 ACL 阻止,但 Netcat 仍成功发送 UDP 数据包

我在默认 VPC 中创建了一个 AWS 实例,并在网络 ACL 中阻止了所有 UDP 流量。我的出站规则如下:

规则编号 类型 协议 端口范围 目的地 允许否认
99 所有 UDP UDP(17) 全部 0.0.0.0/0 否定
100 全部 TCP TCP(6) 全部 0.0.0.0/0 允许
* 所有流量 全部 全部 0.0.0.0/0 否定

如果我使用traceroute,则正如预期的那样,我什么也得不到:

[ec2-user@ip-172-31-32-169 ~]$ traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 ...

但是,如果我使用nc,我收到意想不到的回应:

[ec2-user@ip-172-31-32-169 ~]$ nc -vzu 1.1.1.1 53
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 1.1.1.1:53.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.

为什么会发生这种情况?另外,它总是需要 2 秒才能得到响应。为什么是 2 秒?

答案1

TL;DR - UDP 被 NACL 规则阻止。您收到的响应nc具有欺骗性,我相信(但尚未确认)2.01 秒的时间是超时。

Netcat 表示它发送了一个数据包,确实如此。但是您的 NACL 充当了 EC2 实例所连接的子网的第 3/4 层防火墙。数据包是从主机发送的,但 NACL 阻止了它(并丢弃了它)。由于您使用了标志-z,它会立即断开连接,并且与之相关的超时时间为两秒。我假设两秒是超时时间,因为它始终是返回值。(我没有时间在源代码中运行它)

我在 VPC 中重新创建了您的 NACL,并遇到了与上述相同的结果,包括准确的“已接收”值。但是当我尝试使用该 NACL 查找该网站时,dig如果设置了拒绝,则会出现超时。

Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 1.1.1.1:53.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.

[root@ip-10-99-0-198 centos]# dig +short @1.1.1.1 www.google.com
;; connection timed out; no servers could be reached

当拒绝未到位时,dig工作将按预期进行。最后要说的是,如果您nmap在该 UDP 端口上运行扫描,您将获得“打开|过滤”响应。

不幸的是,防火墙和过滤设备也会丢弃数据包而不做出响应。因此,当 Nmap 尝试多次仍未收到响应时,它无法确定端口是开放的还是被过滤的。

参考
AWS VPC 网络 ACL
ncat 手册页
nmap UDP扫描

答案2

您有一个编号较低的规则,该规则在允许 UDP 的规则 99 之前处理。规则按升序评估。

“规则编号。规则从编号最低的规则开始评估。只要某条规则与流量匹配,就会应用该规则,而不管是否有任何编号更高的规则可能与之相矛盾。”

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#nacl-rules

相关内容