我已经设置了亚马逊虚拟私有云(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
问题是,当我将这些规则付诸行动时,所有流量都会冻结并且应用程序无法使用。发生了什么?我做错了吗?
答案 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。