![如何在不阻止 ssh 的情况下阻止 ec2 中的传出流量](https://linux22.com/image/792318/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E9%98%BB%E6%AD%A2%20ssh%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E9%98%BB%E6%AD%A2%20ec2%20%E4%B8%AD%E7%9A%84%E4%BC%A0%E5%87%BA%E6%B5%81%E9%87%8F.png)
我有一个具有公共子网的 EC2,并且流量通过互联网网关流动。
现在,我有一个要求,比如我必须阻止 EC2 中的所有传出流量。
我曾尝试限制网络 ACL 的流量。
我已经允许 ssh 端口为 22,规则号为 100。
然后,我使用拒绝选项和规则编号 200 阻止了所有流量。
我已经对附加到 VPC 的网络 ACL 的出站规则完成了上述更改。
但在 EC2 中应用此方法后,我也无法执行 ssh。无法登录。
我该如何实现这一点?我想阻止所有传出流量,但应该发生 ssh。
答案1
AWS 中的网络 ACL 不是有状态的,因此您必须管理传入和传出流量。通过阻止除 22 之外的所有流量,您已经阻止了所有出站连接,除非您的 SSH 客户端使用端口 22 出站(这种情况不太可能发生)。
从https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#nacl-basics:
NACL 是无状态的,这意味着不会保存有关之前发送或接收的流量的信息。例如,如果您创建 NACL 规则以允许特定入站流量进入子网,则不会自动允许对该流量的响应。这与安全组的工作方式相反。安全组是有状态的,这意味着会保存有关之前发送或接收的流量的信息。例如,如果安全组允许入站流量进入 EC2 实例,则无论出站安全组规则如何,都会自动允许响应。
您应该查看安全组,它们是有状态的,因此将允许入站连接的出站响应部分。您可以使用它来阻止除 22 个入站之外的所有入站和所有出站(从 EC2 发起时)。
另外:如果你只需要 SSH 进入这个 EC2 并且不需要其他入站流量,那么你应该真的查看会话管理器(系统管理器的一部分)。它使用 EC2 上的代理来提供 shell 访问,而不会将流量暴露给互联网,而仅通过 NAT 提供 AWS 服务。因此不需要入站端口!https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html