9

我已经建立了一个 Amazon Virtual Private Cloud (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。它们之间的流量被路由。


因此,对于作为 ACL 的网络 10.0.1.0/24,我将其设为:

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

问题是,当我将这些规则付诸实施时,所有流量都会冻结,并且该应用程序不可用。发生了什么?难道我做错了什么?

4

2 回答 2

20

更新

您的规则目前缺少与常见问题解答相关的附加且可能相关的片段VPC 中的安全组和 VPC 中的网络 ACL 之间有什么区别?:

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

在有状态过滤和无状态过滤之间有什么区别?

状态过滤跟踪请求的来源,并且可以 自动允许对请求的回复返回到发起计算机。[...]

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

现在,您已经允许所有出站流量,因此这不适用于示例,但同样的问题也适用于相反的情况,例如,对于源自您的 EC2 实例的 HTTP 请求,您需要有一个相应的如概述的入站规则,请参阅网络 ACL中的临时端口部分以获取更多详细信息:

发起请求的客户端选择临时端口范围。该范围因客户端的操作系统而异。[...]

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

在实践中,为了覆盖可能向您的 VPC 中面向公众的实例发起流量的不同类型的客户端,您需要打开临时端口 1024-65535。[...]

解决方案

因此,附录 A中场景 2的推荐规则部分:推荐的网络 ACL 规则为您的场景建议以下入站规则(取决于操作系统的示例):

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 (请参阅架构概述) - 不过,您似乎没有将入站 HTTPS 流量容纳到 10.0.1.0/24 的 ACL 规则,所以这将是一个丢失的情况:

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
于 2012-05-15T09:57:48.977 回答
0

如果你想打开临时端口,除了低于 10,000 的关于 tomcat、其他 servlet 等的例外的端口,只需为每个例外范围创建特定的规则。规则从最低编号先到最高编号最后进行评估,最高有效规则编号为 32766。

于 2016-05-02T16:37:57.760 回答