由于一条ACL由多条规则组成,因此这些规则可能存在重复或矛盾等冲突地方,在将一个数据包和ACL的规则进行匹配的时候,到底采用哪些规则呢?此时判断的依据就是规则的匹配顺序,在创建ACL规则时指定的,有两种:配置顺序和自动排序。
配置顺序
顾名思义,是按照配置规则的先后顺序进行匹配;
当创建ACL时如果不指定匹配顺序,则缺省是配置顺序。
[FW1] ACL 3000 match-order config
[FW1] rule 5 permit tcp source-port eq 17
[FW1] rule 10 permit tcp source-port eq 16
[FW1-ACL-if-1000] dis ACL 3000
Advanced ACL 3000, 2 rules
ACL's step is 5
rule 5 permit tcp source-port eq 17 (0 times matched)
rule 10 permit tcp source-port eq 16 (0 times matched)
注意,一般手工配置ACL时,rule后面人为指定一个子规则号,推荐从5开始,多个rule的子规则号以5的倍数增加,保证一定冗余度。目的是当ACL的匹配顺序是配置顺序时,一定程度上能保证rule顺序的正确。举例如下
〔RT1〕ACL number 3000
rule 5 permit tcp source 1.1.0.0 0.0.255.255 source-port eq 14 destination 6.6.6.6 0 destination-port gt 1000
rule 10 permit ip source 2.2.2.2 0.0.0.0
rule 15 deny ip source 3.3.3.3 0.0.0.0
rule 16 permit ip
rule 20 deny ip source 2.2.2.2 0.0.0.0
自动匹配
按照“深度优先”的原则匹配。“深度优先”规则是把指定数据包范围最小的语句排在最前面系统。
具体标准为:
1、 对于标准ACL:直接比较源地址掩码长度,相同的则按配置顺序;
2、 对于接口ACL:配置了“any”的规则排在后面,其它按配置顺序;
3、 对于扩展ACL:将按照如下顺序匹配:
l 协议号;
l 源地址掩码长度;
l 目的地址掩码长度;
l 源端口号;
l 目的端口号;
l 在上述条件相同的情况下,按照配置先后排序。
注意,自动匹配的ACL不能进行编辑,也不能指定子规则号。举例如下
[ne40]ACL number 2003 match-order auto
[ne40-ACL-basic-2003]rule permit
[ne40-ACL-basic-2003]dis ACL 2003
Basic ACL 2003, 1 rule, match-order is auto
ACL's step is 5
rule 0 permit (0 times matched)
[ne16-ACL-basic-2003]rule 0 p s 1.1.1.1 0
Can't edit rule,when match-order is auto //不能编辑
[ne16-ACL-basic-2003]rule 3 p
The ACL's matchorder is auto, so can't specify subitem //不能指定子规则号