27-ACL配置
本章节下载 (242.45 KB)
目 录
随着网络规模的扩大和流量的增加,对网络安全的控制和对带宽的分配成为网络管理的重要内容。通过对报文进行过滤,可以有效防止非法用户对网络的访问,同时也可以控制流量,节约网络资源。ACL(Access Control List,访问控制列表)即是通过配置对报文的匹配规则和处理操作来实现包过滤的功能。
ACL通过一系列的匹配条件对报文进行分类,这些条件可以是报文的源MAC地址、目的MAC地址、源IP地址、目的IP地址、端口号等。
交换机上定义的ACL支持以下两种应用方式:
l 基于硬件的应用:ACL被下发到硬件,例如配置QoS功能时引用ACL,对报文进行流分类。需要注意的是,当ACL被QoS功能引用时,ACL规则中定义的动作(deny或permit)不起作用,交换机对匹配此ACL的报文采取的动作由QoS中流行为定义的动作决定。关于流行为的详细介绍请参见本手册“QoS”部分。
l 基于软件的应用:ACL被上层软件引用,例如配置登录用户控制功能时引用ACL,对Telnet、SNMP和WEB用户进行控制。需要注意的是,当ACL被上层软件引用时,交换机对匹配此ACL的报文采取的动作由ACL规则中定义的动作(deny或permit)决定。关于登录用户控制的详细介绍请参见“登录交换机配置”部分。
l 当ACL下发到硬件,被QoS策略引用进行流分类时,如果报文没有与ACL中的规则匹配,此时交换机不会使用流行为中定义的动作对此类报文进行处理。
l 当ACL被上层软件引用,对Telnet、SNMP和WEB登录用户进行控制时,如果报文没有与ACL中的规则匹配,此时交换机对此类报文采取的动作为deny,即拒绝报文通过。
ACL根据ACL序号来区分不同的ACL,可以分为三种类型,如表1-1所示。
表1-1 ACL分类
ACL类型 |
ACL序号范围 |
区分报文的依据 |
基本ACL |
2000~2999 |
只根据报文的源IP地址信息制定匹配规则 |
高级ACL |
3000~3999 |
根据报文的源IP地址信息、目的IP地址信息、IP承载的协议类型、协议的特性等三、四层信息制定匹配规则 |
二层ACL |
4000~4999 |
根据报文的源MAC地址、目的MAC地址、802.1p优先级、二层协议类型等二层信息制定匹配规则 |
用户在创建ACL时必须为其指定编号,系统将根据用户所指定的编号来创建不同类型的ACL。
通常名称比编号更易于记忆和识别,因此用户在创建ACL时,还可以选择是否为其指定名称,而且只能在创建ACL时为其指定名称。ACL一旦创建,便不允许对其名称进行修改或删除。
当ACL创建完成后,用户可以通过指定编号或名称的方式来指定该ACL,以便对其进行操作。
ACL的名称对于ACL全局唯一。
一个ACL由一条或多条描述报文匹配选项的判断语句组成,这样的判断语句就称为“规则”。由于每条规则中的报文匹配选项不同,从而使这些规则之间可能存在重复甚至矛盾的地方,因此在将一个报文与ACL的各条规则进行匹配时,就需要有明确的匹配顺序来确定规则执行的优先级。ACL的规则匹配顺序有以下两种:
l 配置顺序:按照用户配置规则的先后顺序进行匹配,但由于本质上系统是按照规则编号由小到大进行匹配,因此后插入的规则如果编号较小也有可能先被匹配。
l 自动排序:按照“深度优先”原则由深到浅进行匹配,不同类型ACL的“深度优先”排序法则如表1-2所示。
当报文与各条规则进行匹配时,一旦匹配上某条规则,就不会再继续匹配下去,系统将依据该规则对该报文执行相应的操作。
表1-2 各类型ACL的“深度优先”排序法则
ACL类型 |
“深度优先”排序法则 |
基本ACL |
(1) 先比较源IPv4地址范围,范围较小者优先 (2) 如果源IP地址范围也相同,再比较配置顺序,配置在前者优先 |
高级ACL |
(1) 先比较协议范围,指定有IPv4承载的协议类型者优先 (2) 如果协议范围也相同,再比较源IPv4地址范围,较小者优先 (3) 如果源IPv4地址范围也相同,再比较目的IPv4地址范围,较小者优先 (4) 如果目的IPv4地址范围也相同,再比较四层端口(即TCP/UDP端口)号范围,较小者优先 (5) 如果四层端口号范围也相同,再比较配置顺序,配置在前者优先 |
二层ACL |
(1) 先比较源MAC地址范围,较小者优先 (2) 如果源MAC地址范围相同,再比较目的MAC地址范围,较小者优先 (3) 如果目的MAC地址范围也相同,再比较配置顺序,配置在前者优先 |
l 比较IPv4地址范围的大小,就是比较IPv4地址通配符掩码中“0”位的多少:“0”位越多,范围越小。通配符掩码(又称反向掩码)以点分十进制表示,并以二进制的“0”表示“匹配”,“1”表示“不关心”,这与子网掩码恰好相反,譬如子网掩码255.255.255.0对应的通配符掩码就是0.0.0.255。此外,通配符掩码中的“0”或“1”都可以是不连续的,这样可以更加灵活地进行匹配,譬如0.255.0.255就是一个合法的通配符掩码。
l 比较MAC地址范围的大小,就是比较MAC地址掩码中“1”位的多少:“1”位越多,范围越小。
ACL内的每条规则都有自己的编号,每个规则的编号在一个ACL中都是唯一的。在创建规则时,可以人为地为其指定一个编号,也可以由系统为其自动分配一个编号。
在自动分配编号时,为了方便后续在已有规则之前插入新的规则,系统通常会在相邻编号之间留下一定的空间,这个空间的大小(即相邻编号之间的差值)就称为ACL的步长。譬如,当步长为5时,系统会将编号0、5、10、15……依次分配给新创建的规则。
系统为规则自动分配编号的方式如下:系统按照步长从0开始,自动分配一个大于现有最大编号的最小编号。譬如原有编号为0、5、9、10和12的五条规则,步长为5,此时如果创建一条规则且不指定编号,那么系统将自动为其分配编号15。
如果改变步长,ACL内原有全部规则的编号都将自动从0开始按新步长重新排列。譬如,某ACL内原有编号为0、5、9、10和15的五条规则;当修改步长为2之后,这些规则的编号将依次变为0、2、4、6和8。
时间段用于描述一个特定的时间范围。用户可能有这样的需求:一些ACL规则只需在某个或某些特定的时间段内生效(即进行报文过滤),这也称为基于时间段的ACL过滤。为此,用户可以先配置一个或多个时间段,然后在ACL规则下引用这些时间段,那么该规则将只在指定的时间段内生效。
此外,如果某ACL规则所引用的时间段尚未配置,系统将给出提示信息,并仍允许该规则成功创建,但该规则将不会在其引用的时间段完成配置前生效。
传统的报文过滤并不处理所有IP报文分片,而是只对第一个(首片)分片报文进行匹配处理,后续分片一律放行。这样,网络攻击者可能构造后续的分片报文进行流量攻击,就带来了安全隐患。
在ACL的规则配置项中,通过关键字fragment来标识该ACL规则仅对非首片分片报文有效,而对非分片报文和首片分片报文无效。不包含此关键字的规则项对非分片报文和分片报文均有效。
表1-3 IPv4 ACL配置任务简介
配置任务 |
说明 |
详细配置 |
配置ACL的生效时间段 |
可选 |
|
配置基本ACL |
三者至少选其一 |
|
配置高级ACL |
||
配置二层ACL |
||
复制ACL |
可选 |
|
应用ACL进行报文过滤 |
可选 |
时间段可分为以下两种:
l 周期时间段:该时间段以一周为周期循环生效。
l 绝对时间段:该时间段在指定时间范围内生效。
表1-4 配置ACL的生效时间段
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建时间段 |
time-range time-range-name { start-time to end-time days [ from time1 date1 ] [ to time2 date2 ] | from time1 date1 [ to time2 date2 ] | to time2 date2 } |
必选 缺省情况下,不存在任何时间段 |
需要注意的是:
l 如果用户通过命令time-range time-range-name start-time to end-time days定义了一个周期时间段,则只有系统时钟在该周期时间段内,该时间段才进入激活状态。
l 如果用户通过命令time-range time-range-name { from time1 date1 [ to time2 date2 ] | to time2 date2 }定义了一个绝对时间段,则只有系统时钟在该绝对时间段内,该时间段才进入激活状态。
l 如果用户通过命令time-range time-range-name start-time to end-time days { from time1 date1 [ to time2 date2 ] | to time2 date2 }同时定义了绝对时间段和周期时间段,则只有系统时钟同时满足绝对时间段和周期时间段的定义时,该时间段才进入激活状态。例如,一个时间段定义了绝对时间段:从2004年1月1日0点0分到2004年12月31日24点0分,同时定义了周期时间段:每周三的12:00到14:00。该时间段只有在2004年内每周三的12:00到14:00才进入激活状态。
l 在同一个名字下可以配置多个时间段,来共同描述一个特殊时间,通过名字来引用该时间。在同一个名字下配置的多个周期时间段之间是“或”的关系,多个绝对时间段之间是“或”的关系,而周期时间段和绝对时间段之间是“与”的关系。
l 如果不配置开始日期,时间段就是从系统可表示的最早时间(即1970年1月1日0点0分)起到结束日期为止。如果不配置结束日期,时间段就是从配置生效之日起到系统可以表示的最晚时间(即2100年12月31日24点0分)为止。
l 最多可以定义256个时间段。
基本ACL只根据源IP地址信息制定匹配规则,对报文进行相应的分析处理。
基本ACL的序号取值范围为2000~2999。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。
表1-5 配置基本ACL
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建基本ACL并进入基本ACL视图 |
acl number acl-number [ name acl-name ] [ match-order { auto | config } ] |
必选 缺省情况下,匹配顺序为config 如果用户在创建ACL时指定了名称,则之后可以通过acl name acl-name命令进入指定名称的ACL视图 |
定义规则 |
rule [ rule-id ] { deny | permit } [ fragment | logging | source { sour-addr sour-wildcard | any } | time-range time-range-name ] * |
必选 可以重复本步骤创建多条规则 当基本ACL被QoS策略引用对报文进行流分类时,不支持配置logging参数 |
定义步长 |
step step-value |
可选 缺省情况下,步长为5 |
定义基本ACL的描述信息 |
description text |
可选 缺省情况下,基本ACL没有描述信息 |
定义规则的描述信息 |
rule rule-id comment text |
可选 缺省情况下,规则没有描述信息 |
需要注意的是:
l 当ACL的匹配顺序为config时,用户可以修改该ACL中的任何一条已经存在的规则,在修改ACL中的某条规则时,该规则中没有修改到的部分仍旧保持原来的状态;当ACL的匹配顺序为auto时,用户不能修改该ACL中的任何一条已经存在的规则,否则系统会提示错误信息。
l 新创建或修改后的规则不能和已经存在的规则内容相同,否则会导致创建或修改不成功,系统会提示该规则已经存在。
l 当ACL的匹配顺序为auto时,新创建的规则将按照“深度优先”的原则插入到已有的规则中,但是所有规则对应的编号不会改变。
l 用户可以通过命令acl number acl-number [ name acl-name ] match-order { auto | config }修改ACL的匹配顺序为auto或者config,但必须在ACL中没有规则的时候修改,对已经有规则的ACL是无法修改其匹配顺序的。
l 在使用rule comment命令为规则定义描述信息时,该规则必须存在。
高级ACL可以使用报文的源IP地址信息、目的IP地址信息、IP承载的协议类型、协议的特性(例如TCP或UDP的源端口、目的端口,TCP标记,ICMP协议的消息类型、消息码等)等信息来制定匹配规则。
高级ACL支持对三种报文优先级的分析处理:
l ToS(Type of Service,服务类型)优先级;
l IP优先级;
l DSCP(Differentiated Services Codepoint,差分服务编码点)优先级。
用户可以利用高级ACL定义比基本ACL更准确、更丰富、更灵活的匹配规则。
高级ACL的序号取值范围为3000~3999。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。
表1-6 配置高级ACL
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建高级ACL并进入高级ACL视图 |
acl number acl-number [ name acl-name ] [ match-order { auto | config } ] |
必选 缺省情况下,匹配顺序为config 如果用户在创建ACL时指定了名称,则之后可以通过acl name acl-name命令进入指定名称的ACL视图 |
定义规则 |
rule [ rule-id ] { deny | permit } protocol [ { established | { ack ack-value | fin fin-value | psh psh-value | rst rst-value | syn syn-value | urg urg-value } * } | destination { dest-addr dest-wildcard | any } | destination-port operator port1 [ port2 ] | dscp dscp | fragment | icmp-type { icmp-type icmp-code | icmp-message } | logging | precedence precedence | reflective | source { sour-addr sour-wildcard | any } | source-port operator port1 [ port2 ] | time-range time-range-name | tos tos ] * |
必选 可以重复本步骤创建多条规则 当高级ACL被QoS策略引用对报文进行流分类时,不支持配置logging参数 |
定义步长 |
step step-value |
可选 缺省情况下,步长为5 |
定义高级ACL的描述信息 |
description text |
可选 缺省情况下,高级ACL没有描述信息 |
定义规则的描述信息 |
rule rule-id comment text |
可选 缺省情况下,规则没有描述信息 |
需要注意的是:
l 当ACL的匹配顺序为config时,用户可以修改该ACL中的任何一条已经存在的规则,在修改ACL中的某条规则时,该规则中没有修改到的部分仍旧保持原来的状态;当ACL的匹配顺序为auto时,用户不能修改该ACL中的任何一条已经存在的规则,否则系统会提示错误信息。
l 新创建或修改后的规则不能和已经存在的规则内容相同,否则会导致创建或修改不成功,系统会提示该规则已经存在。
l 当ACL的匹配顺序为auto时,新创建的规则将按照“深度优先”的原则插入到已有的规则中,但是所有规则对应的编号不会改变。
l 用户可以通过命令acl number acl-number [ name acl-name ] match-order { auto | config }修改ACL的匹配顺序为auto或者config,但必须在ACL中没有规则的时候修改,对已经有规则的ACL是无法修改其匹配顺序的。
l 在使用rule comment命令为规则定义描述信息时,该规则必须存在。
二层ACL根据报文的源MAC地址、目的MAC地址、802.1p优先级、二层协议类型等二层信息制定匹配规则,对报文进行相应的分析处理。
二层ACL的序号取值范围为4000~4999。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建二层ACL并进入二层ACL视图 |
acl number acl-number [ name acl-name ] [ match-order { auto | config } ] |
必选 缺省情况下,匹配顺序为config 如果用户在创建ACL时指定了名称,则之后可以通过acl name acl-name命令进入指定名称的ACL视图 |
定义规则 |
rule [ rule-id ] { deny | permit } [ cos vlan-pri | dest-mac dest-addr dest-mask | { lsap lsap-type lsap-type-mask | type protocol-type protocol-type-mask } | source-mac sour-addr source-mask | time-range time-range-name ] * |
必选 可以重复本步骤创建多条规则 |
定义步长 |
step step-value |
可选 缺省情况下,步长为5 |
定义二层ACL的描述信息 |
description text |
可选 缺省情况下,二层ACL没有描述信息 |
定义规则的描述信息 |
rule rule-id comment text |
可选 缺省情况下,规则没有描述信息 |
需要注意的是:
l 当ACL的匹配顺序为config时,用户可以修改该ACL中的任何一条已经存在的规则,在修改ACL中的某条规则时,该规则中没有修改到的部分仍旧保持原来的状态;当ACL的匹配顺序为auto时,用户不能修改该ACL中的任何一条已经存在的规则,否则系统会提示错误信息。
l 新创建或修改后的规则不能和已经存在的规则内容相同,否则会导致创建或修改不成功,系统会提示该规则已经存在。
l 当ACL的匹配顺序为auto时,新创建的规则将按照“深度优先”的原则插入到已有的规则中,但是所有规则对应的编号不会改变。
l 用户可以通过命令acl number acl-number [ name acl-name ] match-order { auto | config }修改ACL的匹配顺序为auto或者config,但必须在ACL中没有规则的时候修改,对已经有规则的ACL是无法修改其匹配顺序的。
l 在使用rule comment命令为规则定义描述信息时,该规则必须存在。
复制ACL功能使用户可以通过复制一个已经存在的ACL,生成一个新的同类型的ACL。生成的新的ACL的匹配顺序、包含的匹配规则、步长以及描述信息都和源ACL相同。
源ACL必须存在,目的ACL必须不存在。
表1-8 复制ACL
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
复制生成一个新的同类型的ACL |
acl copy { source-acl-number | name source-acl-name } to { dest-acl-number | name dest-acl-name } |
必选 |
l 目的ACL的类型要与源ACL的类型相同,且源ACL必须存在,目的ACL必须不存在。
l 源ACL的名称不会复制到目的ACL。
通过将配置好的不同类型的ACL规则应用到指定接口端口/VLAN接口上,可以对该端口/VLAN接口收到的相应类型报文(包括以太网帧、IPv4报文)进行过滤。
在VLAN接口上应用ACL进行报文过滤时,只能对通过该接口进行三层转发的报文进行过滤,而对纯二层转发的报文不进行过滤。
表1-9 配置对以太网帧进行过滤
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入以太网端口或VLAN接口视图 |
interface interface-type interface-number |
- |
应用二层ACL对以太网帧进行过滤 |
packet-filter { acl-number | name acl-name } inbound |
必选 缺省情况下,在接口上不对以太网帧进行过滤 |
表1-10 配置对IPv4报文进行过滤
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
进入以太网端口或VLAN接口视图 |
interface interface-type interface-number |
- |
应用基本或高级ACL对IPv4报文进行过滤 |
packet-filter { acl-number | name acl-name } inbound |
必选 缺省情况下,在接口上不对IPv4报文进行过滤 |
在完成上述配置后,在任意视图下执行display命令可以显示ACL配置后的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除ACL统计信息。
表1-11 ACL显示和维护
配置 |
命令 |
显示配置的ACL信息 |
display acl { acl-number | all | name acl-name } |
显示设备ACL资源使用情况 |
display acl resource |
显示时间段的配置和状态 |
display time-range { time-range-name | all } |
清除ACL统计信息 |
reset acl counter { acl-number | all | name acl-name } |
要求通过在Device A的接口GigabitEthernet1/0/1上配置报文过滤功能,实现在每天的8:00~18:00时间段对来自Host A的IPv4报文进行过滤。
图1-1 应用ACL进行报文过滤典型配置组网图
# 配置时间段study,在每天的8:00到18:00生效。
<DeviceA> system-view
[DeviceA] time-range study 8:00 to 18:00 daily
# 创建基本IPv4 ACL 2009。
[DeviceA] acl number 2009
# 定义一个规则,禁止源IP地址为192.168.1.2/32的报文在study时间段通过。
[DeviceA-acl-basic-2009] rule deny source 192.168.1.2 0 time-range study
[DeviceA-acl-basic-2009] quit
# 应用基本IPv4 ACL 2009对接口GigabitEthernet1/0/1收到的IPv4报文进行过滤。
[DeviceA] interface gigabitethernet 1/0/1
[DeviceA-GigabitEthernet1/0/1] packet-filter 2009 inbound
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!