我正在 AWS EC2 实例中的 CentOS 7 上创建堡垒 ssh 服务器。当我在 ACL 中使用以下规则时,我能够正常连接到服务器:
入境规则
- 允许来自我客户端 IP 的端口 22 上的流量
- 阻止所有其他流量
呼出规则
- 允许所有流量流向我的客户端 IP
- 阻止所有其他流量
AWS ACL 规则与 iptables 大致相似;它们可能只不过是 Amazon 云基础设施中实施的一组 iptable 规则的简化 Web 界面。
我的理解是出站规则集应用于任何从服务器发出的数据包——无论连接的哪一端发起连接。
此外,我的理解是,当使用客户端发起的连接时,我的 ssh 服务器将仅通过端口 22 发送 ssh 流量。
但是当我使用以下规则集时,我无法再通过 ssh 连接到我的服务器:
入境规则
- 允许来自我客户端 IP 的端口 22 上的流量
- 阻止所有其他流量
呼出规则
- 允许端口 22 上的流量到达我客户端的 IP
- 阻止所有其他流量
AWS 的所有其他可以阻止流量的功能均已设置为允许所有流量; iptables 也已设置为允许实例操作系统中的所有流量。
当服务器上的出站流量仅限于端口 22 时,为什么我的客户端无法建立 SSH 连接?
答案1
AWS 中的 ACL 是无状态防火墙,这意味着它将所有请求(入站或出站)视为独立连接。因此,如果您尝试允许客户端访问服务器的端口 22,则需要启用双方的连接(入站到服务器的端口 22 + 出站到客户端的随机 [1024-65535] 端口)双方的连接。
然而,如果您正在处理“安全组”,则只需要允许入站端口 22。这只是因为“安全组”是一个全状态防火墙并且它会跟踪入站连接,因此您不需要显式允许到客户端随机 [1024-65535] 端口的出站连接。