ACL配置与管理——1

来源:互联网 发布:印度人 知乎 编辑:程序博客网 时间:2024/06/06 00:00

ACL是由一个或多个用于报文过滤的规则组成的规则集合,通过在不同功能上的应用可达到不同的应用效果,如用户登录控制、网络访问控制、QoS流策略、路由信息过滤、策略路由等方面。

华为S系列交换机中,根据ACL所过滤的报文类型和功能的不同又分为多种ACL类型,如基本ACL、高级ACL、基本ACL6、高级ACL6、二层ACL、用户自定义ACL等。ACL6是基于IPv6协议的。

ACL基础

ACL(AccessControl List,访问控制列表)是一组报文过滤规则的集合,以允许或阻止符合特定条件的报文通过。当ACL被其他功能引用时,根据设备在实现该功能时的处理方式(硬件处理或者软件处理),ACL可以被分为基于硬件的应用和基于软件的应用。

一、ACL的分类及主要应用

在华为S系列交换机中,按照创建ACL时的命名方式分数字型ACL和命名型ACL:创建ACL时如果仅指定了一个编号,则所创建的是数字型ACL;创建ACL时如果指定了一个名字,则所创建的是命名型ACL。按照ACL功能的不同,又可把ACL分为基于接口的ACL、基本ACL、基本ACL6、高级ACL、高级ACL6、二层ACL和用户自定义ACL这几类。主要区别就是所支持的过滤条件不同。


基本ACL和高级ACL只对IPv4报文生效,但基本ACL和基本ACL6、高级ACL和高级ACL6对应的编号可以相同,二者互不影响。

二、ACL编号和命名规则

ACL的命名方式分数字型ACL和命名型ACL两种。数字型ACL就是用户在创建ACL时必须为其指定编号,系统将根据用户所指定的编号来创建不同的ACL。这里的编号不能随便指定,一定要在对应类型的ACL的编号取值范围中,他代表了ACL的类型。如基本ACL和基本ACL6的编号取值范围都是2000~2999,而高级ACL和高级ACL6的编号取值范围都是3000~3999。

有时为了方便对具体ACL用途的识别,用户在创建ACL时可以为ACL指定一个名称,这就是命名型ACL。命名型ACL可使用户通过ACL名称唯一的标识一个ACL,并对其进行相应的操作。但每个ACL最多只能有一个名称,且在ACL创建后不允许用户修改或者删除ACL名称,也不允许为未命名的ACL添加名称。ACL的名称对于ACL全局唯一,但允许基本ACL与基本ACL6,高级ACL与高级ACL6使用相同的名称。

在指定命名型ACL时也可以同时配置对应编号。如果没有配置对应编号,系统在记录此命名型ACL时会自动为其分配一个数字型ACL的编号。所以命名型的ACL也肯定有一个ACL编号,但数字型ACL却不会有对应的ACL名称。

三、ACL规则编号

一个ACL内可以有一条或多条规则,每条规则都有自己的编号,这是系统在进行规则匹配的缺省匹配顺序。且要求每个规则的编号在整个ACL中是唯一的。在创建规则时,可以人为的为每个规则指定一个唯一的编号,也可以由系统为其自动分配一个唯一的编号。ACL规则编号的编号规则:

1、自动分配规则编号

在自动分配规则编号时,为了方便后续在已有规则之前插入新的规则(用以控制规则的匹配顺序,这点对于想要修改ACL的规则匹配结果时很重要),系统通常会在相邻编号之间留下一定的空间,这个空间的大小(即相邻编号之间的差值)就称为ACL的步长。不指定规则编号时,系统会从现有规则中最大的ACL规则号(最小的规则号为0)开始,按照步长设置自动为当前添加的规则分配一个大于现有规则最大编号的最小编号。

2、插入新规则时的规则编号

