ACL的步长设定
步长的含义
步长,是指系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值。
系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值作为该规则的起始编号;为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。例如ACL中包含规则rule 5和rule 12,ACL的缺省步长为5,大于12且是5的倍数的最小整数是15,所以系统分配给新配置的规则的编号为15。
基本ACL6和高级ACL6不支持步长设定,缺省步长为5。
步长的作用
设置步长的作用,在于方便后续在旧规则之间插入新的规则。
假设,一条ACL中,已包含了三条规则rule 5、rule 10、rule 15,步长是5。
rule 5 deny source 10.1.1.1 0 //表示拒绝源IP地址为10.1.1.1的报文通过
rule 10 deny source 10.1.1.2 0 //表示拒绝源IP地址为10.1.1.2的报文通过
rule 15 permit source 10.1.1.0 0.0.0.255 //表示允许源IP地址为10.1.1.0/24网段地址的报文通过
如果希望源IP地址为10.1.1.3的报文也被拒绝通过,该如何处理?由于ACL匹配报文时遵循“一旦命中即停止匹配”的原则,rule 15规则定义的网段包含10.1.1.3,所以源IP地址为10.1.1.3的报文,会命中rule 15而允许通过。若想让源IP地址为10.1.1.3的报文也被拒绝通过,则必须在rule 15之前插入一条新规则rule 11,这样源IP地址为10.1.1.3的报文,就会因先命中rule 11而被系统拒绝通过。如果这条ACL的规则间隔是1(rule 1、rule 2、rule 3…),这时再想插入新的规则,就只能先删除已有的规则,然后再配置新规则,最后将之前删除的规则重新配置还原。
rule 5 deny source 10.1.1.1 0 //表示禁止源IP地址为10.1.1.1的报文通过
rule 10 deny source 10.1.1.2 0 //表示禁止源IP地址为10.1.1.2的报文通过
rule 11 deny source 10.1.1.3 0 //表示拒绝源IP地址为10.1.1.3的报文通过 rule 15 permit source 10.1.1.0 0.0.0.255 //表示允许源IP地址为10.1.1.0网段地址的报文通过
概述:
常用的路由选择工具:过滤器,只匹配,不调用就不会生效。

步长,是指系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值。也就是说,系统是根据步长值自动为ACL规则分配编号的。
图中的ACL 2000,步长就是5(默认值)。系统按照5、10、15…这样的规律为ACL规则分配编号。如果将步长调整为了2,那么规则编号会自动从步长值开始重新排列,变成2、4、6…。
ACL的缺省步长值是5。通过display acl acl-number命令,可以查看ACL规则、步长等配置信息。通过step step命令,可以修改ACL步长值。
实际上,设置步长的目的,是为了方便大家在ACL规则之间插入新的规则。
如果ACL规则之间间隔不是5,而是1(rule 1、rule 2、rule 3…),这时再想插入新的规则,该怎么办呢?只能先删除已有的规则,然后再配置新规则,最后将之前删除的规则重新配置回来。如果这样做,那付出的代价可真是太大了。
所以,通过设置ACL步长,为规则之间留下一定的空间,后续再想插入新的规则,就非常轻松了。
ACL的匹配规则:
报文到达设备时,设备从报文中提取信息,并将该信息与ACL中的规则进行匹配,只要有一条规则和报文匹配,就停止查找,称为命中规则。查找完所有规则,如果没有符合条件的规则,称为未命中规则。
ACL的规则分为“permit”(允许)规则和“deny”(拒绝)规则。
综上所述,ACL可以将报文分成三类:
• 命中“permit”规则的报文
• 命中“deny”规则的报文
• 未命中规则的报文,华为ACL缺省隐含最后一条规则为permit,思科默认不通过。
每条规则都拥有自己的规则编号,如5、10、4294967294。这些编号,可以自行配置,也可以由系统自动分配。ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。所以,上图中我们可以看到rule 5排在首位,而规则编号最大的rule 4294967294排在末位。系统按照规则编号从小到大的顺序,将规则依次与报文匹配,一旦匹配上一条规则即停止匹配。不同的编号代表的一样都相同吗?当然不是,不同范围编号的ACL有着不一样的功能,也就是它们属于不同的ACL。你可以选择二层以太网帧头信息(如源MAC、目的MAC、以太帧协议类型)作为匹配选项,也可以选择三层报文信息(如源地址、目的地址、协议类型)作为匹配选项,还可以选择四层报文信息(如TCP/UDP端口号)等等。
图解如下:

实际上,按照ACL规则功能的不同,ACL被划分为基本ACL、高级ACL、二层ACL、用户自定义ACL和用户ACL这五种类型。每种类型ACL对应的编号范围是不同的。ACL 2000属于基本ACL,ACL 3998属于高级ACL。高级ACL可以定义比基本ACL更准确、更丰富、更灵活的规则,所以高级ACL的功能更加强大。具体分类如下:


我们可以看到,命名型ACL其实只是给ACL取了一个名字的,但是到底具有什么功能还是需要自己配置相应的编号。如果不配置相应的编号,默认都是高级ACL,并且从3999依次递减。
注意:ACL的名称对于ACL全局唯一,但允许基本ACL与基本ACL6,高级ACL与高级ACL6使用相同的名称。
ACL的匹配顺序:
虽然我们之前介绍的ACL匹配顺序都是通过序号由上到下进行匹配的,但是在华为的路由器中(交换机中没有)还有一种ACL的匹配顺序的方式:

如果在acl 3001中插入rule deny ip destination 1.1.1.1 0(目的IP地址是主机地址,优先级高于上图中的两条规则):

系统将按照规则的优先级关系,重新为各规则分配编号。插入新规则后,新的排序如下:

可以看到,rule deny ip destination 1.1.1.1 0的优先级最高,排列最靠前。
注意在配置的时候,auto模式不能配置编号,对于的编号是通过系统排序后按照步长自动生成的,默认步长为,也就是从开始排序:

这里又引出了ACL中为什么把最严格的放在前面是最好的,是因为将精确的提前匹配执行指定的操作,防止以后范围大的将其匹配到做出自己不想要的操作。
又例如直接通过ACL过滤流量的时候,基本ACL匹配的范围大,高级ACL范围小,我们将匹配更精确的ACL放在离源近的地方做精确过滤,如果基本ACL放在源处,可能将不想过滤的条目都过滤了。例如想过滤源为1.1.1.1/24,目的地址为2.2.2.2/24的条目,如果配置基本ACL只能匹配源,让其他目的地的都被过滤了。所以满足条件的情况下基本ACL更应该放在离目的近的地方,这样对源过滤相对来说还是比较精确,当然高级ACL也可以,毕竟高级ACL有基本ACL的所有功能,但是好处是基本ACL更方便配置,没必要大才小用,还浪费更多的CPU资源。
ACL其他特性:

