如何在Amazon Virtual Private Cloud上设置网络ACL?

时间:2012-05-15 07:59:12

标签: networking amazon-web-services acl traffic amazon-vpc

我已经设置了亚马逊虚拟私有云(VPC)。在VPC内部我有2个网络,我在其中创建实例。出于安全原因,我想在这些网络上放置一些网络访问控制列表(网络ACL),除了机器防火墙。在亚马逊示例之后,我有一个公共网络(暴露于互联网访问)10.0.0.0/24和3个私人网络10.0.1.0/24,10.0.2.0/24,10.0.3.0/24。它们之间的流量被路由。


所以对于网络10.0.1.0/24作为ACL,我把它放在:

Inbound:
10.0.0.0/24 port 80 (HTTP)
10.0.0.0/24 port 22 (SSH)
10.0.2.0/24 port 3306 (MySql)
10.0.3.0/24 port 3306 (MySql)

Outbound
ALL ALL

对于网络10.0.2.0/24和10.0.3.0/24:

Inbound 
10.0.1.0/24 port 3306 (MySql)

Outbound
ALL ALL

对于此处的公共网络10.0.0.0/24,我有一个公开的负载均衡器,它将流量重定向到专用网络10.0.1.0/24,其中应用程序通过HTTP响应:

Inbound
0.0.0.0/0 port 80 (HTTP)
0.0.0.0/0 port 443 (HTTPS)
0.0.0.0/0 port 22 (SSH)

Outbound
ALL ALL

问题是,当我将这些规则付诸行动时,所有流量都会冻结并且应用程序无法使用。发生了什么?我做错了吗?

2 个答案:

答案 0 :(得分:19)

更新

您的规则目前缺少与常见问题What are the differences between security groups in a VPC and network ACLs in a VPC?:

相关的其他可能相关的片段
  

VPC中的安全组指定允许或来自哪些流量   Amazon EC2实例。网络ACL在子网级别运行   评估进入和退出子网的流量。网络ACL可以   用于设置允许和拒绝规则。网络ACL不会过滤   同一子网中的实例之间的流量。另外,网络   ACL在安全组执行时执行无状态过滤   有状态过滤 [强调我的]

What is the difference between stateful and stateless filtering?

进一步解决了这个问题
  

有状态过滤跟踪请求的来源并且可以   自动允许将请求的回复返回给   原始计算机。 [...]

     另一方面

无状态过滤,仅检查来源或   目标IP地址和目标端口,忽略是否   流量是新请求或对请求的回复。在上面   例如,需要在过滤上实施两个规则   device:允许在tcp上向Web服务器入站的流量的一个规则   端口80,以及允许来自网络服务器的出站流量的另一条规则   (tcp端口范围49,152到65,535)。 [强调我的]

现在,您已经允许所有出站流量,因此这不适用于示例,但同样的问题也适用于其他方式,例如,对于源自您的EC2实例的HTTP请求,您需要按照概述的方式设置相应的入站规则,有关详细信息,请参阅Ephemeral Ports中的Network ACLs部分:

  

发起请求的客户端选择临时端口   范围。范围取决于客户端的操作系统。 [...]

     

如果您的VPC中的实例是发起请求的客户端,那么您的   网络ACL必须具有入站规则才能启用发往的流量   特定于实例类型的临时端口(Amazon Linux,   Windows Server 2008等。)。

     

在实践中,涵盖可能的不同类型的客户   您需要为您的VPC中的面向公众的实例启动流量   打开短暂的端口1024-65535。 [...]

解决方案

因此,Recommended Rules for Scenario 2中的Appendix A: Recommended Network ACL Rules部分为您的方案建议了以下入站规则(操作系统相关示例):

Inbound:
0.0.0.0/0 port 49152-65535 (TCP)

要测试此问题是否确实适用,您可能只需要包含整个短暂的端口范围:

Inbound:
0.0.0.0/0 port 1024-65535 (TCP)

初步答复(已废弃)

  

对于这里的公共网络10.0.0.0/24,我有一个暴露的负载   平衡器,它将流量重定向到专用网络   10.0.1.0/24,其中应用通过http响应

您的设置建议您像往常一样在负载均衡器上终止SSL;鉴于您提高了安全性要求,您实际上也可以为后端HTTPS通信设置Elastic Load Balancing(请参阅Architectural Overview) - 您似乎没有适用于10.0的入站HTTPS流量的ACL规则。虽然1.0 / 24,所以那将是一个缺少的案例:

Inbound:
10.0.0.0/24 port 80 (HTTP)
10.0.0.0/24 port 443 (HTTPS) // <= missing in your example currently!
10.0.0.0/24 port 22 (SSH)
10.0.2.0/24 port 3306 (MySql)
10.0.3.0/24 port 3306 (MySql)

Outbound
ALL ALL

答案 1 :(得分:0)

如果要打开临时端口(除了10,000以下的端口,关于tomcat,其他servlet等的异常),只需为每个异常范围创建特定规则。规则从最后一个最低编号到最高编号进行评估,最高有效规则编号为32766。