一、ACL简介
ACL(Access Control List,访问控制列表)是一或多条规则的集合,用于识别报文流。这里的规则是指描述报文匹配条件的判断语句,匹配条件可以是报文的源地址、目的地址、端口号等。网络设备依照这些规则识别出特定的报文,并根据预先设定的策略对其进行处理。
ACL可以应用在诸多领域,其中最基本的就是应用ACL进行报文过滤。
1、ACL编号
用户在创建ACL时必须为其指定编号,不同的编号对应不同类型的ACL,当ACL创建完成后,用户就可以通过指定编号或名称的方式来指定该ACL,以便对其进行操作。
根据规则制订依据的不同,可以将ACL分为以下几种:
(1)基本ACL:
编号2000-2999,规则指定依据报文的源IPv4地址
(2)高级ACL:
编号3000-3999,规则制定依据报文的源IPv4地址、目的IPv4地址、报文优先级、IPv4承载的协议类型及特性等三、四层信息
(3)二层ACL:
编号4000-4999,规则制定依据报文的源MAC地址、目的MAC地址、802.1p优先级、链路层协议类型等二层信息
2、ACL的规则匹配顺序
当一个ACL中包含多条规则时,报文会按照一定的顺序与这些规则进行匹配,一旦匹配上某条规则便结束匹配过程。ACL的规则匹配顺序有以下两种:
- 配置顺序:按照规则编号由小到大进行匹配。
- 自动排序:按照“深度优先”原则由深到浅进行匹配
3、ACL的步长
ACL中的每条规则都有自己的编号,这个编号在该ACL中是唯一的。在创建规则时,可以手工为其指定一个编号,如未手工指定编号,则由系统为其自动分配一个编号。由于规则的编号可能影响规则匹配的顺序,因此当由系统自动分配编号时,为了方便后续在已有规则之前插入新的规则,系统通常会在相邻编号之间留下一定的空间,这个空间的大小(即相邻编号之间的差值)就称为ACL的步长。譬如,当步长为5时,系统会将编号0、5、10、15……依次分配给新创建的规则。
二、配置ACL
1、配置基本ACL
基本ACL根据报文的源IP地址来制订规则,对报文进行匹配。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建IPv4基本ACL,并进入IPv4基本ACL视图 |
acl number acl-number [ name acl-name ] [ match-order { auto | config } ] |
缺省情况下,不存在任何ACL IPv4基本ACL的编号范围为2000~2999 如果在创建IPv4基本ACL时为其设置了名称,则也可使用acl name acl-name命令进入其视图 |
(可选)配置ACL的描述信息 |
description text |
缺省情况下,ACL没有任何描述信息 |
(可选)配置规则编号的步长 |
step step-value |
缺省情况下,规则编号的步长为5 |
创建规则 |
rule [ rule-id ] { deny | permit } [ counting | fragment | logging | source { source-address source-wildcard | any } | time-range time-range-name | vpn-instance vpn-instance-name ] * |
缺省情况下,IPv4基本ACL内不存在任何规则 logging参数需要使用该ACL的模块支持日志记录功能,例如报文过滤 |
(可选)为指定规则配置描述信息 |
rule rule-id comment text |
缺省情况下,规则没有任何描述信息 |
2、配置高级ACL
高级ACL可根据报文的源IP地址、目的IP地址、报文优先级、IP承载的协议类型及特性(如TCP/UDP的源端口和目的端口、TCP报文标识、ICMP协议的消息类型和消息码等)等信息来制定规则,对IPv4报文进行匹配。用户可利用IPv4高级ACL制订比IPv4基本ACL更准确、丰富、灵活的规则。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建IPv4高级ACL,并进入IPv4高级ACL视图 |
acl number acl-number [ name acl-name ] [ match-order{ auto | config } ] |
缺省情况下,不存在任何ACL IPv4高级ACL的编号范围为3000~3999 如果在创建IPv4高级ACL时为其设置了名称,则也可使用acl name acl-name命令进入其视图 |
(可选)配置ACL的描述信息 |
description text |
缺省情况下,ACL没有任何描述信息 |
(可选)配置规则编号的步长 |
step step-value |
缺省情况下,规则编号的步长为5 |
创建规则 |
rule [ rule-id ] { deny | permit } protocol [ { { ack ack-value| fin fin-value | psh psh-value | rst rst-value | syn syn-value | urg urg-value } * | established } | counting | destination { dest-address dest-wildcard | any } | destination-port operator port1 [ port2 ] | { dscp dscp | { precedence precedence | tos tos } * } | fragment | icmp-type { icmp-type [ icmp-code ] | icmp-message } | logging | source { source-address source-wildcard | any } | source-port operator port1 [ port2 ] } | time-range time-range-name | vpn-instancevpn-instance-name ] * |
缺省情况下,IPv4高级ACL内不存在任何规则 logging参数需要使用该ACL的模块支持日志记录功能,例如报文过滤 |
(可选)为指定规则配置描述信息 |
rule rule-id comment text |
缺省情况下,规则没有任何描述信息 |
3、配置二层ACL
二层ACL可根据报文的源MAC地址、目的MAC地址、802.1p优先级、链路层协议类型等二层信息来制订规则,对报文进行匹配。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建二层ACL,并进入二层ACL视图 |
acl number acl-number [ name acl-name ] [ match-order { auto | config } ] |
缺省情况下,不存在任何ACL 二层ACL的编号范围为4000~4999 如果在创建二层ACL时为其设置了名称,则也可使用acl name acl-name命令进入其视图 |
(可选)配置ACL的描述信息 |
description text |
缺省情况下,ACL没有任何描述信息 |
(可选)配置规则编号的步长 |
step step-value |
缺省情况下,规则编号的步长为5 |
创建规则 |
rule [ rule-id ] { deny | permit } [ cos vlan-pri | counting | dest-mac dest-address dest-mask | { lsap lsap-type lsap-type-mask | type protocol-type protocol-type-mask } | source-mac source-address source-mask | time-range time-range-name ] * |
缺省情况下,二层ACL内不存在任何规则 |
(可选)为指定规则配置描述信息 |
rule rule-id comment text |
缺省情况下,规则没有任何描述信息 |
4、复制ACL
用户可通过复制一个已存在的ACL(即源ACL),来生成一个新的同类型ACL(即目的ACL)。除了ACL的编号和名称不同外,目的ACL与源ACL完全相同。目的ACL要与源ACL的类型相同,且目的ACL必须不存在,否则将导致复制失败。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
复制并生成一个新的ACL |
acl [ ipv6 ] copy { source-acl-number | name source-acl-name } to { dest-acl-number| name dest-acl-name } |
- |
5、应用ACL进行报文过滤
ACL最基本的应用就是进行报文过滤,即通过将ACL规则应用到指定接口的入或出方向上,从而对该接口收到或发出的报文进行过滤。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入接口视图 |
interface interface-type interface-number |
- |
在接口上应用ACL进行报文过滤 |
packet-filter [ ipv6 ] { acl-number | name acl-name } { inbound| outbound } |
缺省情况下,接口不对报文进行过滤 |
三、ACL显示和维护
在任意视图下执行display命令可以显示ACL配置后的运行情况,通过查看显示信息验证配置的效果。
display acl acl-number