如果想在原来的两规则之间插入一条新的规则,则插入的这条规则的编号必须手工指定,且其编号必须位于原来两条规则编号之间。假设已配置好了4个规则,规则编号为5、10、15、20,如希望在第一条规则之后插入一条规则,可使用命令在5和10之间插入一条编号为7的规则。

3、新步长的应用

缺省值5,可手工设置。当步长改变后,ACL中的规则编号会自动从新的步长值开始重新排列。如原来规则编号为5、10、15、20,通过step step命令把步长改为2后,规则编号变成2、4、6、8。

四、ACL规则的匹配顺序

一个ACL可以由多条“deny|permit”语句组成,每一条语句描述一条规则。由于每条规则中的报文匹配选项不同(同一ACL中的各条规则间都不可能完全相同),从而使这些规则之间可能存在交叉甚至矛盾的地方,因此,在将一个报文与ACL的各条规则进行匹配时,就需要有明确的匹配顺序来确定规则执行的优先级。

华为S系列交换机的ACL规则匹配顺序有“配置顺序”和“自动排序”两种。当将一个数据包与访问控制列表的规则进行匹配时,由规则的匹配顺序设置设置决定规则的优先级(并不一定就是严格按照规则号大小顺序)。ACL通过设置规则的优先级来处理规则之间重复或矛盾的情形。

(1)配置顺序:是按照用户配置规则编号的大小顺序进行匹配。后插入的规则如果编号较小也有可能先被匹配。缺省采用配置顺序进行匹配

(2)自动排序:是按照“深度优先”原则由深到浅进行匹配。“深度优先”即根据规则的精确度排序,匹配条件(如协议类型、源和目的IP地址范围等)限制越严格越精确,优先级越高。例如可以比较地址的通配符掩码(wildcard,每位也是由“1”和“0”组成,“0”表示要精确匹配的位,“1”表示不需要匹配的位),通配符越小(“0”的位数越多),则指定的主机的范围就越小(通配符全为0时表示要精确匹配地址中的每一位,相当于只有一个地址符合匹配条件,所以说主机地址的通配符为0),限制就越严格。若“深度优先”的顺序相同,则匹配该规则时按照规则编号从小到大排列。

通配符掩码与反向掩码类似(不完全相同),以点分十进制表示,并用二进制的“0”表示“需要进行匹配操作”,“1”表示“不需要进行匹配操作,即忽略”,这恰好与子网掩码的表示方法相反。另外通配符中的“1”或者“0”可以不连续,但掩码与反掩码必须连续。比如,IP地址192.168.1.169、通配符0.0.0.172表示的网址为192.168.1.x0x0xx01,其中x可以使0或者1,但反掩码却不能有这样的值。

无论哪种匹配顺序,当报文与各条规则进行匹配时,一旦匹配上某条规则,都不会再继续匹配下去,系统将依据该规则对该报文执行相应的操作。每个报文实际匹配的规则只有一条。华为的ACL在最后都有一条permit any any,即允许所有报文通过的规则,当前面所有规则都匹配不上时将直接采用最后这条规则,允许通过。


ACL配置

所有ACL的配置任务主要包括以下几项:

1、配置ACL的生效时间段(可选)

时间段用于描述一个ACL发生作用的特殊时间范围。有这种需求,一些ACL规则需要在某个或某些特定时间内生效,而其他时间段不生效。可配置一个或多个时间段,然后通过配置规则引用该时间段,从而实现基于时间段的ACL过滤。如果规则中引用的时间段未配置,则整个规则不能立即生效,直到用户配置了引用的时间段,并且系统时间在指定时间段范围内,ACL规则才能生效。

时间段的配置包括以下两种方式:

(1)相对时间段(周期时间段):采用每个星期固定时间段的形式;

(2)绝对时间段:采用从某年某月某日某时某分起至某年某月某日某时某分结束的形式。

2、创建ACL

配置ACL时需要先创建一个基本ACL,可以是数字型的,也可以是命名型的。如果是数据型的,其编号一定要在对应类型的ACL编号范围之内,不能用错。

