暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为ACL实战:ACL通配符知识点介绍(上)

爱婷如命一生一世 2017-10-16
2042


在上次分享完了华为二层ACL应用配置后,今天深入的对二层ACL的通配符定义做一下技术说明:(认证考试可能会提及,但也不会有多深,需要大概的了解下即可。)


拓扑如下:我现在查看sw1的配置。


我可以看到的是:在acl4001--4002中,其中的定义规则里面全部都是mac地址


而配置基本或者高级ACL时,里面IP定义的规则:

格式如图:一个IP 地址+一个反掩码。

在二层ACL中却不需要反码,我们可以把这样的掩码和反码称之为通配符(表示一批的地址。)。


可以复习下反码的作用:如下图掩码和反码的定义和区别!

对于二层ACL完全可以认为后面跟着就是子网掩码(跟基本和高级ACL定义IP地址跟反码是相反的!),意味着有1的部分对应的IP地址不可动(进行检查)!

假设,我在二层ACL中定义了源mac,后面不跟任何信息,我们可以认为后面跟了FFFF-FFFF-FFFF  ,这就是主机掩码(255.255.255.255.255)!


而通配符的作用:表示一批的地址。可以在二层ACL中利用通配符这一特性来完成ACL你需要的某种需求!


先将pc1和pc14的mac地址单独取出来,然后按照华为二层ACL规则定义对mac地址格式比对:

pc1  :54-89-98-1D-03-2B   =    5489-981D-032B

pc14:54-89-98-FE-4C-1E  =    5489-98FE-4C1E


按照掩码的写法,最后将通配符定义成如下:

                  FFF-FF00-0000

如果这样写的话,会造成很大一个范围的mac地址,( 其中00-0000并不是代表连续的数字,而是 5489-98xx-xxxx ,其中x代表任意一位!)

因为应用场景比较少,因为Mac地址(不是有序的排列)不会是全部包容进来的,这里我就不详细说明。这里,我们只需要知道二层ACL的应用场所和配置了。有空后续会拿出一个详细的说明分享。




回到ACL主线上来,分享一下用户自定义ACL的格式(格式比较复杂,涉及到偏移量)

华为官方按照ACL的规则来区别定义ACL:

 1.基本ACL

 2.高级ACL

 3.二层ACL

 4.用户自定义ACL

 5.用户ACL

 6.IPV4 ACL

 7.IPV6 ACL


用户自定义ACL:根据报文头,偏移量,字符串掩码和用户自定义字符串来定义规则,达到过滤的目的。

在OSI七层模型中,二层数据报文的头部叫帧头;三层数据报文叫IP报头

对照拓扑,随意抓取一个报文,就可以看到二层和三层的报头部分:

每个头部的内部都有很多字段。

比如在二层以太网帧里面的目的,源mac 、类型。


用户自定义ACL的工作机制无非就是控制(匹配)二层以太网帧头部、三层的IP报文头部内的某些字节,匹配成功允许通过,反之拒绝!



先来简单看下用户自定义ACL的格式:涉及帧头和IP报头。

[sw1]acl 5001

[sw1-acl-user-5001]rule per

[sw1-acl-user-5001]rule permit ?

  ipv4-head     Offset from IP(v4) head   

  ipv6-head     Offset from IP(v6) head

  l2-head       Offset from l2 head

  l4-head       Offset from L4 head    (一般不用)

  time-range    Specify a special time

     


因为用户自定义ACL涉及到数据报文的帧头和IP报头:

①帧头部分:

[sw1-acl-user-5001]rule permit l2-head ?

  STRING<3-10>  Rule string, the string must be hexadecimal and start with '0x'

翻译过来的意思是:规则的字符串指的是比较头部中的哪个字段。


举个例子,我拿以太网头部中的类型字段来讲解:

0x0800;0x不难理解就是16进制,其中0x????代表告知设备二层以太网内部携带的数据使用的是何种协议  ,其中0x0800在图中我可以很清楚的看到使用的是IP协议。这就跟数据的解封装有关了,封装是从上层到下层;而解封装是从下层上层协议的,当解封到二层以太网帧头部分,发现三层协议时,设备就会用0x0800这个IP字段翻译出三层数据的意思。属于一个脉络的范围。

[sw1-acl-user-5001]rule permit l2-head 0x0800 

  STRING<3-10>  Mask to the rule string, the string must be hexadecimal and

                start with '0x'

因此,用户自定义的具体格式如下:(这里请忽略配置参数的具体数值。)

[sw1-acl-user-5001]rule permit l2-head 0x0800 0xffff 30 


最后查看配置时,发现多了4个0:系统自动补充。

 rule 10 permit 0x00000800 0x0000ffff 30

系统自动补全的原因在于:

  00000800中的十六进制数有4位2进制数

例如,我在抓包中查看0x0800的类型字段,可以看到占用了两个字符,而这个固定的数值,我们也可以理解成为偏移量。

依此类推各字符占用的位置:

①    二层/三层从报头中,最多可以取出4个字符。(相当于8个16进制数,用户自己指定的值)

而在MAC地址中,它占据了6个字符!在命令行中只允许有4个字符出现,所以在用户自定义ACL中要过滤MAC地址却显得力不从心(一条命令是无法概括的表现。)!



每个数据报文内部的各种数值都是不一样的,比如说0x0800,这里面有个固定的数值,08 00,我们也可以理解成为偏移量的值。

偏移量的概念就是从报头字段中从左往右的位数,数数即可得知。


例如,我抓取以太网帧头部的目的mac地址,看下数据报文中的目的Mac地址的值:分别占用了第一行的1 2 3 4 5 6 个字符。

而依据16进制的原则,我再来看0x0800的数值:实际上它占据了12 13  ,我把54这个字符位是从0开始计算。4位二进制是0-15!这一点需要注意!

所以08 是第十二位置!


因此这里的偏移量我就可以手工的去指定!(那个字段,那个报文数据去取偏移量)29  15:00


文章转载自爱婷如命一生一世,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论