我正在学习 AWS VPC,在其中分配 NACL 入站/出站规则,如下所示:目前我正在为所有 IP 执行此操作
Rule # Type Allow/Deny
100 All Traffic Allow
200 SSH Deny
* All Traffic Deny
Outbound
Rule # Type Allow/Deny
100 SSH Deny
200 All Traffic Allow
* All Traffic Deny
我想知道我的 SSH 是如何工作的,因为规则规定先评估较低的数字,而在出站规则中我拒绝了 SSH。有人能解释一下该规则在 AWS 中是如何工作的吗?
答案1
允许传入 SSH 流量,因为入站规则 # 100(200 实际上被忽略)和传出规则与已建立的 SSH 连接不匹配...
基于AWS 文档:
网络 ACL 是无状态的,这意味着对允许的入站流量的响应受出站流量规则的约束(反之亦然)。
- 入站规则
根据我所看到的,我认为你的规则顺序是错误的。
Rule # Type Allow/Deny
100 All Traffic Allow
200 SSH Deny
* All Traffic Deny
这根本没有意义,因为您使用规则 100 允许所有流量,因此规则 200 不会在任何时候使用(流量将根据规则 100 被允许,因此规则 200 不会“保留”任何内容)。我认为更有意义的是不同的顺序(如果您想拒绝 ssh 服务:
Rule # Type Allow/Deny
100 SSH Deny
200 All Traffic Allow
* All Traffic Deny
- 出站
以下是具有较低规则编号的 SSH 流量:
Rule # Type Allow/Deny
100 SSH Deny
200 All Traffic Allow
* All Traffic Deny
这将拒绝 SSH 流量,并允许其余流量...
SSH 类型是端口为 TCP/22 的流量 - 这通常用作目标端口。如果您要联系 SSH 服务器,则您正在连接到 TCP/22,但您的源端口是 TCP/X,其中 X 是“随机”(并非真的,但为了简单起见,假设是随机)选择的,假设 >10000。
一旦服务器回复您的连接,目标端口就是“您的”TCP/X,因此规则不一定匹配此流量......
目的地为 TCP/22 的传出流量将是在服务器上发起的连接,其目的地在其他设备上,并且尚未建立 SSH 连接。
答案2
您允许所有流量进入您的主机,但拒绝从该主机出站的 ssh 通信。
据我所知,NACL 不进行深度数据包检查。这意味着协议只是其指定端口。
除非你正在做一些非常奇怪的事情,比如尝试 ssh从端口 22,您的入站 ssh 会话应该没问题。