3、配置ACL规则

ACL通过具体的规则(rule)所指定的过滤条件来匹配报文中的信息,实现对报文的分类。因此,创建ACL以后,需要根据不同类型ACL可以匹配的参数配置满足对应需求的各条ACL规则。

在ACL中添加新的规则时,不会影响已经存在的规则(但可能会改变原有规则的匹配顺序);对已经存在的规则进行编辑时,如果新配置的规则内容与原规则内容存在冲突,则冲突的部分由新配置的规则内容代替(通过这种方式也可修改原来的规则)。建议在编辑一个已存在的规则前,先删除旧的规则,再创建新的规则,否则配置结果可能与预期效果不同。

ACL配置好后还需在对应位置或功能中应用,多数情况下是通过基于ACL的简化流策略的方式在交换机所有端口/所有VLAN,或者指定VLAN、指定端口的出或入方向上应用。

一、配置基本ACL

基本ACL是应用于IPv4协议网络的,且基本ACL的地址过滤信息中一定不会包括目的的IP地址,只包括源IP地址,这是基本ACL的最显著特点。




    使用在配置ACL生效时间段时,配置的时间段时间不能早于当前时间,否则不会生效。可为多个时间段配置相同的时间段名称,共同来描述某个特殊时间。通过名称来引用一个时间段时,如果该时间段配置了多个生效时间,生效原则为各周期时间段之间以及各绝对时间段之间分别取并集之后,在取二者的交集作为最终生效的时间范围。

示例:配置时间段test,从2017年9月1日00:00起到2017年12月31日23:59生效

<Huawei>system-view

[Huawei]timer-range test from 0:0 2017/9/1to 23:59 2017/12/31

示例:配置时间段test,在周一到周五每天8:00到18:00生效

<Huawei>system-view

[Huawei]timer-range test 8:00 to18:00working-day

示例:配置时间段test,在周六、周日下午14:00到18:00生效

<Huawei>system-view

[Huawei]timer-range test 14:00 to18:00off-day

示例:配置在ACL2001中增加一条规则,允许源地址是192.168.32.1的报文通过

<Huawei>system-view

[Huawei]acl 2001

[Huawei-acl-basic-2001]rule permit source192.168.32.1 0

示例:配置在ACL2001中删除一条规则,删除规则5。

<Huawei>system-view

[Huawei]acl 2001

[Huawei-acl-basic-2001]undo rule 5

二、配置高级ACL

高级ACL除了可以根据基本ACL中的报文源IP地址进行规则匹配之外,还可以根据报文的目的IP地址信息、IP承载的协议类型、协议的特性(如TCP或UDP的源端口、目的端口,ICMP协议的消息类型、消息码等)信息进行匹配。

高级ACL还支持QoS中所需的优先级设置,用于指定符合对应优先级的IP数据包通过。当用户需要使用源IP地址、目的IP地址、源端口号、目的端口号、优先级、时间段等信息对IPv4报文进行过滤时,可以使用高级ACL。高级ACL主要用于QoS中的流分类,因为通过它可以精确地对流量进行分类。

在IPv4网络中,IPv4报文中有三种承载QoS优先级标签的方式:基于二层的CoS(Class of Service,服务等级)字段(即通常所说的802.1p优先级)、基于IP层(三层)的IP优先级字段(即IP优先级)和ToS(服务类型)字段,以及基于IP层(三层)的DSCP(Differentiated Services Code Point,差分服务代码点)字段(即DSCP优先级)。华为交换机的高级ACL支持ToS优先级、IP优先级和DSCP优先级这三种优先级。

1、高级ACL的创建

在高级ACL的创建中,同样可以创建数字型的,或者命名型的ACL。创建数字型高级ACL的方法:acl [number] acl-number [match-order {auto | config}]命令,但是其中的acl-number只能在3000~3999之间。

创建命名型高级ACL:acl nameacl-name {advance | acl-number} [match-order {auto | config}]