一、ACL对分片报文的支持
传统的包过滤并不处理所有IP 报文分片,而是只对第一个(首片)分片报文进行匹配处理,后续分片一律放行。这样,网络攻击者可能构造后续的分片报文进行流量攻击,带来安全隐患。
在ACL规则中,通过参数fragment来标识该ACL规则对所有分片报文有效,而对非分片报文则忽略此规则;通过参数none-first-fragment来标识该规则仅对非首片分片报文有效,而对非分片报文和首片分片报文则忽略此规则。不包含参数fragment或none-first-fragment的配置规则项对所有报文(包括分片报文)均有效。
相应配置:在条目后加入fragment参数
[Huawei-acl-basic-2005]rule 5 permit source any fragment
[Huawei-acl-basic-2005]rule 5 permit source any none-first-fragment
二、ACL生效时间段
可以使ACL规则需要在某个或某些特定时间内生效,而在其他时间段则不生效。
第一种模式 相对时间段:以星期为参数来定义时间范围。
格式为:time-range time-name start-time to end-time { days } &<1-7>
• time-name:时间段名称,以英文字母开头的字符串。
• start-time to end-time:开始时间和结束时间。格式为[小时:分钟] to [小时:分钟]。
• days:有多种表达方式:
Mon、Tue、Wed、Thu、Fri、Sat、Sun中的一个或者几个的组合,也可以用数字表达,0表示星期日,1表示星期一,……6表示星期六。
working-day:从星期一到星期五,五天。
daily:包括一周七天。
off-day:包括星期六和星期日,两天。
第二种模式 绝对时间段:从某年某月某日的某一时间开始,到某年某月某日的某一时间结束。
格式为:time-range time-name from time1 date1 [ to time2 date2 ]
• time:格式为 [小时:分钟]。
• date:格式为[YYYY/MM/DD],表示年/月/日。
什么情况下可以使用生效时间段作为匹配项?
例如,每天20:00~22:00为网络流量的高峰期,大量P2P、下载类业务的使用影响了其他数据业务的正常使用,此时通过设置在这个时间段内降低P2P、下载类业务的带宽,可以防止网络拥塞。配置如下:
time-range time1 20:00 to 22:00 daily
再举一例,某公司对外开放服务器的访问权限,但开放时间限制为:从2018年1月1日零点开始生效,到2018年12月31日晚上23:59截止。此时通过设置在这个时间段内访问服务器的报文才允许通过,就可以达到基于时间的访问权限控制的效果。配置如下:
time-range time2 from 00:00 2014/1/1 to 23:59 2014/12/31
最后,配置完时间段,千万别忘记要将时间段与ACL规则关联起来,这样才是一条基于时间的ACL的完整配置过程。
注意:使用同一time-name可以配置多条不同的时间段,以达到这样的效果:各周期时间段之间以及各绝对时间段之间分别取并集之后,再取二者的交集作为最终生效的时间范围。并且如果规则引用的时间段未配置,规则不能立即生效,直到用户配置了引用的时间段,并且系统时间在指定时间段范围内,ACL规则才能生效。
配置如下:
acl acl-number
rule [ rule-id ] { deny | permit } other-options time-range time-name
ACL配置:
一、执行命令acl { [ number ] acl-number | name acl-name { [ number ] acl-number | basic } },创建XX ACL,并进入XX ACL视图。
基本ACL编号acl-number的范围是2000~2999。
高级ACL编号acl-number的范围是3000~3999。
二层ACL编号acl-number的范围是4000~4999。
用户自定义ACL编号acl-number的范围是5000~5999。
基于ARP的ACL编号acl-number的范围是23000~23999。
基本ACL6编号acl6-number的范围是2000~2999。
高级ACL6编号acl6-number的范围是3000~3999。
二、设置步长:在ACL模式下执行命令step step,配置步长。
三、创建规则:以基本ACL为例子,其他ACL情况类似
执行命令rule [ rule-id ] { deny | permit } [ fragment-type fragment | source { source-ip-address { source-wildcard | 0 | src-netmask } | any } | time-range time-name | vpn-instance vpn-instance-name | logging ] *,配置基本ACL的规则。
字段解释:
rule-id:自动生成,初始步长为5,按照倍数往后累加,也可以自定义步长。
2.deny | permit:指定拒绝或允许符合条件的数据包。
source-address:表示源地址。
source-wildcard:表示指定源地址的通配符,any 表示任意源地址,也可以
用0.0.0.0 255.255.255.255来表示。
time-range: 用来规定ACL生效的时间段。
vpn-instance:
用来指定ACL规则匹配报文的VPN实例名称。
fragment:用来对分片的报文进行匹配。如果携带了该参数,被分片的数据包
将会被匹配到。.
none- frst-fragment:用来对非首片分片报文生效,如果携带参数则说明只用来
匹配非首片报文。
ACL应用实验:
流量过滤器是专门为ACL准备的调用方法,只能调用ACL,并且在接口上配置时可以分根据流量的出方向和入方向进行过滤,但是不能过滤自己产生的流量。

实验拓扑:

然后在R2上配置针对于PC1的策略,让其只能在周末早上8-10点访问R2,并且只对分段的报文的所有报文进行检查:
time-range time 08:00 to 10:00 working-day //设置时间段
Basic ACL 2000, 1 rule
Acl’s step is 5 //设置ACL,在对应时间段对只对PC1发出的分段报文检查,,动作为不放行,其他报文忽略,在其他时间段,一律放行所有流量
rule 5 deny source 10.1.1.100 0 fragment time-range time(Inactive) //inactive说明不在时间段内

都是先发了分段的报文,在最后才发送真正的ICMP报文。分段报文有4个,每个1480字节+IP头部20字节为1500字节,总共为4x1480=5920,还有80字节在真正的ICMP报文中带有:

查看ICMP报文的片偏移为:5920,说明没有错误,所以ICMP的data字段为80。

另外需要注意的是,6000代表的是数据字段有6000bytes,并不加上ICMP报头的8字节。
ACL应用场景:

参考资料:华为hedex文档
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/4654.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
打赏

微信支付宝扫一扫,打赏作者吧~
休息一下~~