AWS EC2 安全组/ACL - 仅拒绝出站到一个/ 24 子网

AWS EC2 安全组/ACL - 仅拒绝出站到一个/ 24 子网

我遇到了一个奇怪的情况,我不知道该如何解决。

通常,这可以通过子网 ACL 来实现 - 但是它们不是有状态的。我需要“回复”已建立的数据包以允许返回(就像典型的防火墙一样)

我有一个公共子网和一个私有子网。公共子网需要连接到互联网,因此我允许出站到 0.0.0.0/0,但我想限制特定子网的出站(例如 10.100.1.0/24 和 10.150.2.0/24)

我当然可以在 ACL 中轻松设置它,因为它允许“拒绝”,但它不允许回复数据包,因为它不是有状态的。

是否只有使用其他内部子网上的“入站”规则来控制这一点?这会为我们的不同网络制定更多规则,而仅限制出站则更为清晰。

欢迎提出任何想法,包括重新设计整个架构(这是绿地)

下面的评论要求进一步澄清环境需求,因此这里是我要求构建的环境:

将其视为本地和 DMZ:

  • 公有子网 10.200.0.0/24 中的实例无法发起到私有子网 10.100.0/24 的新出站连接。
  • 私有子网 10.100.0.0/24 中的实例可以发起进入公共子网的新出站连接(到 ssh、部署代码等)。
  • 公共子网需要自由发起到互联网的出站流量
  • 由于 ACL 的限制,如果我阻止从公共 > 私有的出站,它将不允许返回数据包(因为它不是有状态的)

现在我唯一能想到的就是依靠实例本身的 iptables 和 Windows 防火墙,这是可能的,但管理起来要困难得多。

另一个想法是在 EC2 内部署软件防火墙(更多 $$),可以以状态方式允许/拒绝流量。还有另一台机器需要管理。

另一个想法是让安全组拒绝从公共子网进入私有子网的流量,而私有子网内的所有实例都必须允许这些流量。问题是安全组没有拒绝规则。同样不理想。

拥有状态 ACL 或允许安全组拒绝规则都可以完全解决问题。不幸的是,在当前的 AWS 基础设施中,这两种方法都无法实现。

答案1

解决方案看起来很简单。

公有子网 10.200.0.0/24 中的实例无法向私有子网 10.100.0/24 发起新的出站连接。

他们已经不能了,除非您在私有子网中的实例的安全组中创建入站规则来允许它。

如果您这样做了,请删除这些规则,因为它们不应该存在。

私有子网中实例的安全组入站规则所允许的唯一流量应该是需要到达它们的流量。运行一个软性中心的网络,默认情况下允许一切,这没有任何“易于管理”的合理理由,特别是当安全组规则的源规范可以是安全组 ID 或 IP 范围时。允许从应该允许访问的地方进行访问,仅此而已。

相关内容