第39篇:ACL 基础:标准 ACL 与扩展 ACL
关键词:ACL、基本ACL、高级ACL、流分类、通配符掩码、permit、deny
一、引言
ACL(Access Control List,访问控制列表)是网络中最基础的流量控制工具。它通过定义一组规则来匹配报文,并对匹配到的报文执行允许(permit)或拒绝(deny)操作。ACL 的应用场景远超"访问控制"本身——它在路由过滤、策略路由、QoS 流分类、NAT 地址转换等场景中都扮演着关键角色。
二、ACL 的分类
2.1 华为 ACL 类型与编号
| ACL 类型 | 编号范围 | 匹配条件 | 主要用途 |
|---|---|---|---|
| 基本 ACL | 2000-2999 | 源 IP 地址 | 简单的源地址过滤 |
| 高级 ACL | 3000-3999 | 源/目的 IP、协议、端口、ToS 等 | 精细的五元组匹配 |
| 二层 ACL | 4000-4999 | 源/目的 MAC、802.1p、VLAN | 数据帧级别过滤 |
| 用户自定义 ACL | 5000-5999 | 用户自定义匹配字段 | 特殊场景 |
说明:早期华为文档中常将"基于 MAC 的二层 ACL"和"用户自定义 ACL"都笼统归到 5000-5999 范围,容易让人误以为存在单独的"MAC ACL"。实际在大多数 VRP 版本中,MAC 级别的过滤通过 4000-4999 的二层 ACL 完成;5000-5999 通常用作用户自定义 ACL 编号空间,二者并不并存同号。
2.2 基本 ACL vs 高级 ACL 对比
| 维度 | 基本 ACL(2000-2999) | 高级 ACL(3000-3999) |
|---|---|---|
| 匹配能力 | 仅源 IP | 源/目的 IP、协议、端口、DSCP 等 |
| 粒度 | 粗 | 细 |
| 性能 | 略高(匹配字段少) | 略低(匹配字段多) |
| 应用场景 | 简单源地址过滤 | 精细化流量控制 |
| 建议部署位置 | 靠近目的端(影响范围大) | 靠近源端(精确控制) |
2.3 通配符掩码(Wildcard Mask)
ACL 使用通配符掩码而非子网掩码来匹配地址:
| 通配符位 | 含义 | 示例 |
|---|---|---|
| 0 | 必须精确匹配 | — |
| 1 | 不关心(任意值) | — |
通配符掩码 = ~子网掩码(按位取反):
| 子网掩码 | 通配符掩码 | 匹配范围 |
|---|---|---|
| 255.255.255.255 (/32) | 0.0.0.0 | 单个 IP |
| 255.255.255.0 (/24) | 0.0.0.255 | 一个 /24 网段 |
| 255.255.0.0 (/16) | 0.0.255.255 | 一个 /16 网段 |
| 255.0.0.0 (/8) | 0.255.255.255 | 一个 /8 网段 |
| 0.0.0.0 | 255.255.255.255 | 所有地址 |
三、技术细节
3.1 基本 ACL 配置
# 创建基本 ACL 2000
[HUAWEI] acl 2000
# 允许 192.168.1.0/24 网段
[HUAWEI-acl-basic-2000] rule 5 permit source 192.168.1.0 0.0.0.255
# 拒绝 192.168.2.100 单个主机
[HUAWEI-acl-basic-2000] rule 10 deny source 192.168.2.100 0
# 末尾隐式 deny any 自动生效
[HUAWEI-acl-basic-2000] quit
3.2 高级 ACL 配置
# 创建高级 ACL 3000
[HUAWEI] acl 3000
# 允许 192.168.1.0/24 访问 10.0.0.0/24 的 HTTP(80)和 HTTPS(443)
[HUAWEI-acl-adv-3000] rule 5 permit tcp source 192.168.1.0 0.0.0.255 destination 10.0.0.0 0.0.0.255 destination-port eq 80
[HUAWEI-acl-adv-3000] rule 10 permit tcp source 192.168.1.0 0.0.0.255 destination 10.0.0.0 0.0.0.255 destination-port eq 443
# 允许 DNS(UDP 53)
[HUAWEI-acl-adv-3000] rule 15 permit udp source 192.168.1.0 0.0.0.255 destination 10.0.0.0 0.0.0.255 destination-port eq 53
# 允许 ICMP(ping)
[HUAWEI-acl-adv-3000] rule 20 permit icmp source 192.168.1.0 0.0.0.255 destination 10.0.0.0 0.0.0.255
# 末尾隐式 deny any 自动生效
[HUAWEI-acl-adv-3000] quit
3.3 常用协议与端口
| 协议 | 传输层 | 端口 | 说明 |
|---|---|---|---|
| FTP | TCP | 20/21 | 文件传输(21 控制,20 数据) |
| SSH | TCP | 22 | 安全远程登录 |
| Telnet | TCP | 23 | 远程登录(明文,不安全) |
| SMTP | TCP | 25 | 邮件发送 |
| POP3 / IMAP | TCP | 110 / 143 | 邮件接收 |
| DNS | UDP / TCP | 53 | 域名解析(查询 UDP,大响应/区域传送 TCP) |
| HTTP | TCP | 80 | 网页浏览 |
| HTTPS | TCP | 443 | TLS 加密网页 |
| RDP | TCP | 3389 | 远程桌面 |
| HTTP-Alt | TCP | 8080 | 代理 / 开发服务器 |
| DHCP | UDP | 67/68 | 地址分配(67 服务端,68 客户端) |
| SNMP | UDP | 161/162 | 网管监控 / 告警 |
| NTP | UDP | 123 | 时间同步 |
3.4 ACL 的应用(调用)方式
ACL 本身只是规则集合,必须"应用"到具体场景才生效:
| 应用场景 | 应用方式 | 命令示例 |
|---|---|---|
| 接口入/出方向过滤 | traffic-filter | traffic-filter inbound acl 3000 |
| 策略路由 | traffic classifier | if-match acl 3001 |
| 路由协议过滤 | filter-policy | filter-policy 2000 export |
| NAT 地址转换 | nat outbound | nat outbound 2000(接口视图) |
| QoS 流分类 | traffic classifier | if-match acl 3000 |
3.5 ACL 的隐式拒绝
每个 ACL 的末尾都有一条隐式的 deny any 规则。如果所有显式规则都没有匹配,报文被丢弃。

