您可以创建网络ACL并与交换机绑定,通过配置网络ACL规则,精确控制出入交换机的流量。
工作原理
作用范围
网络ACL仅对绑定交换机内的弹性网卡生效。
规则生效机制
每条规则有生效顺序,系统将从生效顺序为1的规则开始,根据IP版本、协议类型、源/目的地址及端口范围,依次判断与流量是否匹配。流量匹配到首条规则后,执行指定的允许/拒绝策略。
针对入方向规则和出方向规则,端口范围始终匹配流量的目的端口。
网络ACL在拒绝流量时采用drop操作,发起端不会收到任何响应,表现为请求超时或者无法建立连接。
网络ACL规则是无状态的。当配置入方向规则来允许特定流量进入交换机时,响应流量不会被自动允许,您必须创建允许响应流量返回客户端临时端口的出方向规则。当客户端向服务器发起请求时,会从临时端口范围中随机选择一个端口,接收服务器的响应。
为了保证各种类型的客户端都能正常访问您的服务,您可以设置1024-65535的临时端口范围。
示例配置中,存在两条源/目的地址范围有重叠的自定义规则。当IP为192.168.0.1的客户端通过HTTPS协议访问子网内的服务时,流量会首先匹配到生效顺序为1的规则,因此被拒绝;而当IP为192.168.1.1的客户端访问时,流量按顺序匹配到生效顺序为2的规则,因此被允许,且响应流量按照生效顺序为1的出方向规则发送回客户端的临时端口。
当服务需开放大量端口,但部分端口需要拒绝访问时,您需要确保拒绝规则的优先级高于允许规则。
与安全组的区别
对比项 | 网络ACL | 安全组 |
作用范围 | 根据网络ACL规则控制出入交换机的流量。 | ECS实例级别的访问控制方式。ECS 实例关联的多个安全组的规则将按固定的策略排序,共同决定是否放行实例出入站的流量。 |
返回数据流状态 | 无状态:返回数据流必须被规则明确允许。 | 有状态:返回数据流会被自动允许,不受任何规则的影响。 |
规则匹配顺序 | 按照规则生效顺序,依次判断与流量是否匹配。 | 先按照优先级排序:优先级相同时,授权策略为拒绝的规则排在授权策略为允许的规则之前。 排序完成后,依次匹配已排序好的规则。 |
与ECS实例的关联关系 | 每个交换机仅允许绑定一个网络ACL。 | 一个ECS实例可加入多个安全组。 |
创建/删除网络ACL
您可以创建网络ACL,并将其与交换机关联,来控制出入交换机的流量。
当您为仅有IPv4网段的VPC创建网络ACL时,系统默认在入方向和出方向添加以下规则:
云服务规则:允许使用阿里云的私网域名解析服务与ECS元数据服务。优先级固定最高,无法修改和删除。
1、阿里云默认DNS服务器IP为100.100.2.136、100.100.2.138,用于解析内网域名。
2、MetaServer的IP为100.100.100.200,提供了ECS实例必需的元数据服务,确保实例正常运行。
自定义规则:允许所有IPv4流量,以确保创建网络ACL后不会影响同一VPC内不同交换机之间的私网互通。您可以配置自定义规则,精确控制进出交换机的流量。
系统规则:用于拒绝未匹配其他规则的IPv4流量。优先级固定最低,无法修改和删除。
如果ACL所属的VPC开启了IPv6,入方向和出方向将再添加允许所有IPv6流量的自定义规则、拒绝所有IPv6流量的系统规则。
网络ACL仅允许绑定所属VPC内的交换机,每个交换机仅允许绑定一个网络ACL。
控制台
创建网络ACL
前往专有网络控制台-网络ACL,在页面上方选择目标地域后,单击创建网络ACL。
配置所属专有网络,需选择计划与网络ACL关联的交换机所属的VPC。
关联交换机
单击实例ID或操作列的管理,进入已绑定资源页签,单击关联交换机,选择一个或多个目标交换机并确认关联。关联的交换机将按照网络ACL规则控制出入交换机的流量。如需解除控制,您可以在该页签下,单击目标交换机操作列的解绑。
您也可以在目标交换机详情页的网络ACL参数项,绑定、更换或解绑网络ACL。
删除网络ACL
需先确保已解除与交换机的关联。在目标网络ACL的操作列,单击删除。
API
调用CreateNetworkAcl创建网络ACL。
调用AssociateNetworkAcl绑定网络ACL与交换机。
调用UnassociateNetworkAcl解除网络ACL与交换机的绑定。
调用DeleteNetworkAcl删除网络ACL。
Terraform
与控制台逻辑不同,Terraform仅支持将网络ACL与一个交换机关联。
Resources:alicloud_network_acl
# 指定网络ACL的地域
provider "alicloud" {
region = "cn-hangzhou"
}
# 指定VPC ID
variable "vpc_id" {
default = "vpc-bp1k******" # 修改为VPC的实际ID
}
# 指定交换机ID
variable "vswitch_id" {
default = "vsw-bp1y******" # 修改为交换机的实际ID
}
# 创建网络ACL并关联交换机
resource "alicloud_network_acl" "example_network_acl" {
vpc_id = var.vpc_id # 指定网络ACL所属VPC
network_acl_name = "example_network_acl_name"
resources {
resource_id = var.vswitch_id # 指定网络ACL关联的交换机
resource_type = "VSwitch"
}
}
配置网络ACL规则
创建网络ACL后,系统将默认添加允许/拒绝所有流量的网络ACL规则,您可以配置自定义规则,精确控制特定流量进出交换机。
基于协议类型、IP版本、源地址/目的地址、端口范围匹配到网络ACL规则后,系统将对流量执行指定策略,允许/拒绝对应的流量。
其中,协议类型为TCP(6)/UDP(17)时,可以调整端口范围。取值范围为0~65535,设置格式为起始端口/终止端口
,但不能设置为-1/-1(表示不限制端口)。选择其他协议类型时,端口范围无法设置,默认为-1/-1。
1、添加/修改/删除网络ACL规则后,会自动应用到与网络ACL绑定的交换机。
2、仅网络ACL所属VPC开启IPv6时,您可以添加IPv6类型的出入方向规则。
3、配置DHCP选项集后,您需要添加放行指定DNS服务器的出入方向规则。未添加规则,可能会造成域名解析异常。
4、使用负载均衡时,您需要在出入方向规则中添加允许监听端口接收到的请求转发至后端服务器、健康检查端口的请求发送至后端服务器的规则。
控制台
在目标网络ACL的入方向规则/出方向规则页签,您可参考以下步骤,来配置自定义规则。
由于网络ACL规则是无状态的,当您设置入方向规则来允许特定流量进入交换机时,需要设置相应的出方向规则。
添加规则
在目标网络ACL的入方向规则/出方向规则页签,单击管理入方向规则/管理出方向规则。您可以单击添加IPv4规则/添加IPv6规则,逐条配置。
如果您需要对多个IP地址段进行统一的访问控制,您可以选择快速添加规则,通过优先级来设置插入规则的位置。
如需批量添加不同策略的规则,您可以使用提供的模板,批量导入规则。模板中列出的所有配置项均需填写,缺少配置项的规则将无法导入。成功导入的规则将在原有规则的基础上顺序添加,不会覆盖原有规则。
调整规则顺序
单击管理入方向规则/管理出方向规则,上下拖动规则来调整生效顺序。
删除规则
在目标网络ACL规则的操作列单击删除。
API
调用UpdateNetworkAclEntries更新网络ACL规则。与控制台逻辑不同的是,该API将对ACL规则进行全量更新。如果只传入新增规则,将会删除原有规则,仅保留新传入的规则。因此,增加规则时必须传入所有需要保留的规则。
调用CopyNetworkAclEntries将网络ACL的规则完整复制到另一个网络ACL。为保证所有规则都能被目标网络ACL正确地识别和接收,您需确保两个网络ACL所属的VPC均只有IPv4网段或均开启了IPv6。未开启IPv6的VPC中的网络ACL无法配置IPv6类型的规则,若将规则完整复制到已开启IPv6的VPC的网络ACL时,系统不会自动添加允许所有IPv6流量的自定义规则,可能影响IPv6通信。
Terraform
本示例分别在出入方向添加了拒绝规则,您应根据实际的访问控制策略调整规则配置。
Resources:alicloud_network_acl
# 指定网络ACL的地域
provider "alicloud" {
region = "cn-hangzhou"
}
# 指定VPC ID
variable "vpc_id" {
default = "vpc-bp1k******" # 修改为VPC的实际ID
}
# 指定交换机ID
variable "vswitch_id" {
default = "vsw-bp1y******" # 修改为交换机的实际ID
}
# 创建网络ACL并绑定交换机
resource "alicloud_network_acl" "example_network_acl" {
vpc_id = var.vpc_id # 指定网络ACL所属VPC
network_acl_name = "example_network_acl_name"
resources {
resource_id = var.vswitch_id # 指定网络ACL关联的交换机
resource_type = "VSwitch"
}
ingress_acl_entries { # 指定入方向规则
network_acl_entry_name = "example-ingress"
protocol = "tcp" # 协议类型
source_cidr_ip = "10.0.0.0/24" # 源地址
port = "20/80" # 端口范围
policy = "drop" # 策略
}
egress_acl_entries { # 指定出方向规则
network_acl_entry_name = "example-egress"
protocol = "tcp"
destination_cidr_ip = "10.0.0.0/24" # 目的地址
port = "20/80" # 端口范围
policy = "drop" # 策略
}
}
网络ACL规则配置示例
限制不同交换机下ECS的互通
同一VPC内的不同交换机之间默认私网互通,如需限制不同交换机下的资源互通,您可以使用网络ACL拒绝特定IP的访问。
如图,您可以为交换机1绑定的网络ACL配置出入方向规则,禁止交换机1中的实例与ECS06互通。
仅允许特定IP访问云上服务
使用高速通道实现线下IDC与VPC互通后,线下IDC中的所有资源都可以访问云上服务。您可以使用网络ACL仅允许特定IP访问,拒绝其他访问。
如图,您可以为交换机绑定的网络ACL配置出入方向规则,仅允许云下服务器1和云下服务器2访问交换机内的实例。
更多信息
计费说明
网络ACL功能不收费。
支持的地域
公有云支持的地域
区域 | 支持网络ACL的地域 |
亚太-中国 | 华东1(杭州)、华东2(上海)、华东5 (南京-本地地域-关停中)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、中国香港、华中1(武汉-本地地域)、华东6(福州-本地地域-关停中) |
亚太-其他 | 日本(东京)、韩国(首尔)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷) |
欧洲与美洲 | 德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)、墨西哥 |
中东 | 阿联酋(迪拜)、沙特(利雅得) 重要 沙特(利雅得)地域由合作伙伴运营。 |
金融云支持的地域
区域 | 支持网络ACL的地域 |
亚太 | 华南1 金融云、华东2 金融云、华北2 金融云(邀测) |
政务云支持的地域
区域 | 支持网络ACL的地域 |
亚太 | 华北2 阿里政务云1 |
配额
配额名称 | 描述 | 默认限制 | 提升配额 |
vpc_quota_nacl_ingress_entry | 单个网络ACL支持创建的入方向规则数量 网络ACL所属VPC开启了IPv6时,支持创建的IPv4/IPv6入方向规则,默认均为20条。 | 20条 | |
vpc_quota_nacl_egress_entry | 单个网络ACL支持创建的出方向规则数量 网络ACL所属VPC开启了IPv6时,支持创建的IPv4/IPv6入方向规则,默认均为20条。 | 20条 | |
nacl_quota_vpc_create_count | 单个VPC支持创建的网络ACL数量 | 20个 |