Amazon Virtual Private Cloud
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

网络 ACL

网络访问控制列表 (ACL) 是 VPC 的一个可选安全层,可用作防火墙来控制进出一个或多个子网的流量。您可以设置网络 ACL,使其规则与您的安全组相似,以便为您的 VPC 添加额外安全层。 有关安全组和网络 ACL 之间的差别的更多信息,请参见安全组与网络 ACL 的比较

网络 ACL 基本信息

以下是您需要了解的有关网络 ACL 的基本信息:

  • 您的 VPC 自动带有可修改的默认网络 ACL。默认情况下,它允许所有入站和出站 IPv4 流量以及 IPv6 流量 (如果适用)。

  • 您可以创建自定义网络 ACL 并将其与子网相关联。默认情况下,每个自定义网络 ACL 都拒绝所有入站和出站流量,直至您添加规则。

  • 您的 VPC 中的每个子网都必须与一个网络 ACL 相关联。如果您没有明确地将子网与网络 ACL 相关联,则子网将自动与默认网络 ACL 关联。

  • 您可以将一个网络 ACL 与多个子网关联;但是,一个子网一次只能与一个网络 ACL 关联。当您将一个网络 ACL 与一个子网关联时,将删除之前的关联。

  • 网络 ACL 包含规则的编号列表,以供我们按顺序评估 (从编号最小的规则开始) 以判断流量是否被允许进入或离开任何与网络 ACL 关联的子网。您可以使用的最高规则编号为 32766。我们建议您从创建规则编号为 100 的倍数的规则开始,这样您可以在稍后需要时插入新的规则。

  • 网络 ACL 有单独的入站和出站规则,每项规则都或是允许或是拒绝数据流。

  • 网络 ACL 没有任何状态;对允许入站数据流的响应会随着出站数据流规则的变化而改变 (反之亦然)。

有关可创建的网络 ACL 数量的更多信息,请参阅 Amazon VPC 限制

网络 ACL 规则

您可以在默认网络 ACL 中添加或删除规则,或为您的 VPC 创建额外网络 ACL。当您在网络 ACL 中添加或删除规则时,更改也会自动应用到与其相关联的子网。

以下为部分网络 ACL 规则:

  • 规则编号。规则评估从编号最低的规则起开始进行。只要有一条规则与流量匹配,即应用该规则,并忽略与之冲突的任意更高编号的规则。

  • 协议。您可以指定任何有标准协议编号的协议。 有关更多信息,请参见Protocol Numbers。如果您指定 ICMP 作为协议,您可以指定任意或全部 ICMP 类型和代码。

  • [仅限入站规则]数据流源 (CIDR 范围) 和目标端口 (监听) 或端口范围。

  • [仅限出站规则]数据流目标 (CIDR 范围) 以及目标端口或端口范围。

  • 针对特定流量选择 ALLOW 或 DENY。

默认网络 ACL

默认网络 ACL 配置为让所有流量流进和流出与其关联的子网。每个网络 ACL 还包含一个规则编号是星号的规则。此规则确保在数据包不匹配任何其他编号规则时拒绝该数据包。您可以修改或删除此规则。

下面是一个仅支持 IPv4 的 VPC 的示例默认网络 ACL。

入站
规则 # Type 协议 端口范围 允许/拒绝

100

所有 IPv4 流量

全部

全部

0.0.0.0/0

允许

*

所有 IPv4 流量

全部

全部

0.0.0.0/0

拒绝

出站
规则 # Type 协议 端口范围 目的地 允许/拒绝

100

所有 IPv4 流量

全部

全部

0.0.0.0/0

允许

*

所有 IPv4 流量

全部

全部

0.0.0.0/0

拒绝

如果您创建具有 IPv6 CIDR 块的 VPC 或将 IPv6 CIDR 块与您的现有 VPC 关联,我们会自动添加允许所有 IPv6 流量流入和流出您的子网的规则。我们还会添加规则编号为星号的规则,该规则可确保拒绝与任何其他编号规则不符的数据包。您不能修改或删除这些规则。下面是一个支持 IPv4 和 IPv6 的 VPC 的示例默认网络 ACL。

注意

如果您修改了您的默认网络 ACL 的入站规则,在您将 IPv6 块与您的 VPC 关联时,我们不会为入站 IPv6 流量自动添加 ALLOW 规则。同样,如果您修改了出站规则,我们不会为出站 IPv6 流量自动添加 ALLOW 规则。

入站
规则 # Type 协议 端口范围 允许/拒绝

100

所有 IPv4 流量

全部

全部

