eNSP实验——ACL访问控制列表
仅供参考
基础概念
一、ACL 简介
ACL(Access Control List)是网络设备(路由器/交换机/防火墙)上用于控制数据流进出的规则集合,类似于ACL就像网络设备的"守门员",通过定义决定哪些数据可以进出(允许Permit),哪些不能(拒绝Deny)规则,实现网络安全管控。
二、ACL 三大类型对比
1. ACL 分类
类型 | 配置编号 | 检查内容 | 用途场景 | 通俗比喻 |
---|---|---|---|---|
基本ACL | 2000-2999 | 只看源IP | 封禁黑客IP/允许内网访问 | 看身份证 |
高级ACL | 3000-3999 | 五元组 (IP+端口+协议) | 精准控制服务 (如只开放HTTP端口) | 安检机 (查人+行李+目的地) |
二层ACL | 4000-4999 | MAC地址/VLAN | 禁止陌生设备接入Wi-Fi | 车牌识别 |
2. 关键区别
- 基本ACL:
只管谁来的?
(源IP) - 高级ACL:
管谁?去哪?干啥?
(IP+端口+协议) - 二层ACL:
谁的网卡?在哪个VLAN?认设备不认人。
(MAC+VLAN)
严格顺序匹配:ACL规则按
rule ID
从小到大逐条匹配,命中第一条后立即生效,后续规则不再检查。
3. ACL 三大核心能力
作用 | 功能说明 | 生活例子 | 配置关键词 |
---|---|---|---|
保1安 | 封禁恶意IP/放行可信IP | 小区门禁:只允许业主进入 | deny/permit |
交警 | 控制流量走向(如分流视频会议) | 高德导航:为救护车规划快速路 | route-policy |
调度员 | 优先保障关键业务(如视频通话) | 机场VIP通道:优先登机 | QoS priority |
📌 一句话总结:ACL = 谁(IP/MAC) + 去哪(端口/协议) + 怎么管(允许/拒绝/优先)。
4. ACL 特性
类型 | 编号范围 | 检查内容 | 处理性能 | 生活化类比 | 典型应用场景 |
---|---|---|---|---|---|
基本ACL | 2000-2999 | 仅源IP | ⚡️ 超快 | 小区门禁(只查身份证) | IP黑名单/远程登录控制 |
高级ACL | 3000-3999 | 五元组(IP+端口+协议) | ⏱️ 中等 | 机场安检(查身份+行程+行李) | 服务级管控(如仅开放HTTP端口) |
二层ACL | 4000-4999 | MAC地址/VLAN | ⚠️ 较高时延 | 酒店房卡(只认门卡不认人) | IoT设备接入控制(MAC白名单) |
基本ACL快但功能单一,高级ACL全能却稍慢,二层ACL专攻MAC控制但时延高,按需选择才能精准管控。
三、ACL 的工作原理
1. 基本组成
- ACL 由 多条规则(Rule) 组成,每条规则相当于一个 “if-then” 判断语句。
- 规则按 从上到下顺序匹配,一旦匹配成功即执行动作(允许/拒绝),后续规则不再检查。
- 默认情况下,ACL 末尾隐含 “deny any”(未匹配任何规则时丢弃数据包)。
2. ACL 匹配逻辑流程图
1. 数据包到达设备(路由器/交换机)
↓
2. 检查ACL规则:
- 按顺序匹配规则1 → 规则2 → ... → 规则N
↓
3. 命中某条规则?
├─ 是 → 执行允许(permit)或拒绝(deny)动作,流程结束
└─ 否 → 继续匹配下一条规则
↓
4. 所有规则未匹配? → 执行默认拒绝(deny any)
3. 关键特点
- 精确控制:可限制访问时间、服务类型(如仅开放Web端口)。
- 方向性:需指定应用在接口的 入方向(inbound) 或 出方向(outbound)。
- 性能影响:规则越多,匹配耗时越长,可能影响网络延迟。
四、ACL 规则怎么执行
1. ACL 执行举例
ACL 是顺序执行的,匹配即停止,所以精确规则(如封禁某个IP)要放在宽松规则(如允许整个网段)前面,否则宽松规则会"提前截胡"。
- 严格顺序匹配:ACL 规则按编号从小到大检查,命中即停(类似考试“第一题答对就不看第二题”)。
- 默认拒绝所有:若ACL 规则未命中,默认拒绝流量(需手动添加
permit
放行)。
❗ 常见踩坑
❌ 错误写法:
acl 2000
rule 5 permit source 10.0.0.0 0.255.255.255 # 允许10网段
rule 10 deny source 10.0.0.5 0 # 想封禁10.0.0.5?无效!
➜ 问题原因:规则5已放行所有10.x.x.xIP(包括10.0.0.5),因此规则10永远不会被检查到。
✅ 正确写法:调换顺序,先deny
再permit
。
acl 2000
rule 5 deny source 10.0.0.0 0.0.0.0 # 先精确封禁10.0.0.0
rule 10 permit source 10.0.0.0 0.255.255.255 # 再放行整个10网段
➜ 关键原则:精确规则在前(如封禁单IP),宽松规则在后(如允许整个网段),顺序决定有效性。
2. ACL 规则类比
场景设定
假设机场有不同的通道,通道上有不同的检查点,每个检查点都有相应的指示牌,这些指示牌就相当于 ACL 中的规则。比如,有一个指示牌写着 “禁止携带红色行李箱进入候机厅”(类似 deny 规则),另一个指示牌写着 “允许携带其他颜色行李箱进入候机厅”(类似 permit 规则)。
# ACL规则顺序的机场安检类比
核心原则:规则顺序决定有效性(命中即停)
机场安检通道的指示牌相当于ACL规则:
- 🚫 "禁止红色行李箱" = `deny`规则
- ✅ "允许其他行李箱" = `permit`规则
| 正确顺序 ✔ | 错误顺序 ✘ |
|-------------------|-------------------|
| 1. 禁止红色行李箱 | 1. 允许所有行李箱 |
| 2. 允许其他行李箱 | 2. 禁止红色行李箱 |
| → 精准拦截 | → 拦截失效 |
ACL对应配置:
- "先精确拦截(deny),再宽松放行(permit)"
❌ 错误顺序:先 Permit(允许),再 Deny(禁止)
规则顺序:
- 允许所有行李箱进入候机厅(
permit any
) - 禁止红色行李箱进入候机厅(
deny red
)
执行过程:
- 旅客携带 红色行李箱 过来:
- 第 1 条规则(
permit any
)匹配成功,直接放行。 - 第 2 条规则(
deny red
)永远不会被检查。
- 第 1 条规则(
- 结果:红色行李箱仍然能进入,安检失效!
✅ 正确顺序:先 Deny(禁止),再 Permit(允许)
规则顺序:
- 禁止红色行李箱进入候机厅(
deny red
) - 允许其他颜色的行李箱进入候机厅(
permit any
)
执行过程:
- 旅客携带 红色行李箱 过来:
- 第 1 条规则(
deny red
)匹配,直接拦截。
- 第 1 条规则(
- 旅客携带 黑色行李箱 过来:
- 第 1 条规则(
deny red
)不匹配,继续检查第 2 条(permit any
),放行。
- 第 1 条规则(
- 结果:只有红色行李箱被禁止,其他行李箱正常通行。
1. 基础ACL:小区大门门禁
功能:只管"谁可以进小区"
检查内容:只看访客的身份证(源IP地址)
举例:
- 规则1:允许3栋业主进入(permit 192.168.3.0/24)
- 规则2:禁止快递员进入(deny 192.168.5.0/24)
特点:
- 简单粗暴,只认"脸"(源IP)
- 不关心进来后去哪栋楼、做什么
2. 高级ACL:物业前台登记系统
功能:精细管控"谁+去哪+做什么"
检查内容:访客身份证(源IP)+ 拜访楼栋(目的IP)+ 事由(端口/协议)
举例:
- 允许3栋业主(源IP)去会所(目的IP)健身(端口5000)
- 禁止所有人进入机房(目的IP)的运维端口(22)
特点:
- 像严格的前台登记,要查证件+访问目的
- 能精准控制到具体服务(如只开放网页访问)
3. 二层ACL:停车场车牌识别
功能:基于物理设备管控
检查内容:设备"车牌号"(MAC地址/VLAN)
举例:
- 只允许登记车辆(MAC白名单)进入地库
- 禁止外来电动车(未知MAC)连接充电桩
特点:
- 不认人(IP),只认车(物理设备)
- 常用于Wi-Fi接入、VLAN隔离等场景
五、 ACL 核心规则
1. 执行机制
🔢 顺序匹配
- 规则严格按ID从小到大检查
- 首条匹配后立即生效,后续规则跳过
- ▶️ 例:
rule 5
优先于rule 10
执行
2. 默认策略
🚫 全拒绝原则
- 所有ACL隐含最终
deny any
规则- 必须显式添加
permit
规则放行流量- ⚠️ 未匹配任何规则的数据包自动丢弃
规则语法:
# 编号小优先,没许可全拦,写规则要全
rule [ID] [permit/deny] [匹配条件]
# 示例:
# rule 5 permit source 192.168.1.0 0.0.0.255
# rule 10 permit source 192.168.1.0 0.0.0.255 # 放行192.168.1.0/24网段
# rule 20 deny source 10.1.1.1 0 # 封禁单个IP
反掩码计算:
反掩码 = 255.255.255.255 - 子网掩码
。
举例:
24位的反掩码 = 255.255.255.255 - 255.255.255.0 = 0.0.0.255
30位的反掩码 = 255.255.255.255 - 255.255.255.252 = 0.0.0.3
六、ACL 自定义配置
1. 创建 ACL
acl name <名称> <编号>
# 基本格式(二选一):
acl name <策略名称> <编号> # 命名方式(推荐)
acl number <编号> # 数字方式
# 示例:
acl name WEB_ACCESS 3001 # 创建名为 WEB_ACCESS 的 ACL
⚠️ 注意:编号范围必须匹配ACL类型(如基础ACL 2000-2999)
2. 添加规则
rule < ID > permit/deny …
rule <规则ID> <permit|deny> <协议> # 规则ID 越小,优先级越高
source <源IP> <反掩码> # 设置来源IP范围
[destination <目标IP> <反掩码>] # 设置目标IP(高级ACL才需要)
[destination-port eq <端口>] # 限制端口(如 80、443)
[time-range <时间段>] # 限制生效时间(可选)
[logging] # 记录日志(可选)
# 示例:(允许 192.168.1.0/24 访问 10.1.1.1 的 443 端口):
rule 10 permit tcp
source 192.168.1.0 0.0.0.255 # 允许 192.168.1.0/24 网段
destination 10.1.1.1 0 # 目标 IP 是 10.1.1.1
destination-port eq 443 # 仅允许 HTTPS(443 端口)
3. 设置反掩码
反掩码计算:
反掩码 = 255.255.255.255 - 子网掩码
。
反掩码 | 匹配范围 | 示例 |
---|---|---|
0.0.0.0 | 单个 IP(精确匹配) | 10.1.1.1 0 |
0.0.0.255 | /24 网段(最后匹配24位) | 192.168.1.0 0.0.0.255 |
0.0.255.255 | /16 网段(最后匹配16位) | 172.16.0.0 0.0.255.255 |
0.255.255.255 | /8 网段 | 10.0.0.0 0.255.255.255 |
4. 应用ACL
traffic-filter
inbound
/outbound
acl <名称>
入口方向:inbound
/ 出口方向:outbound
# 进入接口配置模式:
interface <接口名称> # 如 GigabitEthernet0/0/1
# 在入方向(inbound)或出方向(outbound)应用 ACL:
traffic-filter inbound acl <ACL名称或编号> # 控制进入设备的流量方向
traffic-filter outbound acl <ACL名称或编号> # 控制离开设备的流量方向
七、 ACL 出入口方向选择和核心原则
选择ACL的绑定接口和方向(inbound/outbound)需综合考虑 流量路径、过滤精度 和 设备性能。以下是具体决策方法:
1. 核心原则:靠近流量源 + 出方向优先
“出向省带宽,入向保安全;近源用出向,近靶用入向;双向配合用,审计不能忘。”
[源设备] → (outbound ACL 拦截) → [网络核心] → (inbound ACL 保护) → [目标服务器]
"靠近源端控制出向(outbound),靠近目标端控制入向(inbound)"
场景 | 推荐方向 | 应用位置 | 优势 |
---|---|---|---|
限制源设备访问权限 | outbound | 离源最近的三层设备出口 | 最早丢弃无效流量,节省核心链路带宽 |
保护目标网络/服务 | inbound | 离目标最近的三层设备入口 | 确保非法流量不进入目标网络 |
简单封禁源IP(基础ACL) | inbound | 任意三层设备入口 | 只能基于源IP过滤 |
2. 方向选择的底层逻辑
方向 | 处理阶段 | 过滤时机 | 资源消耗 |
---|---|---|---|
inbound | 数据包进入设备后 | 接收完整个帧再决策 | 较高(消耗接收缓冲资源) |
outbound | 数据包离开设备前 | 路由查询后立即过滤 | 较低(节省转发资源) |
高级决策因素
考量维度 | 出向优势 | 入向优势 |
---|---|---|
带宽效率 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
安全性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
配置灵活性 | ⭐⭐ | ⭐⭐⭐⭐ |
设备负载 | ⭐⭐⭐⭐ | ⭐⭐ |
实验环境
拓扑图
设备信息划分
设备名称 | 接口地址 | IP 地址 | 所属网络 |
---|---|---|---|
Server1 | Ethernet0/0/0 | 192.168.100.1 | 192.168.100.0/24 |
AR1 | GE0/0/0 | 192.168.100.254 | 192.168.100.0/24 |
GE0/0/1 | 10.1.1.2 | 10.1.1.0/30 | |
AR2 | GE0/0/1 | 10.1.1.1 | 10.1.1.0/30 |
GE0/0/2 | 11.1.1.1 | 11.1.1.0/30 | |
GE0/0/0 | 12.1.1.1 | 12.1.1.0/30 | |
AR3 | GE0/0/2 | 11.1.1.2 | 11.1.1.0/30 |
GE0/0/1 | 192.168.3.254 | 192.168.3.0/24 | |
AR4 | GE0/0/0 | 12.1.1.2 | 12.1.1.0/30 |
GE0/0/1 | 192.168.1.254 | 192.168.1.0/24 | |
GE0/0/2 | 192.168.2.254 | 192.168.2.0/24 | |
SW1 | Ethernet0/0/2 | - | - |
Ethernet0/0/3 | - | - | |
PC1 | Ethernet0/0/1 | 192.168.1.1 | 192.168.1.0/24 |
PC2 | Ethernet0/0/1 | 192.168.2.2 | 192.168.2.0/24 |
PC3 | Ethernet0/0/1 | 192.168.3.1 | 192.168.3.0/24 |
PC4 | Ethernet0/0/1 | 192.168.3.2 | 192.168.3.0/24 |
在做 ACL 访问控制列表之前,PC1是能和PC2、PC3、PC4、Server1 都能进行这一个通信,全网互通。
备注:环境配置命令在最后
拓扑图环境的配置命令
备注:这里参照上面拓扑图做的,只用了OSPF单区域
1. AR1 路由器配置
[Huawei]sy R1
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip ad
[R1-GigabitEthernet0/0/0]ip address 192.168.100.254 24
[R1-GigabitEthernet0/0/0]q
[R1]
[R1]
[R1]int g0/0/1
[R1-GigabitEthernet0/0/1]ip ad
[R1-GigabitEthernet0/0/1]ip address 10.1.1.2 30
[R1-GigabitEthernet0/0/1]q
[R1]
[R1]ospf 1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]netw
[R1-ospf-1-area-0.0.0.0]network 192.168.100.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]netw
[R1-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.3
[R1-ospf-1-area-0.0.0.0]
2. AR2 路由器配置
[Huawei]sy R2
[R2]
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip address 12.1.1.1 30
[R2-GigabitEthernet0/0/0]q
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]ip address 10.1.1.1 30
[R2-GigabitEthernet0/0/1]q
[R2]int g0/0/2
[R2-GigabitEthernet0/0/2]ip address 11.1.1.1 30
[R2-GigabitEthernet0/0/2]q
[R2]
[R2]ospf 1
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]netw
[R2-ospf-1-area-0.0.0.0]network 10.1.1.0 0.0.0.3
[R2-ospf-1-area-0.0.0.0]netw
[R2-ospf-1-area-0.0.0.0]network 11.1.1.0 0.0.0.3
[R2-ospf-1-area-0.0.0.0]netw
[R2-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.3
[R2-ospf-1-area-0.0.0.0]
3. AR3 路由器配置
[Huawei]sy R3
[R3]
[R3]int g0/0/1
[R3-GigabitEthernet0/0/1]ip address 192.168.3.254 24
[R3-GigabitEthernet0/0/1]q
[R3]
[R3]int g0/0/2
[R3-GigabitEthernet0/0/2]ip address 11.1.1.2 30
[R3-GigabitEthernet0/0/2]q
[R3]
[R3]ospf 1
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]netw
[R3-ospf-1-area-0.0.0.0]network 11.1.1.0 0.0.0.3
[R3-ospf-1-area-0.0.0.0]netw
[R3-ospf-1-area-0.0.0.0]network 192.168.3.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]q
[R3]
4. AR4 路由器配置
[Huawei]sy R4
[R4]
[R4]
[R4]int g0/0/1
[R4-GigabitEthernet0/0/1]ip ad
[R4-GigabitEthernet0/0/1]ip address 192.168.1.254 24
[R4-GigabitEthernet0/0/1]q
[R4]
[R4]int g0/0/2
[R4-GigabitEthernet0/0/2]ip ad
[R4-GigabitEthernet0/0/2]ip address 192.168.2.254 24
[R4-GigabitEthernet0/0/2]q
[R4]
[R4]int g0/0/0
[R4-GigabitEthernet0/0/0]ip address 12.1.1.2 30
[R4]ospf
[R4-ospf-1]a
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]netw
[R4-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]netw
[R4-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]netw
[R4-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]q
[R4-ospf-1]q
[R4]q
ACL 配置
备注:创建ACL及rule规则后,它是不会直接生效的,设备之间通信依然不变,需要把这个编号应用绑到设备的接口的出入方向才会生效!!!(这里仅做部分ACL配置)
1. 禁止 192.168.1.0/24 和 192.168.2.0/24 网段通信
接口的入口方向绑定 ACL 规则更好 。当数据包从各自网段进入路由器时,就能立即被检查和过滤。比如从 PC1 网段发往 PC2 网段的数据包,在进入 GigabitEthernet 0/0/1 接口时就被拦截,避免路由器对无效数据包进行不必要的内部转发处理,提升网络效率,也能更精准地控制非法流量进入网络。
[R4]acl
[R4]acl number 3001 # 创建高级ACL 3001(3000系列ACL可匹配源/目的IP、协议、端口)
[R4-acl-adv-3001]rule deny ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255 # 规则1:禁止192.168.1.0/24访问192.168.2.0/24(双向阻断)
[R4-acl-adv-3001]rule deny ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255 # 规则2:禁止192.168.2.0/24访问192.168.1.0/24(实现双向隔离)
[R4-acl-adv-3001]q
[R4]
[R4]int g0/0/1 # 此接口连接192.168.1.0/24网络
[R4-GigabitEthernet0/0/1]traffic-filter inbound acl 3001 # 配置ACL 3001 在入方向过滤数据包
[R4-GigabitEthernet0/0/1]
[R4-GigabitEthernet0/0/1]int g0/0/2 # 此接口连接192.168.2.0/24网络
[R4-GigabitEthernet0/0/2]traffic-filter inbound acl 3001 # 配置ACL 3001 在入方向过滤数据包
[R4-GigabitEthernet0/0/2]
测试
可以看到PC1除了PC2不能进行通信,PC1还是可以和其他主机通信。
2. 禁止192.168.3.2 访问 192.168.1.0/24 网段
禁止 192.168.3.2 主机访问192.168.1.0/24网段
[R3]acl
[R3]acl number 3002 # 创建ACL 3002
[R3-acl-adv-3002]rule deny ip source 192.168.3.2 0 destination 192.168.1.0 0.0.0.255 # 拒绝来自192.168.3.2访问192.168.1.0/24网段的所有IP流量
[R3-acl-adv-3002]q
[R3]
[R3]int g0/0/1
[R3-GigabitEthernet0/0/1]taff
[R3-GigabitEthernet0/0/1]traffic-filter inbound acl 3002 # 将ACL 3002应用到接口的入方向(inbound)
[R3-GigabitEthernet0/0/1]q
[R3]
[R3]
测试
这里可以看到192.168.3.1的主机仍然可以和192.168.1.1的主机通信,但是192.168.3.2的主机已经不能和PC1(192.168.1.1)通信了
3. 只允许192.168.2.0/24和192.168.3.0/24两个网段和server1服务器通信
# AR2
[R1]acl
[R1]acl number 3003
[R1-acl-adv-3003]rule
[R1-acl-adv-3003]rule permit ip source 192.168.2.0 0.0.0.255 destination 192.168.100.1 0
[R1-acl-adv-3003]rule permit ip source 192.168.3.0 0.0.0.255 destination 192.168.100.1 0
[R1-acl-adv-3003]rule deny ip source any destination 192.168.100.1 0
[R1-acl-adv-3003]q
[R1]
[R1]int g0/0/1
[R1-GigabitEthernet0/0/1]
[R1-GigabitEthernet0/0/1]traffic-filter inbound acl 3003
[R1-GigabitEthernet0/0/1]q
[R1]
测试
这里只有PC1不能和server1通信