3步搞定交换机ACL资源不足
前言
大家好,我是林总,很多业务都会占用ACL资源,而设备的ACL资源是有限的,当ACL资源不足时,则会导致业务应用ACL失败或产生ACL资源不足告警。换设备嘛领导不同意,不换设备有什么办法吗?
本文以V200R019C10版本的华为S5732H系列交换机为例,介绍了ACL资源的基本原理,ACL资源不足的原因,并通过一个例子,讲解了ACL资源优化方法。不同款型及版本之间的ACL资源原理和规格可能存在差异,请以实际设备为准。
正文
ACL资源的基本原理
通常情况下,当用户配置ACL相关的业务时,需要先创建ACL并配置rule规则,随后在全局、VLAN或接口视图下应用ACL。当业务下发成功后,这些rule规则就会占用ACL资源。
通常我们可以通过以下公式简单计算或预估ACL资源占用数量:
ACL资源占用数量rule规则数量业务应用位置的数量业务应用方向的数量rule规则数量:一般情况下,一条rule规则会占用一条ACL资源。如果一条rule规则中指定了TCPUDP端口号范围时,一条rule规则可能会按照拆分成多条规则下发,进而占用多条ACL资源。具体拆分规则可通过displayaclpision命令指定相应的端口号范围进行查看。业务应用位置的数量:业务应用的接口数量或VLAN数量,应用到全局时为记为1。业务应用方向的数量:业务应用到入方向或出方向时记为1,出入方向都应用时记为2。
说明:
部分业务在不需要配置rule规则的情况下也会隐式地下发rule规则,这些不通过配置rule规则占用ACL资源的业务不在本文的讨论范围之内,如黑名单等安全类业务,流量抑制、CPCAR等流量限速业务,上送CPU的报文统计、VLAN的流量统计等流量统计业务。
为了更加直观地介绍如何计算ACL资源占用数量,下面我们通过举例观察设备ACL资源信息变化:
1。首先,查看设备的ACL模块的资源信息。可以看到ACLUnallocated字段显示设备未分配ACL资源共有4096条,ACLAllocated字段显示设备已分配ACL资源共有512条,其中Sec安全类业务已使用146条,设备ACL资源总数量为4608条。
2。配置ACL3000。ACL3000中包含2条rule规则,并将ACL3000应用到接口GE001和GE002的入方向。
aclnumber3000
rule5permitipdestination0。0。0。1255。255。255。0
rule10permitipdestination0。0。0。2255。255。255。0
interfaceGigabitEthernet001
trafficfilterinboundacl3000
interfaceGigabitEthernet002
trafficfilterinboundacl3000
3。再次查看ACL资源信息。IngressACL字段显示设备入方向ACL资源占用数量为2(rule规则数量)2(接口数量)1(入方向)4。
ACL资源不足的原因
导致ACL资源不足的原因主要有如下两个:
原因一:配置使用ACL资源的冗余业务过多
很多业务配置以后长时间不生效或不使用,持续占用大量ACL资源。例如流策略业务、基于ACL的简化流策略业务、本机防攻击业务、iPCA业务等。
原因二:配置使用ACL资源的业务时规划不精细
以下几种情况都会导致ACL资源占用数量成倍增长:配置的rule规则数量过多,没有考虑rule规则合并。业务应用范围过大,将业务应用到过多的接口或VLAN上。业务应用的范围有重叠,相同业务同时应用到全局、VLAN和接口上。
ACL资源的优化方法
对于使用ACL资源的冗余业务过多的情况,可以排查已配置的ACL相关业务,删除其中长时间不生效或不使用的业务。
本章节着重介绍规划ACL相关业务的配置不精细导致ACL资源不足的优化方法,从而在不影响业务的情况下精简业务所占用的ACL资源。为了更好的理解如何优化ACL资源,本章节以流策略业务为例进行介绍。
优化前,某流策略所绑定的ACL中包含1000条rule规则,并且该流策略应用在4个接口的入方向上,则该业务需要占用的ACL资源为1000(rule规则数量)4(接口数量)1(入方向)4000,但当前设备剩余的ACL资源仅为3000,小于该流策略所需的ACL资源4000,因此当前该业务无法成功下发。对应的配置文件如下:
aclnumber3000
rule1permitipsource10。1。1。10destination10。10。1。10
。。。此处省略rule规则的具体配置
rule1000ipsource192。168。10。132
trafficclassifierc1operatorandprecedence5
ifmatchacl3000
trafficbehaviorb1
permit
statisticenable
trafficpolicyp1matchorderconfig
classifierc1behaviorb1
interfaceGigabitEthernet101
portlinktypeaccess
portdefaultvlan10
trafficpolicyp1inbound
interfaceGigabitEthernet102
portlinktypeaccess
portdefaultvlan10
trafficpolicyp1inbound
interfaceGigabitEthernet103
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
interfaceGigabitEthernet104
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
接下来,通过以下三种方法,就可以将该流策略所需占用的ACL资源减少到3000以下,从而满足配置该流策略的ACL资源需求。
1。推荐先尝试使用方法一,合并rule规则,减少rule规则数量。
2。在已经使用方法一的基础上,可以继续使用方法二或方法三,进一步减少ACL资源的使用数量。如果对ACL资源精简数量要求较高,推荐将应用在接口的业务调整至全局,或者配置基于流ID的流策略;如果对ACL资源精简数量要求不高,且应用流策略的接口数量大于接口所属VLAN的数量,推荐将应用在接口的业务调整至VLAN。
表11方法二与方法三的比较
方法一:合并rule规则,减少rule规则数量
分析各rule规则公用的匹配项,找出各规则之间的联系。
本例中的1000条rule规则中包含以下内容:
aclnumber3000
rule1permitipsource10。1。1。10destination10。10。1。10
rule2permitipsource10。1。1。20destination10。10。1。10
rule3permitipsource10。1。1。30destination10。10。1。10
。。。
rule255permitipsource10。1。1。2550destination10。10。1。10
rule256permitipsource10。1。2。10destination10。10。1。10
rule256permitipsource10。1。2。20destination10。10。1。10
rule256permitipsource10。1。2。30destination10。10。1。10
。。。
rule510permitipsource10。1。2。2550destination10。10。1。10
。。。
rule801denytcpdestinationporteqwww80端口
rule802denytcpdestinationporteq81
rule803denytcpdestinationporteq82
。。。
rule830denytcpdestinationporteqpop2109端口
rule831denytcpdestinationporteqpop3110端口
。。。
rule1000xxx
首先,可以通过合并网段来合并rule规则,将rule1rule510合并成以下两条规则。rule1rule510均匹配报文的源IP地址和目的IP地址,且源IP地址覆盖了10。1。1。024和10。。2。024两个网段的所有地址(真实组网中,一般不会通过rule匹配一个网段的所有IP地址,可以结合掩码拆分成多个网段),因此可以将合并成以下两条规则:
aclnumber3000
rule1permitipsource10。1。1。00。0。0。255destination10。10。1。10
rule2permitipsource10。1。2。00。0。0。255destination10。10。1。10
。。。
其次,可以通过range比较符合并端口号来合并rule规则,将rule801rule831合并成一条规则。由于rule801rule831均用到了匹配项TCP目的端口号,且端口号范围覆盖了80110整个号段,因此可以合并成一条规则(通过displayaclpision命令可以查看80110端口号之间rule规则会拆成5条下发):
aclnumber3000
。。。
rule801denytcpdestinationportrange80110
。。。
合并规则后,上例中的规则减少到462条,实际下发的规则为466条,占用的ACL资源数量为1864。计算过程为:461(IP地址合并后的rule规则数量)4(接口数量)1(入方向)1(端口号合并后的rule规则数量)5(按range拆分后的rule规则数量)4(接口数量)1(入方向)1864,小于设备剩余的ACL资源数量(3000条),因此能够满足配置该流策略的ACL资源需求。
通过方法一合并rule规则为466条后,还可以在此基础上通过方法二或者方法三进一步精简ACL资源。
方法二:调整业务应用范围,减少业务应用位置的数量
在通过方法一合并rule规则后,可以选择以下任意一种方式,调整业务应用范围,从而继续精简ACL资源数量。将应用在接口的业务调整至VLAN
如果应用流策略的接口数量大于这些接口所属VLAN的数量,且未应用流策略的接口均不属于这些VLAN,则可以将流策略应用到这些接口所属的VLAN下。调整应用范围后的ACL资源占用数量为rule规则数量VLAN数量,小于之前的rule规则数量接口数量。否则,建议将应用在接口的业务调整至全局。
由前文流策略中的配置可知,GE101和GE102属于VLAN10,GE103和GE104属于VLAN20,其他接口均不属于VLAN10和VLAN20,此时VLAN的数量小于接口的数量,则可以将流策略应用在VLAN10和VLAN20下。
在通过方法一优化后、通过本方法优化前,对应的配置文件如下:
aclnumber3000
rule1permitipsource10。1。1。00。0。0。255destination10。10。1。10
rule2permitipsource10。1。2。00。0。0。255destination10。10。1。10
。。。
rule801denytcpdestinationportrange80110
。。。
rule1000ipsource192。168。10。132
trafficclassifierc1operatorandprecedence5
ifmatchacl3000
trafficbehaviorb1
permit
statisticenable
trafficpolicyp1matchorderconfig
classifierc1behaviorb1
interfaceGigabitEthernet101
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
interfaceGigabitEthernet102
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
interfaceGigabitEthernet103
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
interfaceGigabitEthernet104
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
在使用方法一的基础上,使用本方法调整后,对应的配置文件如下:
aclnumber3000
rule1permitipsource10。1。1。00。0。0。255destination10。10。1。10
rule2permitipsource10。1。2。00。0。0。255destination10。10。1。10
。。。
rule801denytcpdestinationportrange80110
。。。
rule1000ipsource192。168。10。132
trafficclassifierc1operatorandprecedence5
ifmatchacl3000
trafficbehaviorb1
permit
statisticenable
trafficpolicyp1matchorderconfig
classifierc1behaviorb1
vlan10
trafficpolicyp1inbound
vlan20
trafficpolicyp1inbound
interfaceGigabitEthernet101
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet102
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet103
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet104
portlinktypeaccess
portdefaultvlan20
调整后,ACL资源占用数量降低到932条,在合并rule规则的基础上进一步减少了ACL资源需求数量。计算过程为:466(rule规则数量)2(VLAN数量)1(入方向)932。将应用在接口的业务调整至全局
可以将流策略应用到全局,并在不应用该流策略的接口下各配置一条让全局的配置不生效的流策略,利用接口优先级大于全局优先级的原则,实现相同的配置效果。
由前文流策略中的配置可知,需要在接口的GE101GE104入方向上应用流策略。此时,若仅有接口GE105的入方向不可以应用该流策略,且其他所有接口的入方向都可以应用该流策略,则可以将该流策略应用到全局,并在接口GE105上应用分类规则相同的不同流策略(例如流策略p2)。
在使用方法一的基础上,继续使用本方法调整后,对应的配置文件如下:
aclnumber3000
rule1permitipsource10。1。1。00。0。0。255destination10。10。1。10
rule2permitipsource10。1。2。00。0。0。255destination10。10。1。10
。。。
rule801denytcpdestinationportrange80110
。。。
rule1000ipsource192。168。10。132
aclnumber3001
rule5permitip匹配所有IP报文
trafficclassifierc1operatorandprecedence5
ifmatchacl3000
trafficclassifierc2operatorandprecedence10
ifmatchacl3001
trafficbehaviorb1
permit
statisticenable
trafficbehaviorb2
permit
trafficpolicyp1matchorderconfig
classifierc1behaviorb1
trafficpolicyp2matchorderconfig
classifierc2behaviorb2
interfaceGigabitEthernet101
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet102
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet103
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet104
portlinktypeaccess
portdefaultvlan20
interfaceGigabitEthernet105
trafficpolicyp2inbound
trafficpolicyp1globalinbound
调整应用范围后的ACL资源占用数量降低到467条,在合并rule规则的基础上进一步减少了ACL资源需求数量。计算过程为:466(rule规则数量)1(全局)1(入方向)1(rule规则数量)1(接口数量)1(入方向)467。
该方法一般应用于接入层设备。当设备所有下行接口都应用相同的流策略,且所有上行接口不应用流策略时,则可以将该流策略应用到全局,并在每个上行接口应用与下行接口不相同的流策略,使全局应用的流策略在上行接口不生效。由于下行接口数量通常大于上行接口数量,因此通过该方法可以节省ACL资源。
方法三:配置基于流ID的流策略,综合节省ACL资源
在方法一的基础上,还可以通过方法三来继续减少ACL资源使用数量。
对于流策略业务,当设备上不同的接口或VLAN需要配置相同的流分类规则并对匹配的报文做相同的动作时,为节省ACL资源,可以将一条流策略拆分成两条,第一条对报文按照ACL分类后重标记每类报文的流ID,第二条按照流ID进行分类并对匹配同一流ID的报文进行相同的处理。该功能仅适用于应用在入方向的流策略。
如果不配置该功能,流策略占用的ACL资源数量为rule规则数量接口数量(或VLAN数量)1(入方向);配置该功能后,流策略占用的ACL资源数量为rule规则数量1(全局)1(入方向)1(流ID)接口数量(或VLAN数量)1(入方向)。
配置思路如下:
1。配置ACL,并指定rule规则。
本例中,已经通过方法一合并rule规则。合并后的rule规则如下:
aclnumber3000
rule1permitipsource10。1。1。00。0。0。255destination10。10。1。10
rule2permitipsource10。1。2。00。0。0。255destination10。10。1。10
。。。
rule801denytcpdestinationportrange80110
。。。
rule1000ipsource192。168。10。132
2。配置流分类,按照ACL对报文进行分类。
本例中,已经配置流分类c1,用于匹配符合ACL3000的报文。
trafficclassifierc1operatorandprecedence5
ifmatchacl3000
3。配置流行为,通过remarkflowid命令重新标记报文的流ID。
配置流行为b3,用于重新标记报文的流ID。例如,重新标记流ID为4。
trafficbehaviorb3
remarkflowid4
4。配置流策略,绑定已配置的流行为和流分类,并应用到全局。
配置流策略p3,绑定流分类c1和流行为b3,并应用到全局的入方向。
trafficpolicyp3matchorderconfig
classifierc1behaviorb3
trafficpolicyp3globalinbound
5。配置流分类,通过ifmatchflowid命令对报文进行分类。
配置流分类c3,匹配流ID为4的报文。
trafficclassifierc3operatorandprecedence10
ifmatchflowid4
6。配置流行为,以便对匹配同一流ID的报文进行相同的处理。
本例中,已经配置流行为b1,用于对报文进行流量统计。
trafficbehaviorb1
statisticenable
7。配置流策略,绑定以配置的流行为和流分类,并应用到接口或VLAN上。
trafficpolicyp1matchorderconfig
classifierc3behaviorb1
interfaceGigabitEthernet101
trafficpolicyp1inbound
interfaceGigabitEthernet102
trafficpolicyp1inbound
interfaceGigabitEthernet103
trafficpolicyp1inbound
interfaceGigabitEthernet104
trafficpolicyp1inbound
最终流策略业务的相关配置如下:
aclnumber3000
rule1permitipsource10。1。1。00。0。0。255destination10。10。1。10
rule2permitipsource10。1。2。00。0。0。255destination10。10。1。10
。。。
rule801denytcpdestinationportrange80110
。。。
rule1000ipsource192。168。10。132
trafficclassifierc1operatorandprecedence5
ifmatchacl3000
trafficclassifierc3operatorandprecedence10
ifmatchflowid4
trafficbehaviorb1
permit
statisticenable
trafficbehaviorb3
remarkflowid4
trafficpolicyp1matchorderconfig
classifierc3behaviorb1
trafficpolicyp3matchorderconfig
classifierc1behaviorb3
interfaceGigabitEthernet101
portlinktypeaccess
portdefaultvlan10
trafficpolicyp1inbound
interfaceGigabitEthernet102
portlinktypeaccess
portdefaultvlan10
trafficpolicyp1inbound
interfaceGigabitEthernet103
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
interfaceGigabitEthernet104
portlinktypeaccess
portdefaultvlan20
trafficpolicyp1inbound
trafficpolicyp3globalinbound
上述举例中,配置基于流ID的流策略的功能后,占用的ACL资源降低到470条,在合并rule规则的基础上进一步减少了ACL资源需求数量。计算过程为:466(rule规则数量)1(全局)1(入方向)1(流ID)4(接口数量)1(入方向)470条。
最后再复习一下:
1。首先,推荐先尝试合并rule规则,减少rule规则数量。
2。其次,如果对ACL资源精简数量要求较高,推荐将应用在接口的业务调整至全局,或者配置基于流ID的流策略;如果对ACL资源精简数量要求不高,且应用流策略的接口数量大于接口所属VLAN的数量,推荐将应用在接口的业务调整至VLAN。