0.0.0.0/0

允许

101

所有 IPv6 流量

全部

全部

::/0

允许

*

所有流量

全部

全部

0.0.0.0/0

拒绝

*

所有 IPv6 流量

全部

全部

::/0

拒绝

出站
规则 # Type 协议 端口范围 目的地 允许/拒绝

100

所有流量

全部

全部

0.0.0.0/0

允许

101

所有 IPv6 流量

全部

全部

::/0

允许

*

所有流量

全部

全部

0.0.0.0/0

拒绝

*

所有 IPv6 流量

全部

全部

::/0

拒绝

自定义网络 ACL

下表显示了一个仅支持 IPv4 的 VPC 的自定义网络 ACL 示例。其中包括允许 HTTP 和 HTTPS 数据流进入的规则 (入站规则 100 和 110)。存在相应的出站规则,以允许响应入站数据流 (出站规则 120,适用于临时端口 49152-65535)。有关如何选择适当的临时端口的更多信息,请参见临时端口

网络 ACL 还包括允许 SSH 和 RDP 数据流进入子网的入站规则。出站规则 120 允许离开子网的响应。

网络 ACL 出站规则 (100 和 110) 允许离开子网的 HTTP 和 HTTPS 数据流。存在相应的入站规则,以允许响应出站数据流 (入站规则 140,适用于临时端口 49152-65535)。

注意

每个网络 ACL 都包含一个默认规则,其规则编号是星号。此规则会确保在数据包不匹配任何其他规则时拒绝此数据包。您可以修改或删除此规则。

入站
规则 # Type 协议 端口范围 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

允许来自任意 IPv4 地址的入站 HTTP 流量。

110

HTTPS

TCP

443

0.0.0.0/0

允许

允许来自任意 IPv4 地址的入站 HTTPS 流量。

120

SSH

TCP

22

192.0.2.0/24

允许

允许来自您的家庭网络的公有 IPv4 地址范围的入站 SSH 流量 (通过 Internet 网关)。

130

RDP

TCP

3389

192.0.2.0/24

允许

允许从您的家庭网络的公有 IPv4 地址范围到 Web 服务器的入站 RDP 流量 (通过 Internet 网关)。

140

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

允许来自 Internet 的入站返回 IPv4 流量 (即源自子网的请求)。

此范围仅为示例。有关如何选择适当的临时端口的更多信息,请参见临时端口

*

所有流量

全部

全部

0.0.0.0/0

拒绝

拒绝所有未经前置规则 (不可修改) 处理的入站 IPv4 流量。

出站
规则 # Type 协议 端口范围 目的地 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

允许出站 IPv4 HTTP 流量从子网流向 Internet。

110

HTTPS

TCP

443

0.0.0.0/0

允许

允许出站 IPv4 HTTPS 流量从子网流向 Internet。

120

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

允许对 Internet 客户端的出站 IPv4 响应 (例如,向访问子网中的 Web 服务器的人员提供网页)。

此范围仅为示例。有关如何选择适当的临时端口的更多信息,请参见临时端口

*

所有流量

全部

全部

0.0.0.0/0

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv4 流量。

随着数据包流向子网,我们会根据与子网关联的 ACL 的进入规则评估数据包 (从规则列表的顶端开始向下移动)。 当数据包目标为 SSL 端口 (443) 时,评估过程如下。数据包不匹配第一项评估规则 (规则 100)。它匹配第二条规则 (110),即允许数据包进入子网。如果数据包的目的地已经指定为端口 139 (NetBIOS),则最初两项规则可能无法匹配,但是“*”规则最终可能会拒绝这个数据包。

在您需要开放一系列端口、同时在此部分端口内您想拒绝部分窗口,您可能希望添加一项拒绝规则。您只需确保将拒绝规则放在表的较前端,先于一系列的端口数据流的规则。

重要

借助 Elastic Load Balancing,如果您的后端实例的子网有一个网络 ACL,并且您在其中针对源为 0.0.0.0/0 或子网的 CIDR 的所有流量添加了 DENY 规则,则您的负载均衡器将无法对这些实例执行运行状况检查。有关负载均衡器和后端实例的推荐网络 ACL 规则的更多信息,请参阅传统负载均衡器 用户指南 中的 VPC 中负载均衡器的网络 ACL

下表显示了关联有 IPv6 CIDR 块的 VPC 的自定义网络 ACL 的相同示例。此网络 ACL 包含适用于所有 IPv6 HTTP 和 HTTPS 流量的规则。在本例中,新规则插入在 IPv4 流量的现有规则之间;不过,您也可以在 IPv4 规则之后添加编号更高的规则。IPv4 和 IPv6 流量是独立的;因此,所有 IPv4 流量规则都不适用于 IPv6 流量。

