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

我有一个奇怪的情况,我不知道如何解决。

通常这可以通过子网ACL来实现 – 但是它们不是有状态的。 我需要“回复”build立的数据包,以允许返回(如典型的防火墙

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

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

是在其他内部子网上用“入站”规则来控制这个唯一的select吗? 对于我们不同的networking来说,这样做会有更多的规则,因为只要将其限制在出站networking上就会更清洁。

任何想法都是受欢迎的,包括重新devise整个事情(这是绿地)

下面的评论要求进一步澄清环境需求,所以这里是要求我build立的环境:

把它想象成一个地方和DMZ:

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

现在我唯一能想到的是在实例本身中依赖于iptables和windows防火墙,这是可能的,但是很难pipe理。

另一个想法是在EC2(更多$$)内部署软件防火墙,以有状态的方式允许/拒绝stream量。 另一台机器来pipe理。

另一个想法是让安全组拒绝来自公有子网的入站stream量进入专用子网的stream量,这个子网必须在私有子网内的所有实例上被允许。 问题是安全组没有拒绝规则。 再次不理想。

要么具有有状态ACL,要么允许安全组拒绝规则将完全解决问题。 不幸的是,在当前的AWS基础架构中都不可能。

解决scheme似乎很简单。

公共子网10.200.0.0/24中的实例无法启动到私有子网10.100.0 / 24的新的出站连接。

除非您在私有子网中的实例的安全组中创build入站规则才能允许它们,否则它们已经不能实现。

如果你这样做,那么删除这些规则,因为他们不应该在那里。

私有子网中实例的安全组入站规则所允许的唯一stream量应该是需要到达这些stream量的stream量。 没有有效的“便于pipe理”的理由来运行networking软中心,默认情况下允许一切,特别是当安全组规则的源规范可以是安全组ID或IP范围时。 允许从哪个访问应允许访问,没有更多。