2、高级ACL规则的配置

高级ACL规则的配置比基本ACL中的规则配置复杂许多,因为可用来匹配的过滤条件参数非常之多,而且基本上是可同时配置的。

(1)当参数Protocol为ICMP时(即要过滤ICMP协议报文时),命令格式:

Rule [rule-id] {deny | permit} {protocol-number|icmp}[destination {destination-address destination-wildcard |any} | { {precedence precedence | tos tos} * |dscp dscp} | fragment |logging |icmp-type {icmp-name | icmp-type icmp-code} |source {source-address source-wildcard |any} | time-rangetime-name | ttl-expired]*

(2)当参数Protocol为TCP时(即要过滤TCP协议报文时),命令格式:

Rule [rule-id] {deny | permit} {protocol-number|tcp} [destination {destination-address destination-wildcard |any} |destination-port{eq port | gtport | ltport |range port-start port-end} |  { {precedence precedence |tostos} * |dscp dscp} | fragment |logging |source {source-address source-wildcard |any} |source-port {eq port |gtport | ltport| rangeport-start port-end} |tcp-flag{ack | fin | psh | rst | syn | urg}* | time-rangetime-name |ttl-expired]*

(3)当参数Protocol为UDP时(即要过滤UDP协议报文时),命令格式:

Rule [rule-id] {deny | permit} {protocol-number|udp} [destination {destination-addressdestination-wildcard |any} |destination-port { eq port | gtport| ltport |range port-start port-end} |  { {precedence precedence |tostos} * |dscp dscp} | fragment |logging |source {source-addresssource-wildcard |any} |source-port {eq port |gtport| ltport | rangeport-start port-end} |tcp-flag {ack | fin | psh | rst | syn | urg }* | time-rangetime-name |ttl-expired]*

(4)当参数Protocol为GRE、IGMP、IP、IPINIP、OSPF时,命令格式:

Rule [rule-id] {deny | permit} {protocol-number|gre | igmp | ip | ipinip | ospf} [destination {destination-address destination-wildcard |any} |  { { precedence precedence | tos tos} * | dscp dscp} | fragment |logging |source {source-address source-wildcard |any} | time-rangetime-name |ttl-expired]*



示例:配置在ACL3000(采用缺省步长5)中增加一条规则号为2的,允许基于IGMP协议类型报文通过的规则。

<Huawei>system-view

[Huawei]acl 3000

[Huawei-acl-adv-3000]rule 2 permit igmp

示例:配置在ACL3001中采用规则号自动分配方式(此时不用手工指定规则号)增加一条规则,允许从129.9.0.0网段的主机向202.38.160.0网段的主机发送的所有IP报文通过。

<Huawei>system-view

[Huawei]acl 3001

[Huawei-acl-adv-3001]rule permit ip source129.9.0.0 0.0.255.255 destination 202.38.160.0 0.0.0.255

示例:配置在ACL3001中采用规则号自动分配方式(此时不用手工指定规则号)增加一条规则,允许129.9.8.0网段内的主机建立与202.38.160.0网段内的主机UDP128端口上建立的UDP通信。

<Huawei>system-view

[Huawei]acl 3001

[Huawei-acl-adv-3001]rule permit udp source129.9.8.0 0.0.0.255 destination 202.38.160.0 0.0.0.255 destination-port eq 128

三、配置二层ACL

二层ACL是根据报文的源MAC地址、目的MAC地址、802.1p优先级、二层协议类型等二层信息进行规则匹配、处理的。二层ACL的序号取值为4000~4999。

1、二层ACL的创建

二层ACL的创建中,同样可以创建数字型的或者命名型的ACL。创建数字型的二层ACL使用:acl [number] acl-number [match-order { auto | config}]命令,创建命名型二层ACL,采用:acl nameacl-name {link | acl-number} [match-order { auto | config}]命令,link用来表示所创建的是命名型二层ACL。

2、二层ACL规则的配置