入站
规则 # Type 协议 端口范围 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

允许来自任意 IPv4 地址的入站 HTTP 流量。

105

HTTP

TCP

80

::/0

允许

允许来自任意 IPv6 地址的入站 HTTP 流量。

110

HTTPS

TCP

443

0.0.0.0/0

允许

允许来自任意 IPv4 地址的入站 HTTPS 流量。

115

HTTPS

TCP

443

::/0

允许

允许来自任意 IPv6 地址的入站 HTTPS 流量。

120

SSH

TCP

22

192.0.2.0/24

允许

允许来自您的家庭网络的公有 IPv4 地址范围的入站 SSH 流量 (通过 Internet 网关)。

130

RDP

TCP

3389

192.0.2.0/24

允许

允许从您的家庭网络的公有 IPv4 地址范围到 Web 服务器的入站 RDP 流量 (通过 Internet 网关)。

140

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

允许来自 Internet 的入站返回 IPv4 流量 (即源自子网的请求)。

此范围仅为示例。有关如何选择适当的临时端口的更多信息,请参见临时端口

145

自定义 TCP TCP 32768-65535 ::/0 允许

允许来自 Internet 的入站返回 IPv6 流量 (即源自子网的请求)。

此范围仅为示例。有关如何选择适当的临时端口的更多信息,请参见临时端口

*

所有流量

全部

全部

0.0.0.0/0

拒绝

拒绝所有未经前置规则 (不可修改) 处理的入站 IPv4 流量。

*

所有流量

全部

全部

::/0

拒绝

拒绝所有未经前置规则 (不可修改) 处理的入站 IPv6 流量。

出站
规则 # Type 协议 端口范围 目的地 允许/拒绝 注释

100

HTTP

TCP

80

0.0.0.0/0

允许

允许出站 IPv4 HTTP 流量从子网流向 Internet。

105

HTTP

TCP

80

::/0

允许

允许出站 IPv6 HTTP 流量从子网流向 Internet。

110

HTTPS

TCP

443

0.0.0.0/0

允许

允许出站 IPv4 HTTPS 流量从子网流向 Internet。

115

HTTPS

TCP

443

::/0

允许

允许出站 IPv6 HTTPS 流量从子网流向 Internet。

120

自定义 TCP

TCP

32768-65535

0.0.0.0/0

允许

允许对 Internet 客户端的出站 IPv4 响应 (例如,向访问子网中的 Web 服务器的人员提供网页)。

此范围仅为示例。有关如何选择适当的临时端口的更多信息,请参见临时端口

125

自定义 TCP

TCP

32768-65535

::/0

允许

允许对 Internet 客户端的出站 IPv6 响应 (例如,向访问子网中的 Web 服务器的人员提供网页)。

此范围仅为示例。有关如何选择适当的临时端口的更多信息,请参见临时端口

*

所有流量

全部

全部

0.0.0.0/0

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv4 流量。

*

所有流量

全部

全部

::/0

拒绝

拒绝所有未经前置规则 (不可修改) 处理的出站 IPv6 流量。

临时端口

上一个部分中的网络 ACL 实例使用了临时端口范围 32768-65535。但是,您可能需要根据自己使用的或作为通信目标的客户端的类型为网络 ACL 使用不同的范围。

发起请求的客户端会选择临时端口范围。根据客户端的操作系统不同,范围也随之更改。许多 Linux 内核 (包括 Amazon Linux 内核) 使用端口 32768-61000。生成自 Elastic Load Balancing 的请求使用端口 1024-65535。Windows 操作系统通过 Windows Server 2003 使用端口 1025-5000。Windows Server 2008 及更高版本使用端口 49152-65535。NAT 网关使用端口 1024 - 65535。例如,如果一个来自 Internet 上的 Windows XP 客户端的请求到达您的 VPC 中的 Web 服务器,则您的网络 ACL 必须有相应的出站规则,以支持目标为端口 1025-5000 的数据流。

如果您的 VPC 中的一个实例是发起请求的客户端,则您的网络 ACL 必须有入站规则来支持发送到实例类型 (Amazon Linux、Windows Server 2008 等) 特有的临时端口的数据流。

在实际中,为使不同客户端类型可以启动流量进入您 VPC 中的公有实例,您可以开放临时端口 1024-65535。但是,您也可以在 ACL 中添加规则以拒绝任何在此范围内的来自恶意端口的数据流。请务必将 DENY 规则放在表的较前端,先于开放一系列临时端口的 ALLOW 规则。

