
一、ACL简介
访问控制列表ACL(Access Control List)是由一系列规则组成的集合,ACL通过这些规则对报文进行分类,从而使设备可以对不同类报文进行不同的处理。
网络中的设备相互通信时,需要保障网络传输的安全可靠和性能稳定。例如:
1、防止对网络的攻击,例如IP(Internet Protocol)报文、TCP(Transmission Control Protocol)报文、ICMP(Internet Control Message Protocol)报文的攻击。
2、对网络访问行为进行控制,例如企业网中内、外网的通信,用户访问特定网络资源的控制,特定时间段内允许对网络的访问。
3、限制网络流量和提高网络性能,例如限定网络上行、下行流量的带宽,对用户申请的带宽进行收费,保证高带宽网络资源的充分利用。
ACL的出现,有效地解决了上述问题,切实保障了网络传输的稳定性和可靠性。
二、ACL原理
ACL负责管理用户配置的所有规则,并提供报文匹配规则的算法。
每个ACL作为一个规则组,可以包含多个规则。
规则通过规则ID(rule-id)来标识,规则ID可以由用户进行配置,也可以由系统自动根据步长生成。
一个ACL中所有规则均按照规则ID从小到大排序。
规则ID之间会留下一定的间隔。如果不指定规则ID时,具体间隔大小由“ACL的步长”来设定。
例如步长设定为5,ACL规则ID分配是按照5、10、15……来分配的。如果步长值是2,自动生成的规则ID从2开始。用户可以根据规则ID方便地把新规则插入到规则组的某一位置。
报文到达设备时,设备从报文中提取信息,并将该信息与ACL中的规则进行匹配,只要有一条规则和报文匹配,就停止查找,称为命中规则。查找完所有规则,如果没有符合条件的规则,称为未命中规则。
ACL的规则分为“permit”(允许)规则和“deny”(拒绝)规则。
综上所述,ACL可以将报文分成三类:
1、命中“permit”规则的报文
2、命中“deny”规则的报文
3、未命中规则的报文
对于这三类报文的处理方式,各个特性不同,具体请见后面详解。
目前设备支持的ACL,有以下两种实现方式。
1、软件ACL:
针对与本机交互的报文(必须上送CPU处理的报文),由软件实现来匹配报文的ACL,比如FTP、TFTP、Telnet、SNMP、HTTP、路由协议、组播协议中引用的ACL。
2、硬件ACL:
针对所有报文(一般是针对转发的数据报文),通过下发硬件ACL资源来匹配报文的ACL,比如流策略、基于ACL的简化流策略、自反ACL、用户组以及为接口收到的报文添加外层Tag功能中引用的ACL。
软件acl和硬件acl的主要区别在于:
1、处理不同的报文类型。
2、软件acl前者由软件实现;硬件acl由硬件实现。通过软件acl匹配报文时,会消耗CPU资源,通过硬件acl匹配报文时则会占用硬件资源。硬件acl匹配报文的速度更快。
4、ACL的分类
ACL的类型根据不同的划分规则可以有不同的分类。例如:
按照创建ACL时的命名方式分为数字型ACL和命名型ACL:
创建ACL时指定一个编号,称为数字型ACL。
编号为ACL功能的标示。
例如2000~2999为基本ACL,3000~3999为高级ACL。
创建ACL时指定一个名称,称为命名型ACL。
ACL的功能分类,请参见下表1:
分类 |
适用的IP版本 |
功能介绍 |
说明 |
基本ACL |
IPv4 |
可使用IPv4报文的源IP地址、分片标记和时间段信息来定义规则。 |
基本IPv4 ACL简称基本ACL。编号范围为2000~2999。 |
高级ACL |
IPv4 |
既可使用IPv4报文的源IP地址,也可使用目的地址、IP优先级、ToS、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP(User Datagram Protocol)源端口/目的端口号等来定义规则。 |
高级IPv4 ACL简称高级ACL。编号范围为3000~3999。 |
二层ACL |
IPv4&IPv6 |
可根据报文的以太网帧头信息来定义规则,如根据源MAC(Media Access Control)地址、目的MAC地址、以太帧协议类型等。 |
编号范围为4000~4999。 |
用户自定义ACL |
IPv4&IPv6 |
可根据偏移位置和偏移量从报文中提取出一段内容进行匹配。 |
编号范围为5000~5999。 |
用户ACL |
IPv4 |
既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。 |
编号范围为6000~6999。 |
基本ACL6 |
IPv6 |
可使用IPv6报文的源IP地址、分片标记和时间段信息来定义规则。 |
基本IPv6 ACL简称基本ACL6。编号范围为2000~2999。 |
高级ACL6 |
IPv6 |
可以使用IPv6报文的源地址、目的地址、IP承载的协议类型、针对协议的特性(例如TCP的源端口、目的端口、ICMPv6协议的类型、ICMPv6 Code)等内容定义规则。 |
高级IPv6 ACL简称高级ACL6。编号范围为3000~3999。 |
基本ACL和基本ACL6、高级ACL和高级ACL6对应的编号可以相同,二者互不影响。
5、ACL的命名规则
用户在创建ACL时,可以为ACL指定一个名称,每个ACL最多只能有一个名称。
命名型的ACL使用户可以通过名称唯一地确定一个ACL,并对其进行相应的操作。
在创建ACL时,用户可以选择是否配置名称。ACL创建后,不允许用户修改或者删除ACL名称,也不允许为未命名的ACL添加名称。
在指定命名型ACL时,也可以同时配置对应编号。如果没有配置对应编号,系统在记录此命名型ACL时会自动为其分配一个数字型ACL的编号。
ACL的名称对于ACL全局唯一,但允许基本ACL与基本ACL6,高级ACL与高级ACL6使用相同的名称。
6、ACL的步长
6.1、ACL步长的含义
步长的含义:
设备自动为ACL规则分配编号的时候,每个相邻规则编号之间的差值。例如,如果将步长设定为5,规则编号分配是按照5、10、15…这样的规律分配的。
当步长改变后,ACL中的规则编号会自动从步长值开始重新排列。例如,原来规则编号为5、10、15、20,当通过命令把步长改为2后,则规则编号变成2、4、6、8。
当使用命令将步长恢复为缺省值后,设备将立刻按照缺省步长调整ACL规则的编号。例如:ACL 3001,步长为2,下面有4个规则,编号为2、4、6、8。如果此时使用命令将步长恢复为缺省值5,则ACL规则编号变成5、10、15、20。
通过设置步长,使规则之间留有一定的空间,用户可以在规则之间插入新的规则,以控制规则的匹配顺序。例如配置好了4个规则,规则编号为:5、10、15、20。此时如果用户希望能在第一条规则之后插入一条规则,则可以使用命令在5和10之间插入一条编号为7的规则。
另外,在定义一条ACL规则的时候,用户可以不指定规则编号,这时,系统会从步长值开始,按照步长,自动为规则分配一个大于现有最大编号的最小编号。假设现有规则的最大编号是25,步长是5,那么系统分配给新定义的规则的编号将是30。
ACL6不支持步长设定,缺省步长为1,但可以配置rule-id。
7、ACL的匹配顺序
一个ACL可以由多条“deny | permit”语句组成,每一条语句描述一条规则,这些规则可能存在重复或矛盾的地方(一条规则可以包含另一条规则,但两条规则不可能完全相同)。
华为设备支持两种匹配顺序,即配置顺序(config)和自动排序(auto)。当将一个数据包和访问控制列表的规则进行匹配的时候,由规则的匹配顺序决定规则的优先级,ACL通过设置规则的优先级来处理规则之间重复或矛盾的情形。
配置顺序按ACL规则编号(rule-id)从小到大的顺序进行匹配。
自动排序(auto)使用“深度优先”的原则进行匹配。
“深度优先”即根据规则的精确度排序,匹配条件(如协议类型、源和目的IP地址范围等)限制越严格越精确。例如可以比较地址的通配符,通配符越小,则指定的主机的范围就越小,限制就越严格。
若“深度优先”的顺序相同,则匹配该规则时按rule-id从小到大排列。
通配符掩码与反向掩码类似,以点分十进制表示,并用二进制的“0”表示“匹配”,“1”表示“不关心”,这恰好与子网掩码的表示方法相反,另外通配符1或者0可以不连续,掩码与反掩码必须连续。
比如,IP地址192.168.1.169、通配符0.0.0.172表示的网址为192.168.1.x0x0xx01,其中x可以是0,也可以是1。
ACL规则按照“深度优先”顺序匹配的原则如下表1所示。
ACL类型 |
匹配原则 |
基本ACL&ACL6 |
|
高级ACL&ACL6 |
|
二层ACL |
|
用户自定义ACL |
用户自定义ACL规则的匹配顺序只支持配置顺序,即rule-id从小到大的顺序进行匹配。 |
用户ACL |
|



本文地址:http://www.023wg.com/ACL/153.html
版权声明:若无注明,本文皆为“Swiers思唯网络博客”原创,转载请保留文章出处。

