ACL 访问控制列表与华为设备配置实操
ACL(Access Control List,访问控制列表)是网络设备上最基础、最常用的流量控制工具。本文覆盖 ACL 的匹配机制、通配符掩码、基本/高级 ACL 的配置语法,并提供两台华为路由器的完整实操实验:部门隔离、服务器保护、远程管理加固三个递进需求。
一、ACL 概述:本质与应用场景
1.1 ACL 的本质
ACL 本质上是一组按顺序排列的 permit / deny 匹配规则的集合,用来描述"什么样的报文"。
两个关键认知:
- ACL 只是匹配工具,本身不能过滤流量——必须被具体特性调用后才产生实际动作;
permit/deny在不同应用场景中含义不同:包过滤场景中是"放行 / 丢弃",NAT 场景中是"需要转换 / 不转换"。
1.2 典型应用场景
| 应用场景 | 引用位置 | permit / deny 的含义 |
|---|---|---|
| 接口包过滤(traffic-filter) | 接口视图 | 放行 / 丢弃 |
| 远程登录限制(vty + acl) | 用户界面视图 | 允许登录 / 拒绝登录 |
| NAT 地址转换 | NAT 视图 | 需要转换的流量 |
| IPSec VPN 感兴趣流 | IPSec 策略 | 需要加密保护的流量 |
| QoS 流分类 | traffic classifier | 归入某类流量 |
| 路由过滤 | route-policy / filter-policy | 匹配某条路由 |
二、ACL 的匹配机制(三条铁律)
- 顺序匹配,命中即止:报文从 rule-id 最小的规则开始逐条比较,一旦命中某条规则,立即执行该规则的动作,不再检查后续规则;
- 未命中默认放行(华为):包过滤场景中,报文若与所有规则都不匹配,默认转发——思科则是隐含
deny any全部丢弃,这是两大厂商最重要的差异点; - 规则三要素:每条规则由"规则号 + 动作 + 匹配条件"构成,条件不满足就是未命中,继续比下一条。
排序模式(创建 ACL 时可选):
- config(默认):严格按 rule-id 从小到大匹配;
- auto:系统按"深度优先"原则自动排序,匹配条件越精确的规则越靠前。
三、ACL 的分类与编号
| 分类 | 编号范围 | 可匹配要素 | 典型用途 |
|---|---|---|---|
| 基本 ACL | 2000~2999 | 仅源 IP 地址 | 粗粒度控制,如禁止某网段 |
| 高级 ACL | 3000~3999 | 源/目的 IP、协议、源/目的端口、ICMP 类型等(五元组) | 精确控制,如只禁 ping 放行 Web |
| 二层 ACL | 4000~4999 | 源/目的 MAC、VLAN ID、二层协议类型 | 二层流量过滤 |
| 用户 ACL | 6000~6999 | 用户组信息 | 华为特有,较少使用 |
部署经验法则:
- 基本 ACL 只认源地址,应部署在靠近目的端、且用出方向(outbound)——避免在源端误伤"同源不同目的"的流量;
- 高级 ACL 五元组全匹配,应部署在靠近源端的入方向(inbound)——尽早丢弃不需要的流量,节省链路与设备资源。
四、通配符掩码详解
通配符掩码(wildcard mask)写法与子网掩码相似,但含义相反:0 表示必须精确匹配,1 表示该位任意。
| 写法 | 含义 | 等价简写 |
|---|---|---|
| 192.168.10.0 0.0.0.255 | 匹配 192.168.10.0/24 整个网段 | — |
| 192.168.10.100 0.0.0.0 | 匹配单台主机 | host 192.168.10.100 |
| 0.0.0.0 255.255.255.255 | 匹配任意地址 | any |
| 192.168.10.0 0.0.0.3 | 匹配 192.168.10.0/30 共 4 个地址 | — |
| 10.1.0.0 0.0.255.255 | 匹配 10.1.0.0/16 整个 B 段 | — |
与子网掩码的对比:
| 对比项 | 子网掩码 | 通配符掩码 |
|---|---|---|
| 用途 | 划分网络位与主机位 | 指明哪些位必须匹配 |
| 数值含义 | 1 = 网络位 | 0 = 必须精确匹配 |
| 连续性 | 1 必须连续 | 常规写法连续,也支持非连续(如 0.1.0.1) |
五、基本 ACL 配置语法
[R1] acl number 2000
[R1-acl-basic-2000] description DENY-MARKET-TO-FINANCE # 可选:备注用途
[R1-acl-basic-2000] rule 5 deny source 192.168.20.0 0.0.0.255
[R1-acl-basic-2000] rule 10 permit source any # 可选:显式放行其余(华为默认已放行)
[R1-acl-basic-2000] quit
[R1] interface GigabitEthernet0/0/3
[R1-GigabitEthernet0/0/3] traffic-filter outbound acl 2000 # 接口出方向应用命令要素解析:
rule [rule-id]:规则号可省略,省略时按步长(默认 5)自动分配;permit / deny:动作;source <地址> <通配符>:源地址匹配条件;traffic-filter { inbound | outbound } acl <编号>:在接口某方向应用包过滤。
六、高级 ACL 配置语法
[R2] acl number 3000
[R2-acl-adv-3000] rule 5 deny icmp source 192.168.10.0 0.0.0.255 destination 192.168.30.100 0.0.0.0
[R2-acl-adv-3000] rule 10 permit tcp source 192.168.20.0 0.0.0.255 destination 192.168.30.100 0.0.0.0 destination-port eq www
[R2-acl-adv-3000] quit端口匹配操作符:
| 操作符 | 含义 | 示例 |
|---|---|---|
| eq | 等于 | destination-port eq www |
| gt | 大于 | destination-port gt 1024 |
| lt | 小于 | destination-port lt 1024 |
| neq | 不等于 | destination-port neq 8080 |
| range | 介于两数之间 | destination-port range 20 21 |
常见端口速查:
| 端口 | 服务 | 传输层协议 |
|---|---|---|
| 80 / 443 | HTTP / HTTPS | TCP |
| 21 + 20 | FTP 控制 / 数据 | TCP |
| 22 | SSH | TCP |
| 23 | Telnet | TCP |
| 53 | DNS | TCP / UDP |
| 25 / 110 | SMTP / POP3 | TCP |
七、完整实操实验
7.1 实验拓扑与环境
以 eNSP 中的华为 AR 系列路由器(VRP 平台)为例,接口编号以实际设备为准。
PC1(市场部) ──── GE0/0/2 ┐
192.168.20.10 │
[R1] ── GE0/0/1: 10.1.12.1/24 ──┐
PC2(财务部) ──── GE0/0/3 ┘ │ 互联网段 10.1.12.0/24
192.168.10.10 │
GE0/0/1: 10.1.12.2/24 ── [R2] ── GE0/0/2 ── Server
(192.168.30.254) 192.168.30.100
管理主机 192.168.10.100 与 PC2 同属财务部网段(192.168.10.0/24)7.2 地址规划与实验需求
地址规划:
| 设备/主机 | 接口/位置 | IP 地址 | 说明 |
|---|---|---|---|
| R1 | GE0/0/1 | 10.1.12.1/24 | 与 R2 互联 |
| R1 | GE0/0/2 | 192.168.20.254/24 | 市场部网关 |
| R1 | GE0/0/3 | 192.168.10.254/24 | 财务部网关 |
| R2 | GE0/0/1 | 10.1.12.2/24 | 与 R1 互联 |
| R2 | GE0/0/2 | 192.168.30.254/24 | 服务器区网关 |
| PC1 | 市场部 | 192.168.20.10/24 | 网关指向 .254 |
| PC2 | 财务部 | 192.168.10.10/24 | 网关指向 .254 |
| 管理主机 | 财务部 | 192.168.10.100/24 | 唯一允许 telnet R2 的主机 |
| Server | 服务器区 | 192.168.30.100/24 | Web / FTP 服务器 |
实验需求:
| 需求 | 内容 | ACL 类型 | 应用位置 |
|---|---|---|---|
| 1 | 禁止市场部访问财务部 | 基本 ACL 2000 | R1 GE0/0/3 outbound(靠近目的) |
| 2 | 禁止财务部 ping 服务器,但其 Web/FTP 访问不受影响 | 高级 ACL 3000 | R1 GE0/0/3 inbound(靠近源端) |
| 3 | 仅允许管理主机 192.168.10.100 telnet R2 | 基本 ACL 2001 + vty | R2 用户界面 inbound |
7.3 第一步:基础配置(接口 + 路由)
R1 配置:
<Huawei> system-view
[Huawei] sysname R1
[R1] interface GigabitEthernet0/0/1
[R1-GigabitEthernet0/0/1] ip address 10.1.12.1 24
[R1-GigabitEthernet0/0/1] quit
[R1] interface GigabitEthernet0/0/2
[R1-GigabitEthernet0/0/2] ip address 192.168.20.254 24
[R1-GigabitEthernet0/0/2] quit
[R1] interface GigabitEthernet0/0/3
[R1-GigabitEthernet0/0/3] ip address 192.168.10.254 24
[R1-GigabitEthernet0/0/3] quit
[R1] ip route-static 0.0.0.0 0 10.1.12.2R2 配置:
<Huawei> system-view
[Huawei] sysname R2
[R2] interface GigabitEthernet0/0/1
[R2-GigabitEthernet0/0/1] ip address 10.1.12.2 24
[R2-GigabitEthernet0/0/1] quit
[R2] interface GigabitEthernet0/0/2
[R2-GigabitEthernet0/0/2] ip address 192.168.30.254 24
[R2-GigabitEthernet0/0/2] quit
[R2] ip route-static 192.168.10.0 24 10.1.12.1
[R2] ip route-static 192.168.20.0 24 10.1.12.1基础连通性确认:此时 PC1、PC2 均可 ping 通 192.168.30.100。
7.4 需求 1:基本 ACL 实现部门隔离
[R1] acl number 2000
[R1-acl-basic-2000] description DENY-MARKET-TO-FINANCE
[R1-acl-basic-2000] rule 5 deny source 192.168.20.0 0.0.0.255
[R1-acl-basic-2000] quit
[R1] interface GigabitEthernet0/0/3
[R1-GigabitEthernet0/0/3] traffic-filter outbound acl 2000
[R1-GigabitEthernet0/0/3] quit原理说明:ACL 2000 只匹配源地址。若挂在市场部入接口 GE0/0/2 的 inbound,会把市场部去往服务器等所有流量一并拦掉;挂在目的端(财务部)GE0/0/3 的出方向,则只拦截"进入财务部网段"的流量,市场部访问服务器不受影响——这正是"基本 ACL 靠近目的端、出方向"的原因。
7.5 需求 2:高级 ACL 只禁财务部 ping 服务器
[R1] acl number 3000
[R1-acl-adv-3000] description DENY-FINANCE-PING-SERVER
[R1-acl-adv-3000] rule 5 deny icmp source 192.168.10.0 0.0.0.255 destination 192.168.30.100 0.0.0.0
[R1-acl-adv-3000] quit
[R1] interface GigabitEthernet0/0/3
[R1-GigabitEthernet0/0/3] traffic-filter inbound acl 3000
[R1-GigabitEthernet0/0/3] quit原理说明:高级 ACL 精确匹配"源 10.0 网段 → 目的 30.100、ICMP 协议",只拦 ping,财务部的 HTTP/FTP 流量因协议不匹配而不受影响;应用在靠近源端的入方向,报文一进设备就被丢弃,不再占用互联链路带宽。此时 GE0/0/3 一个接口两个方向各挂一个 ACL(out 2000 / in 3000),符合"同接口同方向仅一个 ACL"的限制。
7.6 需求 3:vty + ACL 远程管理加固
[R2] telnet server enable
[R2] acl number 2001
[R2-acl-basic-2001] rule 5 permit source 192.168.10.100 0.0.0.0
[R2-acl-basic-2001] rule 10 deny
[R2-acl-basic-2001] quit
[R2] aaa
[R2-aaa] local-user admin password cipher Huawei@123
[R2-aaa] local-user admin privilege level 3
[R2-aaa] local-user admin service-type telnet
[R2-aaa] quit
[R2] user-interface vty 0 4
[R2-ui-vty0-4] authentication-mode aaa
[R2-ui-vty0-4] acl 2001 inbound
[R2-ui-vty0-4] quit原理说明:vty 场景中 ACL 的语义与 traffic-filter 不同——只有命中 permit 的源才允许登录,其余(deny 或未命中)一律拒绝,所以必须显式 permit 管理主机;rule 10 deny 虽然语义上冗余,但明示了"拒绝其他所有源"的管理意图,便于审计。ACL 拦截发生在账号认证之前,非法源连密码输入界面都进不去。
7.7 结果验证
验证需求 1(PC1 → PC2 被拦截):
PC1> ping 192.168.10.10
--- 192.168.10.10 ping statistics ---
5 packet(s) transmitted, 0 packet(s) received, 100.00% packet loss说明:PC2 → PC1 方向 ping 同样超时——请求能到达 PC1,但回包源地址是 192.168.20.10,出 GE0/0/3 时再次被 ACL 2000 命中。这是基本 ACL"只认源地址"带来的天然效果:两端流量都被拦死。
验证需求 2(PC2 ping 服务器被拦、HTTP 不受影响;PC1 不受影响):
PC2> ping 192.168.30.100
--- 192.168.30.100 ping statistics ---
5 packet(s) transmitted, 0 packet(s) received, 100.00% packet loss
PC2> 访问 http://192.168.30.100 → 页面正常打开(未命中 icmp 规则,默认放行)
PC1> ping 192.168.30.100
--- 192.168.30.100 ping statistics ---
5 packet(s) transmitted, 5 packet(s) received, 0.00% packet loss验证需求 3(telnet 对比):
PC2(192.168.10.10)> telnet 10.1.12.2
Error: Failed to connect to the remote host. # 被 vty 的 ACL 2001 拦截,进不了认证环节
管理主机(192.168.10.100)> telnet 10.1.12.2
Login authentication
Username: admin
Password:
<R2> # 登录成功,获得管理级别权限查看设备侧规则与命中情况:
[R1] display acl 2000
Basic ACL 2000, 1 rule
Acl's step is 5
rule 5 deny source 192.168.20.0 0.0.0.255
[R1] display acl 3000
Advanced ACL 3000, 1 rule
Acl's step is 5
rule 5 deny icmp source 192.168.10.0 0.0.0.255 destination 192.168.30.100 0.0.0.0
[R1] display traffic-filter applied-record
Interface Direction Acl
GigabitEthernet0/0/3 inbound 3000
GigabitEthernet0/0/3 outbound 2000八、扩展配置
8.1 时间段 ACL
需求:工作日 9:00~18:00 禁止市场部 FTP 传输服务器文件,其余时间放行。
[R1] time-range worktime 09:00 to 18:00 working-day
[R1] acl number 3001
[R1-acl-adv-3001] rule 5 deny tcp source 192.168.20.0 0.0.0.255 destination 192.168.30.100 0.0.0.0 destination-port range 20 21 time-range worktime
[R1-acl-adv-3001] quit
[R1] interface GigabitEthernet0/0/1
[R1-GigabitEthernet0/0/1] traffic-filter outbound acl 3001说明:range 20 21 同时覆盖 FTP 控制与数据端口;规则只在时间段内生效,下班后与周末自动放行(未命中默认放行)。
8.2 步长与自动排序
[R1] acl number 2000
[R1-acl-basic-2000] step 10 # 修改步长为 10,新规则编号 15 → 25 → 35…
[R1-acl-basic-2000] quit
[R1] acl number 2002 match-order auto # 创建自动排序 ACL说明:默认步长 5 时,新规则编号按 5 递增,在两条规则之间最多只能手工插入 4 条;把步长调大(如 10)可为后续插入预留更多编号。match-order auto 模式下系统按深度优先自动排序,条件最精确的规则最先匹配,适合规则较多且不想手工维护编号的场景。
九、验证与排错命令
| 命令 | 视图 | 作用 |
|---|---|---|
| display acl [ 编号 / all ] | 任意 | 查看 ACL 规则、步长与命中次数(times matched) |
| display traffic-filter applied-record | 任意 | 查看 ACL 在各接口/方向的绑定情况 |
| reset acl counter [ 编号 / all ] | 用户视图 | 清零命中计数,便于重新观察 |
| display time-range all | 任意 | 查看时间段配置 |
| display local-user | 任意 | 查看 AAA 本地账号 |
| display users | 任意 | 查看当前登录的 vty 会话 |
排错三板斧:
- 查规则:
display acl all核对规则顺序、通配符、协议与端口是否写反(deny 写在 permit 后面会导致 deny 永远不生效); - 查位置:
display traffic-filter applied-record核对 ACL 挂的接口与方向是否正确(最常见错误是挂错接口或 in/out 搞反); - 验证生效:先
reset acl counter清零,打一轮流量后再看命中次数是否增长——次数增长但流量仍通,说明存在其他路径或在别处被 permit。
十、注意事项
- 基本 ACL 部署在靠近目的端的出方向,高级 ACL 部署在靠近源端的入方向;
- 华为未命中规则默认放行,思科默认全部拒绝——迁移或对照学习时务必核对默认动作;
- 同一接口同一方向只能应用一个 ACL,不同方向可以各挂一个(本实验 GE0/0/3 同时挂 3000 入方向、2000 出方向);
- config 模式下 rule-id 越小越先匹配,deny 规则要写在对应 permit 之前;新规则建议预留编号间隔(必要时调整 step);
- 通配符掩码与子网掩码含义相反,0 是精确匹配、1 是任意;
- traffic-filter 命中 deny 的报文被直接丢弃、不回应答报文,PC 端表现为 Request timeout(而非 Destination unreachable);
- 删除正在应用的 ACL 必须先在接口视图执行
undo traffic-filter ...,再undo acl number ...,否则报错; - 修改 ACL 规则后立即生效,无需重启接口;生产环境修改前先备份规则(display acl 导出)。
十一、面试高频问答
- ACL 的本质是什么?什么时候才生效? ACL 是按顺序排列的匹配规则集合,本质是"匹配工具";只有被 traffic-filter、NAT、QoS、路由策略等特性引用后才产生实际动作。
- 华为与思科 ACL 未命中规则的默认动作有何区别? 华为默认放行(permit),思科隐含 deny any 全部丢弃。
- 基本 ACL 与高级 ACL 的区别及部署原则? 基本 ACL(2000~2999)只匹配源 IP,部署在靠近目的端的出方向;高级 ACL(3000~3999)匹配五元组,部署在靠近源端的入方向——基本 ACL 挂在源端会误伤同源不同目的的流量。
- 通配符掩码与子网掩码的区别? 通配符 0 表示必须精确匹配、1 表示任意,与子网掩码含义相反,且支持非连续写法。
- ACL 的匹配顺序如何确定? config 模式按 rule-id 从小到大,命中即止;auto 模式由系统按深度优先自动排序,精确规则优先。
- traffic-filter 与 vty 引用 ACL 时默认动作有何不同? 包过滤未命中默认放行;vty 场景只有命中 permit 的源才允许登录,deny 或未命中一律拒绝。
- 一个接口能应用几个 ACL?如何删除在用的 ACL? 华为同一接口同一方向只能应用一个;删除时先在接口 undo traffic-filter,再 undo acl number。
- PC ping 被 deny 后看到什么现象?为什么? Request timeout 持续超时——deny 报文被设备直接丢弃,不会返回 Destination unreachable 等应答。
十二、记忆口诀
- 编号分类:两千看源,三千全能,四千二层,六千用户;
- 部署位置:基本靠近目的出,高级紧跟源头入;
- 匹配规则:规则号小先比较,命中即停不再瞧;全部不中莫慌张,华为放行思科挡;
- 通配符掩码:零是精确一随意;
- 管理加固:ACL 挂 vty,认证之前先比对。