ACL详解:访问控制列表原理与配置

发布时间:2026/11/2 15:28:21
ACL详解:访问控制列表原理与配置

ACL,全称 Access Control List,访问控制列表。一句话概括:网络设备上一组有序的匹配规则,用来给流量“分类”。它本身不决定放行还是丢弃,真正执行动作的是引用它的模块(接口过滤、NAT、路由策略等)。这篇把 ACL 的原理、通配符计算和配置思路一次讲清楚。

1. 什么是 ACL

ACL 就是一组按顺序排列的规则,每条规则描述一种流量特征(源地址、目的地址、端口、协议等),报文进来后跟这些规则逐条比对,命中哪条就按哪条处理。

它只负责“匹配”,不负责“执行”。同一份 ACL 被不同模块引用,规则的含义还不一样:

  • 接口流量过滤(traffic-filter):permit=放行,deny=丢弃

  • QoS 流策略(traffic classifier):permit=分类成功,进队列打标记

  • 路由策略(route-policy / filter-policy):permit/deny 只是匹配条件,动作在模块里另配

  • NAT(nat outbound):permit=允许做地址转换

2. 为什么需要 ACL

企业网络里对流量做管控,ACL 基本是唯一选择,主要解决三件事:

  • 安全管控:只让某些网段访问服务器,其他一律拒绝,防止内网横向渗透

  • 节省带宽:比如视频流量只在上班时间放行,非工作时间直接拦掉

  • 配合其他模块:NAT 要转换哪些地址、QoS 要识别哪类流量,都要靠 ACL 先“圈”出来

华为设备上,ACL 属于 HCIA 必考内容,也是日常排障绕不开的工具。

3. 匹配流程:逐条、命中即停

报文进设备后,ACL 从编号最小的规则开始逐条比对,一旦命中立即停止,后面的规则不再检查。

三个关键点:

  • 规则顺序由编号决定(rule 5、rule 10),不是配置先后

  • 没命中任何规则时,动作取决于引用模块的默认策略:接口过滤默认放行,路由策略默认不放行

  • 所以高级 ACL 末尾几乎都要加一条 deny ip 兜底,把规则外的流量显式拒绝,否则会被默认放行漏过去

4. 通配符到底怎么算

通配符是 32 位反掩码:0=必须匹配,1=可以忽略,跟子网掩码逻辑正好相反。

最常用的换算:通配符 = 255.255.255.255 - 子网掩码。

  • 匹配 /24 网段:掩码 255.255.255.0,通配符 0.0.0.255

  • 精确匹配一台主机:通配符 0.0.0.0,也可以直接写 host 10.0.0.10

  • 匹配所有地址:通配符 255.255.255.255,等价于 any

进阶:通配符可以不连续。0.0.0.254 最后一位是 0 必须匹配、倒数第二位是 1 忽略,所以它匹配所有“末位为 0”的 IP,也就是偶数地址。排障偶尔能见到,理解原理就行。

5. ACL 的分类:选对编号段

华为设备按编号段区分 ACL 类型,配置前先想清楚要匹配什么:

  • 基本 ACL 2000-2999:只匹配源 IP,够用但不精细

  • 高级 ACL 3000-3999:匹配五元组 + TCP 标志位 + 时间范围,绝大多数场景用它

  • 二层 ACL 4000-4999:匹配 MAC、802.1p 优先级,二层流量控制用

记法:只限源网段用基本,涉及目的、端口、协议一律高级,做 MAC 管控用二层。高级 ACL 还能用 tcp-flag 匹配 TCP 标志位,比如只放行带 SYN 标志的报文,考试常考。

6. 配置实操:一个完整场景

场景:生产区 192.168.10.0/24 只允许访问服务器 10.0.0.10 的 80、443 端口,其余流量全拒,而且只在上班时间(周一至周五 08:00-18:00)开放。

system-view acl number3000rule5permit tcpsource192.168.10.00.0.0.255 destination10.0.0.100.0.0.0 destination-port eq80rule10permit tcpsource192.168.10.00.0.0.255 destination10.0.0.100.0.0.0 destination-port eq443rule15denyipquit time-range work-time 08:00 to18:00 working-day acl number3001rule5permit tcpsource192.168.10.00.0.0.255 destination10.0.0.100.0.0.0 destination-port eq80time-range work-time quit interface GigabitEthernet0/0/1 traffic-filter inbound acl3000quit

四个要点:

  • destination-port 用 eq 表示精确端口,支持 range 做端口段(比如 1000 to 2000)

  • rule 15 deny ip 是兜底,永远别省——没有它,规则外的流量默认放行

  • time-range 是独立对象:先用 time-range 命令定义,再在规则里引用

  • 接口挂 ACL 的方向选 inbound:从生产区进来的流量先过 ACL,回包走 outbound 一般不用再配

同一份 ACL 还能给 NAT 用:

nat outbound3000address-group1

在 NAT 里,ACL 3000 的 permit 含义变成“允许做地址转换”,一份 ACL 多处引用,各模块各取所需。

7. 实验思路

实验里就是标准的“创建高级 ACL + 接口挂 traffic-filter + time-range 限时 + NAT 复用”套路。做实验时重点验证:

  • 规则外流量被 deny ip 兜底拦掉,通配符写反的网段放不出去

  • 非工作时段流量被 time-range 拦掉(或者用 undo time-range 验证放开)

  • 同一份 ACL 挂到 NAT 后 permit 变成地址转换,不挂 ACL 的网段不做转换

8. 结尾

ACL 是 HCIA 里性价比很高的一块:原理不深,但项目基本上都会用。踩过最多的坑就是通配符和掩码填反、忘了末尾 deny 兜底、ACL 没挂到接口上。先记住“ACL 只匹配、动作在模块”就不会乱。后面可以把 ACL 配合 NAT、DHCP 一起看,那才是完整的园区网。