1. ACL 基础概念:什么是 ACL、ACL 的作用、ACL 的分类
各位好,我是老张。今天咱们正式进入《ACL 规则设计与测试实战》的第一章。
ACL 这东西,说白了就是网络设备的「门禁系统」。你想想看,一个公司的大楼,总不能谁都能随便进吧?得有门禁卡、得有权限分级。网络也一样,数据包在路由器、交换机里跑来跑去,你得告诉设备:哪些包能过,哪些包得拦下来。
ACL 就是干这个的。全称 Access Control List,访问控制列表。我刚开始接触网络那会儿,觉得这玩意儿不就是几条命令嘛,配完就完事了。后来有一次线上故障,就是因为 ACL 顺序写反了,导致整个部门断网半小时……嗯,从那以后我再也不敢小看它了。
1.1 什么是 ACL
ACL 是一组有序的规则集合。每条规则定义了一个「匹配条件」和对应的「处理动作」。设备收到数据包后,会从上到下依次匹配这些规则——一旦命中,就执行规则里指定的动作,不再继续往下看。
核心要点:ACL 的本质是「顺序匹配、一旦命中即停止」。这个特性决定了规则排列顺序至关重要。
举个例子,你写了一条规则「拒绝 192.168.1.1 的数据包」,又写了一条「允许 192.168.1.0/24 网段的数据包」。如果拒绝规则放在前面,那 192.168.1.1 就被拦住了;如果允许规则在前面,那 192.168.1.1 反而能通过。顺序不同,结果天差地别。
1.2 ACL 的作用
ACL 能干的事其实挺多的。我归纳了一下,主要有这么几类:
- 流量过滤——最常见的用途。允许或拒绝特定源 IP、目的 IP、端口、协议的数据包通过接口。
- 安全策略实施——比如只允许内网用户访问公司服务器,拒绝外网直接访问。
- 流量分类与标记——配合 QoS(服务质量)使用,给不同流量打上优先级标签。
- NAT 控制——决定哪些内网地址可以做地址转换,哪些不做。
- 路由策略配合——在路由重分发、策略路由等场景中,ACL 用来匹配感兴趣流量。
个人经验:我在做数据中心网络运维时,ACL 用得最多的场景其实是「安全域隔离」。不同业务线之间、生产环境和测试环境之间,全靠 ACL 做第一道防线。配错了,轻则业务不通,重则安全漏洞。所以每次上线前,我都会反复核对 ACL 的规则顺序。
1.3 ACL 的分类
ACL 按不同的维度可以分成好几类。咱们先看最常见的三种:标准 ACL、扩展 ACL、命名 ACL。
1.3.1 标准 ACL
标准 ACL 只检查数据包的源 IP 地址。它不关心目的地址、不关心端口、不关心协议类型。说白了就是「看脸」——只看你从哪来,不管你去哪、干什么。
- 编号范围:1-99(标准 IP ACL),1300-1999(扩展范围)
- 匹配粒度:粗,只能基于源 IP
- 放置位置:尽量靠近目的端,因为标准 ACL 无法区分具体流量类型,放太早可能误伤
# 标准 ACL 配置示例(Cisco 设备)
access-list 10 permit 192.168.1.0 0.0.0.255
access-list 10 deny any
interface GigabitEthernet0/1
ip access-group 10 out
这段配置的意思是:允许源 IP 为 192.168.1.0/24 网段的数据包通过,其他全部拒绝。应用在接口的出方向。
注意:标准 ACL 因为只认源 IP,所以一般建议放在离目的端最近的地方。我曾经见过有人把标准 ACL 挂在核心交换机入口,结果把正常流量全拦了——因为源 IP 匹配太宽泛,根本分不清哪些流量该放行。
1.3.2 扩展 ACL
扩展 ACL 就精细多了。它能同时检查源 IP、目的 IP、协议类型、源端口、目的端口。你想想看,标准 ACL 只能看「谁来了」,扩展 ACL 能看「谁从哪来、要去哪、干什么事」。
- 编号范围:100-199(扩展 IP ACL),2000-2699(扩展范围)
- 匹配粒度:细,支持五元组匹配
- 放置位置:尽量靠近源端,尽早过滤掉不需要的流量,节省网络带宽
# 扩展 ACL 配置示例(Cisco 设备)
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 80
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 443
access-list 100 deny ip any any
interface GigabitEthernet0/0
ip access-group 100 in
这段配置只允许内网用户访问外网的 HTTP(80)和 HTTPS(443)服务,其他所有流量全部拒绝。应用在接口的入方向。
我的习惯:只要条件允许,我优先用扩展 ACL。虽然配置起来比标准 ACL 多打几行命令,但匹配精度高,不容易误伤。尤其是做安全策略时,扩展 ACL 能精确到「只允许某台服务器访问某台数据库的 3306 端口」,这种粒度标准 ACL 根本做不到。
1.3.3 命名 ACL
命名 ACL 其实不是一种新的 ACL 类型,而是一种新的配置方式。它用名字代替编号,让 ACL 的用途一目了然。
- 支持标准和扩展 ACL 的所有功能
- 名字可以自定义,比如「BLOCK_OFFICE_NET」、「ALLOW_HR_SERVER」
- 可以删除单条规则,而编号 ACL 只能删除整个列表
# 命名 ACL 配置示例(Cisco 设备)
ip access-list extended BLOCK_P2P
deny tcp any any eq 6881
deny tcp any any eq 6889
permit ip any any
interface GigabitEthernet0/2
ip access-group BLOCK_P2P in
你看,名字叫「BLOCK_P2P」,一看就知道是封 BT 下载的。比记编号 101、102 强多了吧?
1.3.4 三种 ACL 对比
| 对比维度 | 标准 ACL | 扩展 ACL | 命名 ACL |
|---|---|---|---|
| 匹配依据 | 仅源 IP | 源 IP、目的 IP、协议、端口 | 同标准或扩展 |
| 编号/命名 | 1-99, 1300-1999 | 100-199, 2000-2699 | 自定义名称 |
| 配置复杂度 | 低 | 中高 | 中 |
| 推荐放置位置 | 靠近目的端 | 靠近源端 | 同标准或扩展 |
| 规则编辑灵活性 | 低(只能整表删除) | 低(只能整表删除) | 高(可增删单条) |
1.4 ACL 知识体系总览
下面这张图把 ACL 的核心概念、分类和应用场景串起来了。我建议你多看几遍,脑子里先搭个框架,后面学起来会轻松很多。
1.5 隐式拒绝规则
有个坑我必须提前跟你说。所有 ACL 的末尾都有一条隐式的 deny any。什么意思?就是你配的规则只写了允许哪些流量通过,没写的流量默认全部拒绝。
# 假设你只配了这条规则
access-list 10 permit 192.168.1.0 0.0.0.255
# 实际生效的是:
access-list 10 permit 192.168.1.0 0.0.0.255
access-list 10 deny any ← 这条是隐式的,你看不到但它存在
所以很多人刚学 ACL 时犯过一个错误:只写了允许规则,忘了写拒绝规则,结果发现所有流量都通了——不对,其实是隐式拒绝生效了,该通的没通。嗯,这里要注意:如果你想让所有未匹配的流量通过,必须在最后显式写一条 permit any any。
避坑指南:我曾经在割接时遇到过一个问题——新加了一条 ACL 后,某个业务突然中断了。排查了半天才发现,新 ACL 的隐式拒绝把之前放行的流量给拦了。从那以后,我每次配 ACL 都会在纸上先画一遍匹配顺序,确认没有遗漏。
1.6 本章小结
这一章咱们把 ACL 的底子打好了。你记住三件事:
- ACL 是顺序匹配的规则列表,命中即停止
- 标准 ACL 只看源 IP,扩展 ACL 看五元组,命名 ACL 是更灵活的配置方式
- 末尾永远有条隐式拒绝,别把它忘了
这些基础概念后面每一章都会用到。尤其是规则顺序和隐式拒绝,我敢说你以后工作中遇到的 ACL 故障,十有八九跟这两点有关。