四、实战配置与故障案例
4.1 案例一:在接口上应用 ACL 过滤流量
需求:禁止 192.168.10.0/24 网段访问互联网,但允许访问内网服务器 10.0.0.0/24。
# 定义 ACL
[HUAWEI] acl 3001
[HUAWEI-acl-adv-3001] rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 10.0.0.0 0.0.0.255
[HUAWEI-acl-adv-3001] rule 10 deny ip source 192.168.10.0 0.0.0.255
[HUAWEI-acl-adv-3001] rule 15 permit ip # 允许其他所有流量
[HUAWEI-acl-adv-3001] quit
# 在接口入方向应用 ACL
[HUAWEI] interface GigabitEthernet0/0/0
[HUAWEI-GigabitEthernet0/0/0] traffic-filter inbound acl 3001
[HUAWEI-GigabitEthernet0/0/0] quit
# 验证 ACL 命中统计
# traffic-filter 场景下 display acl 即可看到硬件命中计数
<HUAWEI> display acl 3001
# 如需查看接口级 traffic-filter 绑定关系
<HUAWEI> display traffic-filter interface GigabitEthernet 0/0/0
4.2 案例二:ACL 通配符掩码计算错误
故障描述:配置 ACL 时部分 IP 未被正确匹配。
# 错误配置:意图匹配 192.168.1.0/24,却把子网掩码当作第二位参数
[HUAWEI-acl-basic-2000] rule 5 permit source 192.168.1.0 255.255.255.0
# ↑ 华为把该参数一律按通配符解释(0=精确匹配,1=不关心),不会"按位反转"成子网掩码语义
# 255.255.255.0 表示前 24 位不关心、仅最后 8 位必须等于 0 → 实际匹配"任意网段的 .0 地址",
# 与预期的 192.168.1.0/24 完全不是一回事,且往往比预期宽得多
# 正确配置:通配符掩码 = 子网掩码的按位取反
[HUAWEI-acl-basic-2000] rule 5 permit source 192.168.1.0 0.0.0.255
# 常见错误对照
# | 意图匹配 | 错误的通配符 | 正确的通配符 |
# |---------|------------|------------|
# | /24 | 255.255.255.0 | 0.0.0.255 |
# | /16 | 255.255.0.0 | 0.0.255.255 |
# | 单 IP | 255.255.255.255 | 0.0.0.0 |
4.3 案例三:ACL 规则顺序不当
故障描述:配置了 ACL 后,所有来自 192.168.0.0/16 的流量都被拒绝,包括本应允许的 192.168.1.0/24。
# 错误配置
[HUAWEI-acl-basic-2000] rule 5 deny source 192.168.0.0 0.0.255.255
[HUAWEI-acl-basic-2000] rule 10 permit source 192.168.1.0 0.0.0.255
# ↑ rule 10 永远不生效,因为 192.168.1.x 已被 rule 5 拒绝
# 正确配置:精确规则在前,宽泛规则在后
[HUAWEI-acl-basic-2000] rule 5 permit source 192.168.1.0 0.0.0.255
[HUAWEI-acl-basic-2000] rule 10 deny source 192.168.0.0 0.0.255.255
4.4 案例四:ACL 用于路由过滤
# 定义 ACL 匹配需要过滤的路由
[HUAWEI] acl 2000
[HUAWEI-acl-basic-2000] rule 5 deny source 10.1.1.0 0.0.0.255
[HUAWEI-acl-basic-2000] rule 10 permit
[HUAWEI-acl-basic-2000] quit
# 在 OSPF 中应用过滤(不向外发布 10.1.1.0/24)
[HUAWEI] ospf 1
[HUAWEI-ospf-1] filter-policy 2000 export
[HUAWEI-ospf-1] quit
# 在 RIP 中应用过滤
[HUAWEI] rip 1
[HUAWEI-rip-1] filter-policy 2000 export
[HUAWEI-rip-1] quit
五、总结
| ACL 类型 | 编号 | 匹配项 | 建议部署位置 |
|---|---|---|---|
| 基本 ACL | 2000-2999 | 源 IP | 靠近目的端 |
| 高级 ACL | 3000-3999 | 五元组 | 靠近源端 |
| 二层 ACL | 4000-4999 | MAC/VLAN | 接入层 |
| 配置要点 | 说明 |
|---|---|
| 通配符掩码 | 非子网掩码,是子网掩码的取反 |
| 规则顺序 | 从上到下匹配,首次匹配即停止 |
| 精确优先 | 精确规则放前面,宽泛规则放后面 |
| 隐式拒绝 | ACL 末尾自动添加 deny any |
| 命中统计 | 转发面命中用 display acl dataplane statistics 查看 |
思考
- 为什么基本 ACL 建议部署在靠近目的端,而高级 ACL 建议部署在靠近源端?
- 通配符掩码 0.0.0.255 和 0.0.0.127 分别匹配多少个 IP 地址?
- ACL 的隐式 deny any 在实际配置中应该显式写出来吗?为什么?
下篇预告:第40篇:ACL 匹配顺序:配置顺序 vs 自动排序