Network系列:ACL原理及其配置(五)
ACL原理及其配置
1. ACL概述
- ACL(Access Control List,访问控制列表)是由一系列permit或deny语句组成的、有序的规则集合,它通过匹配报文的相关字段实现对报文的分类。
- ACL本身只是一组规则,只能区分某一类报文,换句话说,ACL更像是一个工具,当我们希望通过ACL来实现针对特定流量的过滤时,就需要在适当的应用中调用已经定义好的ACL。
- ACL是一个使用非常广泛的工具,能够在多种场景下被调用。
主要作用
ACL是能够匹配一个IP数据包中的源IP地址、目的IP地址、协议类型、源目的端口等元素的基础性工具;ACL还能够用于匹配路由条目。
通过ACL可以实现对网络中报文流的精确识别和控制,达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的,从而切实保障网络环境的安全性和网络服务质量的可靠性。
2. ACL的主要使用场景
- 被流量策略调用,用于过滤流量(可基于源、目的IP地址、协议类型、端口号等元素);
- 在route-policy中被调用,用于匹配特定的路由前缀,从而执行路由策略;
- 在VPN中调用,用于匹配感兴趣数据流;
- 在防火墙的策略部署中调用,用于匹配流量;
- 其他……。
3. ACL的组成
3.1 组成部分详解
ACL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。
ACL编号:在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的ACL编号范围不同。
规则:前面提到了,一个ACL通常由若干条“permit/deny”语句组成,每条语句就是该ACL的一条规则。
规则编号:每条规则都有一个相应的编号,称为规则编号,用来标识ACL规则。可以自定义,也可以系统自动分配。ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。
动作:每条规则中的permit或deny,就是与这条规则相对应的处理动作。permit指“允许”,deny指“拒绝”,但是ACL一般是结合其他技术使用,不同的场景,处理动作的含义也有所不同。
匹配项:ACL定义了极其丰富的匹配项。例子中体现的源地址,ACL还支持很多其他规则匹配项。例如,二层以太网帧头信息(如源MAC、目的MAC、以太帧协议类型)、三层报文信息(如目的地址、协议类型)以及四层报文信息(如TCP/UDP端口号)等。
3.2 规则编号
Tips:设置一定长度的步长的作用,是方便后续在旧规则之间插入新的规则,可以修改默认步长。
3.3 通配符
- 通配符是一个32比特长度的数值,用于指示IP地址中,哪些比特位需要严格匹配,哪些比特位无需匹配。
- 通配符通常采用类似网络掩码的点分十进制形式表示,但是含义却与网络掩码完全不同。
- 匹配规则:“0”表示“匹配”;“1”表示“随机分配”
具体看下这2条规则:
- rule 5: 拒绝源IP地址为10.1.1.1报文通过——因为通配符为全0,所以每一位都要严格匹配,因此匹配的是主机IP地址10.1.1.1;
- rule 15:允许源IP地址为10.1.1.0/24网段地址的报文通过——因为通配符:0.0.0.11111111,后8位为1,表示不关心,因此10.1.1.xxxxxxxx 的后8位可以为任意值,所以匹配的是10.1.1.0/24网段。
如果匹配192.168.1.0/24这个子网中的奇数IP地址,例如192.168.1.1、192.168.1.3、192.168.1.5等。
3.4 分类和标识
基于ACL规则定义方式的分类
分类 | 编号范围 | 规则定义描述 |
---|---|---|
基本ACL | 2000~2999 | 仅使用报文的源IP地址、分片信息和生效时间段信息来定义规则。 |
高级ACL | 3000~3999 | 可使用IPv4报文的源IP地址、目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口号、UDP源/目的端口号、生效时间段等来定义规则。 |
二层ACL | 4000~4999 | 使用报文的以太网帧头信息来定义规则,如根据源MAC地址、目的MAC地址、二层协议类型等。 |
用户自定义ACL | 5000~5999 | 使用报文头、偏移位置、字符串掩码和用户自定义字符串来定义规则。 |
用户ACL | 6000~6999 | 既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的IP地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。 |
基于ACL标识方法的分类
分类 | 规则定义描述 |
---|---|
数字型ACL | 传统的ACL标识方法。创建ACL时,指定一个唯一的数字标识该ACL。 |
命名型ACL | 通过名称代替编号来标识ACL。 |
3.5 ACL的匹配机制
匹配流程
- 如果ACL不存在,则返回ACL匹配结果为:不匹配。
- 如果ACL存在,则查找设备是否配置了ACL规则。
- 如果规则不存在,则返回ACL匹配结果为:不匹配。
- 如果规则存在,则系统会从ACL中编号最小的规则开始查找。
- 如果匹配上了permit规则,则停止查找规则,并返回ACL匹配结果为:匹配(允许)。
- 如果匹配上了deny规则,则停止查找规则,并返回ACL匹配结果为:匹配(拒绝)。
- 如果未匹配上规则,则继续查找下一条规则,以此循环。如果一直查到最后一条规则,报文仍未匹配上,则返回ACL匹配结果为:不匹配。
Tips:不存在ACL,或ACL中无规则,再或者在ACL中遍历了所有规则都没有找到符合匹配条件的规则。以上三种情况,都叫做“不匹配”。
ACL的匹配机制概括来说就是:
- 配置ACL的设备接收报文后,会将该报文与ACL中的规则逐条进行匹配,如果不能匹配上,就会继续尝试去匹配下一条规则。
- 一旦匹配上,则设备会对该报文执行这条规则中定义的处理动作,并且不再继续尝试与后续规则匹配。
3.6 ACL的匹配位置
4. 配置案例
基本ACL配置示例
初始情况下PC1及PC2都能够访问Server。现在在GW的接口上应用ACL,使得PC2无法访问Server,而其他用户都能够访问Server。
在R1上进行配置
acl number 2000
rule 5 deny source 192.168.2.1 0
rule 10 permit source any
interface GigabitEthernet0/0/0
traffic-filter outbound acl 2000