使用网络 ACL

本节介绍如何使用 Amazon VPC 控制台来处理网络 ACL。

确定网络 ACL 关联

您可以使用 Amazon VPC 控制台来确定与某个子网关联的网络 ACL。网络 ACL 可与多个子网关联,因此,您还可以确定与某个网络 ACL 关联的子网。

确定与某个子网关联的网络 ACL

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Subnets,然后选择子网。

    Network ACL (网络 ACL) 中已包含与子网相关联的网络 ACL 以及网络 ACL 的规则。

判断与网络 ACL 关联的特定子网

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLsAssociated With 列指示每个网络 ACL 的关联子网的数目。

  3. 选择网络 ACL。

  4. 在详细信息窗格中,选择 Subnet Associations 可显示与网络 ACL 关联的子网。

正在创建网络 ACL

您可以为 VPC 创建自定义网络 ACL。默认情况下,您创建的网络 ACL 将阻止所有入站和出站流量 (直到您添加规则),且不与任何子网关联 (直到您为其显式关联子网)。

创建网络网络 ACL

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLs

  3. 选择 Create Network ACL

  4. Create Network ACL 对话框中,可以选择为您的网络 ACL 命名,从 VPC 列表中选择 VPC 的 ID,然后选择 Yes, Create

正在添加和删除规则

当您在网络 ACL 中添加或删除规则时,与其相关联的子网也会随之更改。您不需要在子网中终止和重新启动实例;更改将稍后生效。

如果您使用的是 Amazon EC2 API 或命令行工具,则无法修改规则;您只能添加和删除规则。如果您使用的是 Amazon VPC 控制台,则可以修改现有规则的条目 (该控制台删除该规则并为您添加新规则)。如果您需要更改 ACL 中的规则顺序,您必须添加有新规则编号的新规则,并随后删除最初的规则。

为网络 ACL 添加规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLs

  3. 在详细信息窗格中,根据需要添加的规则的类型,选择 Inbound RulesOutbound Rules 选项卡,然后选择 Edit

  4. Rule #中输入一个规则编号 (例如 100)。规则编号必须不是存在于网络 ACL 中。我们会按顺序处理规则,以编号最低的规则开始。

    提示

    我们建议您使用跳跃的规则编号 (例如 100、200、300) 而不是使用顺序编号 (例如 101、102、103)。这会让添加新规则变得更加简单,无需对现有规则重新编号。

  5. Type 列表中选择规则。例如,要为 HTTP 添加规则,请选择 HTTP。如需添加规则以允许所有 TCP 流量,请选择 All TCP。对于部分选项 (例如 HTTP) 我们会在端口中为您提供。如需使用未列出的规则,请选择 Custom Protocol Rule

  6. (可选) 如果要创建自定义协议规则,请从 Protocol 列表中选择协议的编号和名称。有关更多信息,请参见IANA List of Protocol Numbers

  7. (可选) 如果您已经选定的协议要求提供端口号,您可以输入由连字符分隔的端口号或端口范围 (例如 49152-65535)。

  8. SourceDestination 字段中 (根据是入站规则还是出站规则),输入规则适用的 CIDR 范围。

  9. Allow/Deny (允许/拒绝) 列表中,选择 ALLOW (允许) 以允许指定数据流,或选择 DENY (拒绝) 以拒绝指定数据流。

  10. (可选) 要添加其他规则,请选择 Add another rule,然后根据需要重复步骤 4 至 9。

  11. 完成此操作后,选择 Save

从网络 ACL 删除规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLs,然后选择网络 ACL。

  3. 在详细信息窗格中,选择 Inbound RulesOutbound Rules 选项卡,然后选择 Edit。为要删除的规则选择 Remove,然后选择 Save

正在将子网与网络 ACL 关联

如需对特定子网应用特定的网络 ACL 规则,您必须首先将子网与网络 ACL 关联。您可以将一个网络 ACL 与多个子网关联;但是,一个子网仅可以与一个网络 ACL 关联。任何未与特定 ACL 关联的子网都与会默认与默认网络 ACL 关联。

将子网与网络 ACL 关联

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLs,然后选择网络 ACL。

  3. 在详细信息窗格中的 Subnet Associations 选项卡上,选择 Edit。选中要与网络 ACL 关联的子网的 Associate 复选框,然后选择 Save

解除网络 ACL 与子网的关联

