Skip to content

ACL (访问控制列表)

1. ACL 基础

1.1 什么是 ACL?

想象一下,ACL (Access Control List) 就像一个网络设备(如路由器或防火墙)的“保安”或“门卫”。这位保安手上拿着一份清单(就是 ACL 规则),上面详细记录了“谁”(源地址)、要去“哪里”(目的地址)、想做“什么事”(协议和端口)。

当数据包(访问请求)到达时,保安会从上到下逐条核对清单:

  • 如果某条规则明确允许(permit)这个请求,保安就立刻放行,不再看后面的规则。
  • 如果某条规则明确拒绝(deny),保安就立刻拦截,同样不再看后面的规则。
  • 如果清单从头看到尾,都没有一条能匹配上,保安会执行默认的“潜规则”:拒绝所有未被明确允许的请求

通过这种方式,ACL 成为了网络流量控制和安全策略实施的基本工具。

1.2 ACL 的核心功能

  1. 流量过滤 (Filter)

    • 数据包过滤:这是 ACL 最常见的用途。根据源 IP、目的 IP、端口号等条件允许或拒绝数据包通过接口。
    • 控制平面保护:限制哪些 IP 可以 Telnet/SSH 到设备上进行管理。
  2. 流量匹配 (Match)

    • 作为其他工具的“分类器”。例如,在 NAT 中匹配哪些内网 IP 需要转换,或在 QoS 中匹配哪些流量需要优先转发。
    • 注意:在匹配场景下,permit 意味着“抓取该流量”,deny 意味着“忽略该流量”。

2. ACL 的工作原理

2.1 匹配机制:三大黄金准则

  1. 自顶向下,顺序匹配:规则按 rule-id 从小到大依次检查。
  2. 一旦匹配,立即停止:只要命中任何一条 permitdeny,就不再继续匹配后续规则。
  3. 末尾隐含拒绝:如果所有规则都没匹配上,默认执行 deny
    • 干货提示:如果你的 ACL 只有 deny 规则,记得最后加一条 rule permit ip,否则所有流量都会被拦截!

2.2 可视化匹配流程

下面的动画演示了一个数据包如何通过 ACL 的检查过程。

ACL 匹配引擎模拟
IP PacketSrc: 192.168.1.50Proto: ICMP
Rule 5
deny tcp source 192.168.1.10 0
Rule 10
permit ip source 192.168.1.0 0.0.0.255
Implicit
deny any
等待指令...

2.3 通配符掩码 (Wildcard Mask) 深度解析

通配符掩码用于决定 IP 地址的哪些位需要匹配。

  • 0:表示“必须匹配”。
  • 1:表示“忽略匹配”(任意)。

💡 通配符 vs 子网掩码

  • 子网掩码1 是网络位,0 是主机位,且 1 必须连续。
  • 通配符掩码0 是检查位,1 是忽略位,且 1 可以不连续

进阶干货:奇偶 IP 匹配

如果你想在一跳 ACL 中匹配某个网段内所有的“奇数 IP”地址:

  • 前缀192.168.1.1
  • 通配符0.0.0.254 (二进制 11111110)
  • 原理:通配符最后一位是 0,强制检查 IP 的最后一位。由于前缀最后一位是 1,所以只有末尾为 1 的 IP(奇数)才能匹配。

3. ACL 的部署与配置

3.1 部署原则:位置决定性能

ACL 应该应用在接口的什么位置?这里有一个工业界的“八字真言”:

  • 高级 ACL:靠近源端。因为它可以精确区分流量,及早拦截不合规报文可以节省网络带宽和路由器 CPU。
  • 基本 ACL:靠近目的端。因为基本 ACL 只看源 IP,如果在源端拦截,可能会导致该源 IP 无法访问该接口下的所有其他合法业务。

3.2 典型拓扑场景

研发部 (Inside)
192.168.1.0/24
服务器区 (DMZ)
192.168.2.0/24
💻
PC-研发部192.168.1.10
Core Router
G0/0/1 (.1.254)G0/0/2 (.2.254)
🛡️
ACL 3000 (Inbound)
🗄️
核心服务器192.168.2.100

3.3 实战配置步骤

  1. 定义规则:拒绝 Telnet,允许其他 IP 流量。
Router Console
[Router] acl 3000
# 拒绝来自 1.0 网段访问 2.100 的 TCP 23 端口
[Router-acl-adv-3000] rule 5 deny tcp source 192.168.1.0 0.0.0.255 destination 192.168.2.100 0 destination-port eq 23
# 放行其他所有 IP 流量
[Router-acl-adv-3000] rule 100 permit ip
  1. 应用到接口
Router Console
[Router] interface GigabitEthernet 0/0/1
# 在流量进入设备的接口方向应用
[Router-GigabitEthernet0/0/1] traffic-filter inbound acl 3000

4. ACL 与报文结构

高级 ACL 能够实现精细化控制,是因为它深入检查了数据包的头部字段:

IP Header
Version4
Protocol6 (TCP)
Source IP192.168.1.10
Destination IP192.168.2.100
TCP Header
Source Port49152
Dest Port23 (Telnet)
FlagsSYN

5. 总结与排坑指南

  • Rule ID 步长:华为默认步长为 5(rule 5, 10, 15...),目的是为了方便在规则中间插入新条目。
  • 不生效?:检查 traffic-filter 的方向(inbound/outbound)是否搞反。
  • Telnet 依然能通?:ACL 对设备自发出的流量(Originate)无效,只对穿越流量(Transit)生效。