第39篇:ACL 基础——标准 ACL 与扩展 ACL
一、写在前面
ACL(Access Control List,访问控制列表) 是网络设备上过滤流量的基本工具。
你可以把 ACL 想象成"门禁系统": - 门禁有一个名单(ACL 规则) - 每个人(数据包)来了,检查是否符合名单上的规则 - 符合规则就放行(permit)或拦截(deny)
ACL 是网络安全和流量控制的第一道防线,也是配置 NAT、策略路由、QoS 等功能的基础。
二、ACL 的基本概念
2.1 ACL 做什么?
| 用途 | 说明 |
|---|---|
| 流量过滤 | 允许或拒绝特定流量通过 |
| NAT 匹配 | 哪些内网 IP 需要做 NAT |
| 策略路由匹配 | 哪些流量走策略路由 |
| QoS 分类 | 对特定流量做优先级标记 |
| 防火墙策略 | 基础包过滤 |
2.2 ACL 的组成
每条 ACL 由多条规则(Rule) 组成,从上到下顺序匹配。
acl 3000
rule 5 deny ip source 10.0.1.0 0.0.0.255 destination 10.0.2.0 0.0.0.255
rule 10 permit ip
三、ACL 的分类
华为设备中 ACL 按编号范围和功能分类:
| ACL 类型 | 编号范围 | 匹配条件 |
|---|---|---|
| 基本 ACL(标准 ACL) | 2000~2999 | 源 IP 地址 |
| 高级 ACL(扩展 ACL) | 3000~3999 | 源 IP、目的 IP、协议类型、端口号 |
| 二层 ACL | 4000~4999 | 源 MAC、目的 MAC、二层协议类型 |
| 用户自定义 ACL | 5000~5999 | 用户自定义报文偏移量 |
最常用的是基本 ACL(2000~2999)和高级 ACL(3000~3999)。
四、标准 ACL(基本 ACL)
4.1 特点
只能匹配源 IP 地址
acl 2000
rule 5 permit source 10.0.1.0 0.0.0.255
rule 10 deny source any
4.2 通配符掩码
标准 ACL 使用通配符掩码(Wildcard Mask) 来匹配 IP 范围:
| 通配符 | 含义 |
|---|---|
0.0.0.0 |
精确匹配(匹配单个 IP) |
0.0.0.255 |
匹配最后 8 位任意(C 类网段) |
0.0.255.255 |
匹配最后 16 位任意(B 类网段) |
255.255.255.255 |
匹配所有 IP(any) |
通配符 vs 子网掩码:
子网掩码:255.255.255.0 → 网络位为 1,主机位为 0
通配符掩码:0.0.0.255 → 严格位为 0,任意位为 1
两者完全反着!
4.3 标准 ACL 配置示例
需求:只允许 10.0.1.0/24 网段的流量通过,拒绝其他。
[R1] acl 2000
[R1-acl-basic-2000] rule 5 permit source 10.0.1.0 0.0.0.255
[R1-acl-basic-2000] rule 10 deny source any
[R1-acl-basic-2000] quit
# 应用在接口出方向
[R1] interface gigabitethernet 0/0/1
[R1-GigabitEthernet0/0/1] traffic-filter outbound acl 2000
五、扩展 ACL(高级 ACL)
5.1 特点
可以匹配:
源 IP、目的 IP
IP 协议类型(TCP/UDP/ICMP/OSPF 等)
源端口、目的端口
TCP 标志位(SYN/ACK/FIN)
DSCP 优先级
...
5.2 配置语法
rule [编号] {permit|deny} {协议}
source {源IP} {通配符} [源端口]
destination {目的IP} {通配符} [目的端口]
5.3 扩展 ACL 配置示例
示例 1:禁止从 10.0.1.0/24 访问 10.0.2.100 的 Web 服务
[R1] acl 3000
[R1-acl-adv-3000] rule 5 deny tcp source 10.0.1.0 0.0.0.255 destination 10.0.2.100 0 eq 80
[R1-acl-adv-3000] rule 10 permit ip
[R1-acl-adv-3000] quit
[R1] interface gigabitethernet 0/0/1
[R1-GigabitEthernet0/0/1] traffic-filter inbound acl 3000
示例 2:只允许特定主机 ping 服务器
[R1] acl 3001
[R1-acl-adv-3001] rule 5 permit icmp source 10.0.1.100 0 destination 10.0.2.100 0
[R1-acl-adv-3001] rule 10 deny icmp source any destination 10.0.2.100 0
[R1-acl-adv-3001] rule 15 permit ip
示例 3:禁止 FTP 访问(TCP 20/21 端口)
[R1] acl 3002
[R1-acl-adv-3002] rule 5 deny tcp source any destination 10.0.2.0 0.0.0.255 range 20 21
[R1-acl-adv-3002] rule 10 permit ip
六、标准 ACL vs 扩展 ACL 对比
| 对比项 | 标准 ACL(2000~2999) | 扩展 ACL(3000~3999) |
|---|---|---|
| 匹配条件 | 仅源 IP | 源/目的 IP、协议、端口 |
| 粒度 | 粗 | 细 |
| 规则条数 | 少 | 可很多 |
| 配置复杂度 | 简单 | 较复杂 |
| 性能 | 好 | 稍差(匹配项多) |
| 推荐度 | 简单过滤场景 | 推荐使用 |
七、ACL 的应用方向
7.1 接口方向
inbound:流量进入接口时匹配
outbound:流量从接口发出时匹配
[R1-GigabitEthernet0/0/1] traffic-filter inbound acl 3000
[R1-GigabitEthernet0/0/1] traffic-filter outbound acl 2000
7.2 应用位置的选择
inbound 过滤(推荐):
流量一进接口就过滤 → 节省 CPU 处理后续流程
outbound 过滤:
流量已经过路由查表后才过滤 → 允许更多控制
但不需要的流量也走了路由表 → 浪费 CPU
八、查看 ACL
# 查看所有 ACL
[R1] display acl all
Total non-default ACLs: 2
ACL 2000, 2 rules
ACL 3000, 8 rules
# 查看指定 ACL
[R1] display acl 3000
ACL 3000, advanced, 3 rules
Rule 5 deny tcp source 10.0.1.0 0.0.0.255 destination 10.0.2.100 0 eq 80
Rule 10 deny tcp source 10.0.1.0 0.0.0.255 destination 10.0.2.100 0 eq 443
Rule 15 permit ip
九、常见配置错误
| 错误 | 后果 | 正确做法 |
|---|---|---|
| 忘了配 permit ip any | 所有流量都被 deny | 检查最后一条规则,是否允许其他流量 |
| 通配符写反(写了子网掩码) | 匹配不到想要的流量 | 记住通配符与子网掩码相反 |
| 顺序配反 | 规则被提前命中 | 精确的规则放前面,宽泛的放后面 |
| 没应用到接口 | ACL 配了但不生效 | 必须应用到接口(traffic-filter) |
| inbound/outbound 方向选错 | 流量被意外过滤 | 确认流量方向和 ACL 方向匹配 |
十、思考
- 标准 ACL(2000~2999)能匹配哪些条件?扩展 ACL 能多匹配哪些?
- 通配符掩码 0.0.0.255 表示匹配什么范围?如果要匹配 192.168.0.0/16 应该用什么通配符?
- traffic-filter 在接口的 inbound 方向和 outbound 方向有什么区别?
- 配置 ACL 忘记配最后一条 permit ip 会导致什么后果?
- 写一条 ACL 规则:允许 10.0.1.0/24 访问 10.0.2.100 的 HTTP 服务(TCP 80),拒绝其他。
- ACL 编号 2000 和 3000 分别是什么类型的 ACL?如果在 2000 中配置了目的 IP 的条件,会怎样?
下篇预告:第40篇《ACL匹配顺序_配置顺序vs自动排序》——理解ACL匹配顺序的两种模式及其对策略的影响。