ACL (访问控制列表)
1. ACL 基础
1.1 什么是 ACL?
想象一下,ACL (Access Control List) 就像一个网络设备(如路由器或防火墙)的“保安”或“门卫”。这位保安手上拿着一份清单(就是 ACL 规则),上面详细记录了“谁”(源地址)、要去“哪里”(目的地址)、想做“什么事”(协议和端口)。
当数据包(访问请求)到达时,保安会从上到下逐条核对清单:
- 如果某条规则明确允许(
permit)这个请求,保安就立刻放行,不再看后面的规则。 - 如果某条规则明确拒绝(
deny),保安就立刻拦截,同样不再看后面的规则。 - 如果清单从头看到尾,都没有一条能匹配上,保安会执行默认的“潜规则”:拒绝所有未被明确允许的请求。
通过这种方式,ACL 成为了网络流量控制和安全策略实施的基本工具。
1.2 ACL 的核心功能
流量过滤 (Filter):
- 数据包过滤:这是 ACL 最常见的用途。根据源 IP、目的 IP、端口号等条件允许或拒绝数据包通过接口。
- 控制平面保护:限制哪些 IP 可以 Telnet/SSH 到设备上进行管理。
流量匹配 (Match):
- 作为其他工具的“分类器”。例如,在 NAT 中匹配哪些内网 IP 需要转换,或在 QoS 中匹配哪些流量需要优先转发。
- 注意:在匹配场景下,
permit意味着“抓取该流量”,deny意味着“忽略该流量”。
2. ACL 的工作原理
2.1 匹配机制:三大黄金准则
- 自顶向下,顺序匹配:规则按
rule-id从小到大依次检查。 - 一旦匹配,立即停止:只要命中任何一条
permit或deny,就不再继续匹配后续规则。 - 末尾隐含拒绝:如果所有规则都没匹配上,默认执行
deny。- 干货提示:如果你的 ACL 只有
deny规则,记得最后加一条rule permit ip,否则所有流量都会被拦截!
- 干货提示:如果你的 ACL 只有
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 实战配置步骤
- 定义规则:拒绝 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
- 应用到接口:
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)生效。