访问控制列表的匹配顺序一个访问控制列表可以由多条“permit|deny”语句组成,每一条语句描述的规则是不相同,这些规则可能存在重复或矛盾的地方,在将一个数据包和访问控制列表的规则进行匹配的时候,到底采用哪些规则呢?就需要确定规则的匹配顺序。有两种匹配顺序:配置顺序自动排序"配置顺序",是指按照用户配置ACL的规则的先后进行匹配。自动排序使用“深度优先”的原则。“深度优先”规则是把指定数据包范围最小的语句排在最前面。这一点可以通过比较地址的通配符来实现,通配符越小,则指定的主机的范围就越小。比如129.102.1.10.0.0.0指定了一台主机:129.102.1.1,而129.102.1.10.0.255.255则指定了一个网段:129.102.1.1~129.102.255.255,显然前者在访问控制规则中排在前面。具体标准为:对于基本访问控制规则的语句,直接比较源地址通配符,通配符相同的则按配置顺序;对于基于接口的访问控制规则,配置了“any”的规则排在后面,其它按配置顺序;对于高级访问控制规则,首先比较源地址通配符,相同的再比较目的地址通配符,仍相同的则比较端口号的范围,范围小的排在前面,如果端口号范围也相同则按配置顺序。使用displayacl命令就可以看出是哪条规则首先生效。显示时,列在前面的规则首先生效。注:①访问控制列表能被匹配的前提是FirewallEnable。②要注意Firewall默认的规则是Permit还是Deny>如果默认为permit,则没有被匹配的数据流采取的动作为允许。>如果默认为deny,则没有被匹配的数据流采取的动作为禁止。例如:Aclnumber3000rule0permitipsource192.168.1.30(rule1denyipany)-----在最后隐藏了这样一条命令,也就是说来此非192.168.1.3的数据流都被拒绝。③防火墙开关与否对Nat的Acl匹配没有影响。具体解解释:在一条ACL中可以制定多条规则,这些规则可能产生交集,即某些报文可能同时符合一条ACL中的多条规则。例如在ACL3001种配置有如下规则:rulepermitipsource1.0.0.00.255.255.255destination5.5.0.00.0.255.255ruledenyipsource1.0.0.00.255.255.255destination5.5.5.50rulepermittcpsource1.1.1.10ruledenyudpsource1.1.0.00.0.255.255将这个ACL应用到接口上,就会产生这样一个问题。即对于一个源地址为1.1.1.1,目的地址为5.5.5.5的IP报文,它符合ACL3001中的所有规则,那么对这个报文应该采取哪条规则定义的动作来操作呢?为了解决这一问题,我们定义了ACL中各规则的匹配顺序称为匹配规则,各规则依据匹配规则重新排序,报文按其顺序依次匹配。目前主要定义有如下两种匹配规则:1按照配置顺序的匹配规则:这种方式比较易于理解,即按设计者录入规则的先后顺序对报文进行匹配。对于上例,匹配顺序如下:[AR29-acl-adv-3001]displaythis#aclnumber3001rule0permitipsource1.0.0.00.255.255.255destination5.5.0.00.0.255.255rule1denyipsource1.0.0.00.255.255.255destination5.5.5.50rule2permittcpsource1.1.1.10rule3denyudpsource1.1.1.10.0.255.255#return因而,对于源为1.1.1.1,目的为5.5.5.5的报文就被匹配了第一条规则,而允许通过了。华为产品默认的是这种匹配顺序。指定这种匹配规则的命令是aclnum3001match-orderconfig。2按照深度的匹配规则所谓深度就是一条规则所限制范围的大小,限制范围越小深度就越深。这里要特别指出的是,我们认为所有含有四层信息的规则都比只含三层信息的规则“深”。下面详细介绍一下,在深度匹配中最为重要的反掩码的原理。所谓反掩码顾名思义就是将原来掩码中的“1”改写为“0”,“0”改写为“1”。例如:255(11111111).255(11111111).128(10000000).0(00000000)改写为0(00000000).0(00000000).127(01111111).255(11111111)。于是在原掩码中“1”对应的网络位变为反掩码中“0”所对应得位。但反掩码的一个特点是它允许0位不连续,即能出现0.255.0.127的情况。之所以使用反掩码也正是由于它的这个特点,因为在掩码中是严格要求0或1必须连续分布的。反掩码的这一特点大大扩展了ACL应用的灵活性,使得原本需要多条规则才能涵盖的范围用一条规则就能完全覆盖。结合深度的定义,我们可以知道在各条规则都...