二层ACL规则的配置比基本型ACL复杂许多,具体命令:

Rule [rule-id] {permit | deny } [ [ether-ii |802.3 |snap] | l2-protocol type-value [type-mask ] |destination-macdest-mac-address[dest-mac-mask] |source-mac source-mac-address [source-mac-mask ] | vlan-id vlan-id [ vlan-id-mask ] |8021p802.1p-value |cvlan-id cvlan-id [cvlan-id-mask ] |cvlan-8021p802.1p-value| double-tag ]* [time-rangetime-name]

参数中的地址掩码和VLAN ID掩码值是十六进制,但不需要输入前面的0x,直接输入后面的值即可。




示例:创建二层ACL4011,规则中拒绝802.1p优先级为3的报文(采用自动分配规则号方式,此时不需要手工具体指定规则号)。

<Huawei>system-view

[Huawei]acl 4011

[Huawei-acl-L2-4011]rule deny 8021p 3

示例:创建二层ACL4011,定义规则1,禁止从MAC地址为000d-88f5-97ed发送到MAC地址0011-4301-991e,且802.1p优先级为3的报文通过。

<Huawei>system-view

[Huawei]acl 4011

[Huawei-acl-L2-4011]rule 1 deny 8021p 3destination-mac 0011-4301-991e ffff-ffff-ffff source-mac 000d-88f5-97edffff-ffff-ffff

示例:创建二层ACL4011,定义规则1,允许VLAN编号为2~10的报文通过。VLAN2~10这个范围对应有掩码为0xff3,因为只要前面16位和最后2位一样时就可以使得VLAN ID范围在2~10之间。

[Huawei]acl 4011

[Huawei-acl-L2-4011]rule 1 permit vlan-id 20xff3

示例:创建二层ACL4011(采用自动分配规则号方式,此时不需要手工具体指定规则号),规则中允许ARP(类型值为0x0806)报文通过,但拒绝RARP(类型值为0x8035)报文通过。

<Huawei>system-view

[Huawei]acl 4011

[Huawei-acl-L2-4011]rule permit l2-Protocol0x0806

[Huawei-acl-L2-4011]rule deny l2-Protocol0x8035

示例:在ACL4001中采用自动分配ACL规则号方式增加一条规则,匹配目的MAC地址是0000-0000-0001,源MAC地址是0000-0000-0002,二层协议类型值为0x0800的报文。

<Huawei>system-view

[Huawei]acl 4001

[Huawei-acl-L2-4001]rule permitdestination-mac 0000-0000-0002 source-mac 0000-0000-0001 l2-Protocol 0x0800

四、配置用户自定义ACL

用户自定义ACL(简称UCL)可以根据用户自定义的规则对数据报文做出相应的处理。

1、用户自定义ACL的创建

也可创建数字型或者命名型的ACL,不同之处就是取值范围是在5000~5999。

2、用户自定义ACL规则的配置

Rule [Rule-id] {deny | permit } [ [ l2-head | ipv4-head | ipv6-head |l4-head ] { rule-stringrule-mask offset } & <1-8> ] [ time-range time-range] 

示例:在编号为5001的ACL中采用自动分配规则号方式增加一条规则,从二层报文头开始偏移14个字节匹配4个字节的字符串,字符串内容为0180C200

<Huawei>system-view

[Huawei]acl 5001

[Huawei-acl-user-5001]rule permit l2-head0x0180C200 0xFFFFFFFF 14

五、ACL管理

(1)display acl{acl-number | name acl-name | all}查看ACL的相关配置信息

(2)display time-range{all | time-name}查看当前时间段的配置和状态

(3)display aclresource [slot slot-id]查看设备上ACL的资源分配信息。参数slot-id用来指定要查看资源分配信息的槽位信息:在非堆叠情况下,只能是0;在堆叠情况下,表示堆叠ID。

(4)reset aclcounter {name acl-name | acl-number | all}清除ACL的统计信息。