龙空技术网

ACL常用的匹配项

阿豪的笔记 226

前言:

此刻你们对“acl通配符匹配算法”大致比较关怀,朋友们都想要分析一些“acl通配符匹配算法”的相关内容。那么小编在网摘上搜集了一些关于“acl通配符匹配算法””的相关文章,希望我们能喜欢,我们快快来学习一下吧!

生效时间段

ACL的生效时间段可以规定ACL规则在何时生效,从而实现在不同的时间段设置不同的策略。

在ACL规则中引用的生效时间段存在两种模式:

周期时间段:以星期为参数来定义时间范围,表示规则以一周为周期(如每周一的8至12点)循环生效。绝对时间段:从某年某月某日的某一时间开始,到某年某月某日的某一时间结束,表示规则在这段时间范围内生效。

同一名称(time-name)配置多条时间段时,通过以下规则选出最终生效的时间范围:

多个周期时间段之间是或的关系,多个绝对时间段之间也是或的关系。周期时间段和绝对时间段之间是与的关系。如果周期时间段和绝对时间段之间冲突,配置的时间段不生效。

例如,在ACL 2001中引用了时间段“test”,“test”包含了三个生效时间段:

time-range test 8:00 to 18:00 working-day

time-range test 14:00 to 18:00 off-day

time-range test from 00:00 2014/01/01 to 23:59 2014/12/31

#

acl number 2001

rule 5 permit time-range test

时间段“test”最终描述的时间范围为:2014年的周一到周五每天8:00到18:00以及周六和周日下午14:00到18:00。

如果第三个时间配置为2014年1月1日19:00起到2014年12月31日21:00,则时间段“test”无效。

源/目的IP地址及其通配符掩码

源IP地址及其通配符掩码格式:source { source-address source-wildcard| any }

目的IP地址及其通配符掩码格式:destination { destination-address destination-wildcard | any }

将源/目的IP地址定义为规则匹配项时,需要在源/目的IP地址字段后面同时指定通配符掩码,用来与源/目的IP地址字段共同确定一个地址范围。

IP地址通配符掩码是一个32比特位的数字字符串,用于指示IP地址中的哪些位将被检查。各比特位中,“0”表示“检查相应的位”,“1”表示“不检查相应的位”。

例如:

rule 5 permit ip source 192.168.1.0 0.0.0.255

规则中的通配符掩码为0.0.0.255,表示只需检查IP地址的前三组二进制八位数对应的比特位,即允许该报文报文的源IP地址是192.168.1.0/24网段的地址通过。

源/目的MAC地址及其通配符掩码

源MAC地址及其通配符掩码格式:source-mac source-mac-address [ source-mac-mask ]

目的地址及其通配符掩码格式:destination-mac dest-mac-address [ dest-mac-mask ]

可以在源/目的MAC地址字段后面同时指定通配符掩码,用来与源/目的MAC地址字段共同确定一个地址范围。如果不配置通配符掩码,范围为配置MAC本身。

MAC地址通配符掩码的格式与MAC地址相同,采用十六进制数表示,共六个字节(48位),各比特位中,1表示“检查相应的位”,0表示“不检查相应的位”。

表1 MAC地址与通配符掩码共同确定的地址范围

MAC地址

MAC地址通配符掩码

确定的地址范围

00e0-fc01-0101

0000-0000-0000

任意MAC地址

00e0-fc01-0101

ffff-ffff-ffff

仅00e0-fc01-0101这一个MAC地址

00e0-fc01-0101

ffff-ffff-0000

00e0-fc01-0000~00e0-fc01-ffff

VLAN编号及其掩码

外层VLAN及其掩码格式:vlan-id vlan-id [ vlan-id-mask ]

内层VLAN及其掩码格式:cvlan-id cvlan-id [ cvlan-id-mask ]

可以在VLAN编号字段后面同时指定VLAN掩码,用来与VLAN编号字段共同确定一个VLAN范围。如果不指定VLAN掩码,则为配置VLAN编号本身。

VLAN掩码的格式是十六进制形式,取值范围是0x0~0xFFF。各比特位中,1表示“检查相应的位”,0表示“不检查相应的位”。

表2 VLAN编号及其掩码共同确定的VLAN范围

VLAN编号

VLAN掩码

确定的VLAN范围

10

0x000

任意VLAN

10

0xFFF

仅VLAN 10

10

0xFF0

VLAN 1~VLAN 15

IP承载的协议类型

格式:protocol-number | icmp | tcp | udp | gre | igmp | ip | ipinip | ospf

高级ACL支持基于协议类型过滤报文,常用的协议类型如下表所示。

协议类型

协议编号

ICMP

1

