我有一个奇怪的情况,我不知道如何解决。
通常这可以通过子网ACL来实现 – 但是它们不是有状态的。 我需要“回复”build立的数据包,以允许返回(如典型的防火墙)
我有一个公共和私人子网。 公众需要连接到互联网,所以我有出站允许0.0.0.0/0,但我想限制出站的特定子网(例如10.100.1.0/24和10.150.2.0/24)
我当然可以在ACL中设置它,因为它允许“拒绝”,但是它不允许回复数据包,因为它不是有状态的。
是在其他内部子网上用“入站”规则来控制这个唯一的select吗? 对于我们不同的networking来说,这样做会有更多的规则,因为只要将其限制在出站networking上就会更清洁。
任何想法都是受欢迎的,包括重新devise整个事情(这是绿地)
下面的评论要求进一步澄清环境需求,所以这里是要求我build立的环境:
把它想象成一个地方和DMZ:
现在我唯一能想到的是在实例本身中依赖于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范围时。 允许从哪个访问应允许访问,没有更多。