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 一起看,那才是完整的园区网。