您可以解除自定义网络 ACL 与子网的关联 - 解除关联后,该子网将自动关联到默认网络 ACL。

解除子网与网络 ACL 的关联

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLs,然后选择网络 ACL。

  3. 在详细信息窗格中,选择 Subnet Associations 选项卡。

  4. 选择 Edit,然后取消选中子网的 Associate 复选框。选择 Save

更改子网的网络 ACL

您可以更改与某个子网关联的网络 ACL。例如,当您创建一个子网时,这个子网会最初与主路由表关联。相反,您可能需要将其与您创建的自定义网络 ACL 相关联。

在更改子网的网络 ACL 之后,您不需要终止和重新启动子网中的实例;您的更改会在稍后生效。

更改子网的网络 ACL 关联

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Subnets,然后选择子网。

  3. 选择 Network ACL 选项卡,然后选择 Edit

  4. Change to 列表中选择要与子网关联的网络 ACL,然后选择 Save

正在删除网络 ACL

您只可以删除未与任何子网关联的网络 ACL。您无法删除默认网络 ACL。

删除网络 ACL

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Network ACLs

  3. 选择网络 ACL,然后选择 Delete

  4. 在确认对话框中,选择 Yes, Delete

示例:控制对子网中实例的访问

在本示例中,子网中的任意两个实例可相互通信,并可从受信任的远程计算机访问它们。远程计算机可以是本地网络中的计算机、另一个子网中的实例或用于连接实例以执行管理任务的 VPC。安全组规则和网络 ACL 规则允许从远程计算机 (172.31.1.2/32) 的 IP 地址进行访问。来自 Internet 或其他网络的所有其他流量会被拒绝。

 使用安全组和 NACL

所有实例使用同一个安全组 (sg-1a2b3c4d),均遵守以下规则。

入站规则
协议类型 协议 端口范围 注释
所有流量 全部 全部 sg-1a2b3c4d 允许关联到同一个安全组的实例相互通信。
TCP SSH 22 172.31.1.2/32 允许远程计算机进行入站 SSH 访问。如果实例是 Windows 计算机,则该规则必须对端口 3389 改用 RDP 协议。
出站规则
协议类型 协议 端口范围 目的地 注释
所有流量 全部 全部 sg-1a2b3c4d 允许关联到同一个安全组的实例相互通信。

该子网关联到具有以下规则的网络 ACL。

入站规则
规则 # Type 协议 端口范围 允许/拒绝 注释
100 SSH TCP 22 172.31.1.2/32 允许 允许远程计算机的入站流量。如果实例是 Windows 计算机,则该规则必须对端口 3389 改用 RDP 协议。
* 所有流量 全部 全部 0.0.0.0/0 拒绝 拒绝不匹配前一条规则的所有其他入站流量。
出站规则
规则 # Type 协议 端口范围 目的地 允许/拒绝 注释
100 自定义 TCP TCP 1024-65535 172.31.1.2/32 允许 允许到远程计算机的出站响应。网络 ACL 是无状态的,因此需要该规则才能允许针对入站请求的响应流量。
* 所有流量 全部 全部 0.0.0.0/0 拒绝 拒绝不匹配前一条规则的所有其他出站流量。

该方案让您能够灵活地更改实例的安全组或安全组规则,并使用网络 ACL 作为备份防御层。该网络 ACL 规则应用到子网中的所有实例,因此,就算您不小心设置了过于宽松的安全组规则,网络 ACL 规则也会继续生效,只允许来自单一 IP 地址的访问。例如,以下规则比之前的规则更加宽松 - 它们允许来自任意 IP 地址的入站 SSH 访问。

入站规则
Type 协议 端口范围 注释
所有流量 全部 全部 sg-1a2b3c4d 允许关联到同一个安全组的实例相互通信。
SSH TCP 22 0.0.0.0/0 允许来自任意 IP 地址的 SSH 访问。
出站规则
Type 协议 端口范围 目的地 注释
所有流量 全部 全部 0.0.0.0/0 允许所有出站流量。

但是,只有该子网中的其他实例和您的远程计算机能够访问该实例。网络 ACL 规则仍会阻止到该子网的所有入站流量,当然,您的远程计算机除外。

API 和命令概览

您可以使用命令行或 API 执行此页面上所说明的任务。有关命令行界面以及可用 API 列表的更多信息,请参阅 访问 Amazon VPC

为您的 VPC 创建网络 ACL

说明您的一个或多个网络 ACL

向网络 ACL 添加规则

从网络 ACL 中删除规则

替换网络 ACL 中的现有规则

替换网络 ACL 关联

删除网络 ACL