TCP

6

UDP

17

GRE

47

IGMP

2

IPinIP

4

OSPF

89

TCP/UDP端口号

源端口号格式:source-port { eq port | gt port | ltport | range port-start port-end }

目的端口号格式:destination-port { eq port | gt port | ltport | range port-start port-end }

其中,TCP/UDP端口号的比较符含义如下:

eq port:指定等于源/目的端口。gt port:指定大于源/目的端口。lt port:指定小于源/目的端口。range port-start port-end:指定源/目的端口的范围。port-start是端口范围的起始,port-end是端口范围的结束。

TCP/UDP端口号可以使用数字表示,也可以用字符串(助记符)表示。例如,rule deny tcp destination-port eq 80,可以用rule deny tcp destination-port eq www替代。

TCP标志信息

格式:tcp-flag { ack | established | fin | psh | rst | syn | urg }*

在高级ACL中,当协议类型指定为TCP时,设备支持基于TCP标志信息过滤报文。指定tcp-flag的ACL规则可以用来实现单向访问控制。

假设,要求192.168.1.0/24网段用户可以主动访问192.168.2.0/24网段用户,但反过来192.168.2.0/24网段用户不能主动访问192.168.1.0/24。可通过在设备上连接192.168.2.0/24网段的接口入方向上,应用ACL规则来实现该需求。

由TCP建立连接和关闭连接的过程可知,只有在TCP中间连接过程的报文才会ACK=1或者RST=1。根据这个特点,配置如下两种ACL规则,允许TCP中间连接过程的报文通过,拒绝其他TCP报文通过,就可以限制192.168.2.0/24网段主动发起的TCP连接。

方法一:配置指定ackrst参数的ACL规则

rule 5 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag ack

rule 10 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag rst

rule 15 deny tcp source 192.168.2.0 0.0.0.255

方法二:配置指定established参数的ACL规则

rule permit tcp source 192.168.2.0 0.0.0.255 tcp-flag established

rule deny tcp source 192.168.2.0 0.0.0.255

说明:

ACK(acknowledge):表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为1。

FIN(finish):标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。

PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。

RST(reset):表示是否重置连接。如果RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。

SYN(synchronize):在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN才为 1。

URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。

TCP标志信息中的established,表示标志位为ACK(010000)或RST(000100)。

IP分片信息

格式:fragment

IP分片除了首片报文外,还有后续分片报文,即非首片分片报文。仅首片分片报文携带四层信息(如TCP/UDP端口号等),后续分片报文均不携带。网络设备收到分片报文后,会判断其是否是最后一个分片报文。如果不是,则为其分配内存空间,以便于最后一个分片报文到达后完成重组。黑客可以利用这一点,向接收方设备发起分片报文攻击,始终不向接收方发送最后一个分片报文。

为了解决这个问题,可以配置指定fragment匹配项的ACL规则来阻塞非首片分片报文,从而达到防范分片报文攻击的目的。

针对非分片报文、首片分片报文、非首片分片报文这三类报文,ACL的处理方式如表4所示。

表4 ACL对IP分片报文的处理方式

规则包含的匹配项

非分片报文

首片分片报文

非首片分片报文

三层信息(如源/目的IP地址)

三层信息匹配上,则返回匹配结果;

未匹配上,则转下一条规则进行匹配

三层信息匹配上,则返回匹配结果;

未匹配上,则转下一条规则进行匹配

三层信息匹配上,则返回匹配结果;

未匹配上,则转下一条规则进行匹配

三层信息 + 四层信息(如TCP/UDP端口号)

三层和四层信息都匹配上,则返回匹配结果;

未匹配上,则转下一条规则进行匹配

三层和四层信息都匹配上,则返回匹配结果;

未匹配上,则转下一条规则进行匹配

不匹配,转下一条规则进行匹配

三层信息 + fragment

不匹配,转下一条规则进行匹配

不匹配,转下一条规则进行匹配

三层信息匹配上,则返回匹配结果;

未匹配上,则转下一条规则进行匹配

例如,ACL 3012中存在以下规则:

acl number 3012

rule 5 deny tcp destination 192.168.2.2 0 fragment

rule 10 permit tcp destination 192.168.2.2 0 destination-port eq www

rule 15 deny ip

对于目的IP地址是192.168.2.2的TCP报文:

该报文是非分片报文或首片分片报文时:

如果该报文的目的端口号是80,则报文与rule 10匹配,报文被允许通过;

如果该报文的目的端口号不是80,则报文与rule 15匹配,报文被拒绝通过。该报文是非首片分片报文时:

该报文与rule 5匹配,报文被拒绝通过。

标签: #acl通配符匹配算法