设备支持的ACL匹配项种类非常丰富,其中最常用的匹配项包括以下几种。 生效时间段格式:time-range time-name 所有ACL均支持根据生效时间段过滤报文。
IP承载的协议类型格式:protocol-number | icmp | tcp | udp | gre | igmp | ip | ipinip | ospf 高级ACL支持基于协议类型过滤报文。常用的协议类型包括:ICMP(协议号1)、TCP(协议号6)、UDP(协议号17)、GRE(协议号47)、IGMP(协议号2)、IP(指任何IP层协议)、IPinIP(协议号4)、OSPF(协议号89)。协议号的取值可以是1~255。 例如,当设备某个接口下的用户存在大量的攻击者时,如果希望能够禁止这个接口下的所有用户接入网络,则可以通过指定协议类型为IP来屏蔽这些用户的IP流量来达到目的。配置如下:rule deny ip //表示拒绝IP报文通过
再如,设备上打开透明防火墙功能后,在缺省情况下,透明防火墙会在域间丢弃所有入域间的报文,包括业务报文和协议报文。如果希望像OSPF这样的动态路由协议报文能正常通过防火墙,保证路由互通,这时,通过指定协议类型为OSPF即可解决问题。rule permit ospf //表示允许OSPF报文通过
源/目的IP地址及其通配符掩码源IP地址及其通配符掩码格式:source { source-address source-wildcard | any } 目的IP地址及其通配符掩码格式:destination { destination-address destination-wildcard | any } 基本ACL支持根据源IP地址过滤报文,高级ACL不仅支持源IP地址,还支持根据目的IP地址过滤报文。 将源/目的IP地址定义为规则匹配项时,需要在源/目的IP地址字段后面同时指定通配符掩码,用来与源/目的IP地址字段共同确定一个地址范围。 IP地址通配符掩码与IP地址的反向子网掩码类似,也是一个32比特位的数字字符串,用于指示IP地址中的哪些位将被检查。各比特位中,“0”表示“检查相应的位”,“1”表示“不检查相应的位”,概括为一句话就是“检查0,忽略1”。但与IP地址子网掩码不同的是,子网掩码中的“0”和“1”要求必须连续,而通配符掩码中的“0”和“1”可以不连续。 通配符掩码可以为0,相当于0.0.0.0,表示源/目的地址为主机地址;也可以为255.255.255.255,表示任意IP地址,相当于指定any参数。 举一个IP地址通配符掩码的示例,当希望来自192.168.1.0/24网段的所有IP报文都能够通过,可以配置如下规则: rule 5 permit ip source 192.168.1.0 0.0.0.255规则中的通配符掩码为0.0.0.255,表示只需检查IP地址的前三组二进制八位数对应的比特位。因此,如果报文源IP地址的前24个比特位与参照地址的前24个比特位(192.168.1)相同,即报文的源IP地址是192.168.1.0/24网段的地址,则允许该报文通过。表5-3展示了该例的地址范围计算过程。 表5-3 通配符掩码示例
项目 | | | 参照地址 | 192.168.1.0 | 11000000.10101000.00000001.00000000 | 通配符掩码 | 0.0.0.255 | 00000000.00000000.00000000.11111111 | 确定的地址范围 | 192.168.1.* *表示0~255之间的整数 | 11000000.10101000.00000001.xxxxxxxx x既可以是0,也可以是1 |
更多的IP地址与通配符掩码共同确定的地址范围示例,详见表5-4。 表5-4 IP地址与通配符掩码共同确定的地址范围
IP地址 | | | 0.0.0.0 | 255.255.255.255 | 任意IP地址 | 172.18.0.0 | 0.0.255.255 | 172.18.0.0/16网段的IP地址 | 172.18.5.2 | 0.0.0.0 | 仅172.18.5.2这一个主机地址 | 172.18.8.0 | 0.0.0.7 | 172.18.8.0/29网段的IP地址 | 172.18.8.8 | 0.0.0.7 | 172.18.8.8/29网段的IP地址 | 10.1.2.0 | 0.0.254.255(通配符掩码中的1和0不连续) | 10.1.0.0/24~10.1.254.0/24网段之间且第三个字节为偶数的IP地址,如10.1.0.0/24、10.1.2.0/24、10.1.4.0/24、10.1.6.0/24等。 |
源/目的MAC地址及其通配符掩码源MAC地址及其通配符掩码格式:source-mac source-mac-address [ source-mac-mask ] 目的地址及其通配符掩码格式:destination-mac dest-mac-address [ dest-mac-mask ] 仅二层ACL支持基于源/目的MAC地址过滤报文。 将源/目的MAC地址定义为规则匹配项时,可以在源/目的MAC地址字段后面同时指定通配符掩码,用来与源/目的MAC地址字段共同确定一个地址范围。 MAC地址通配符掩码的格式与MAC地址相同,采用十六进制数表示,共六个字节(48位),用于指示MAC地址中的哪些位将被检查。与IP地址通配符掩码不同的是,MAC地址通配符掩码各比特位中,1表示“检查相应的位”,0表示“不检查相应的位”。如果不指定通配符掩码,则默认掩码为ffff-ffff-ffff,表示检查MAC地址的每一位。 MAC地址与通配符掩码共同确定的地址范围示例,如表5-5所示。 表5-5 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 ] 二层ACL支持基于外层VLAN编号过滤报文。 将VLAN编号定义为规则匹配项时,可以在VLAN编号字段后面同时指定VLAN掩码,用来与VLAN编号字段共同确定一个VLAN范围。 VLAN掩码的格式是十六进制形式,取值范围是0x0~0xFFF。如果不指定VLAN掩码,则默认掩码为0xFFF,表示检查VLAN编号的每一位。 VLAN编号与掩码共同确定的VLAN范围示例,如表5-6所示。 表5-6 VLAN编号及其掩码共同确定的VLAN范围[
VLAN编号 | | | 10 | 0x000 | 任意VLAN | 10 | 0xFFF | 仅VLAN 10 | 10 | 0xFF0 | VLAN 1~VLAN 15 |
TCP/UDP端口号源端口号格式:source-port { eq port | gt port | lt port | range port-start port-end } 目的端口号格式:destination-port { eq port | gt port | lt port | range port-start port-end } 在高级ACL中,当协议类型指定为TCP或UDP时,设备支持基于TCP/UDP的源/目的端口号过滤报文。 其中,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端口号及对应的字符串如表5-7所示,常见UDP端口号及对应的字符串如表5-8所示。 表5-7 常见TCP端口号及对应的字符串
端口号 | | | | 7 | echo | Echo | Echo服务 | 9 | discard | Discard | 用于连接测试的空服务 | 13 | daytime | Daytime | 给请求主机发送日期和时间 | 19 | CHARgen | Character generator | 字符生成服务;发送无止境的字符流 | 20 | ftp-data | FTP data connections | FTP数据端口 | 21 | ftp | File Transfer Protocol(FTP) | 文件传输协议(FTP)端口 | 23 | telnet | Telnet | Telnet服务 | 25 | smtp | Simple Mail Transport Protocol (SMTP) | 简单邮件传输协议 | 37 | time | Time | 时间协议 | 43 | whois | Nickname(WHOIS) | 目录服务 | 49 | tacacs | TAC Access Control System (TACACS) | 用于基于TCP/IP验证和访问的访问控制系统(TACACS登录主机协议) | 53 | domain | Domain Name Service (DNS) | 域名服务 | 70 | gopher | Gopher | 信息检索协议(互联网文档搜寻和检索) | 79 | finger | Finger | 用于用户联系信息的Finger服务,查询远程主机在线用户等信息 | 80 | www | World Wide Web (HTTP) | 用于万维网(WWW)服务的超文本传输协议(HTTP),用于网页浏览 | 101 | hostname | NIC hostname server | NIC机器上的主机名服务 | 109 | pop2 | Post Office Protocol v2 | 邮件协议-版本2 | 110 | pop3 | Post Office Protocol v3 | 邮件协议-版本3 | 111 | sunrpc | Sun Remote Procedure Call (RPC) | SUN公司的远程过程调用(RPC)协议,用于远程命令执行,被网络文件系统(NFS)使用 | 119 | nntp | Network News Transport Protocol (NNTP) | 网络新闻传输协议,承载USENET通信 | 179 | bgp | Border Gateway Protocol (BGP) | 边界网关协议 | 194 | irc | Internet Relay Chat (IRC) | 互联网中继聊天(多线交谈协议) | 512 | exec | Exec (rsh) | 用于对远程执行的进程进行验证 | 513 | login | Login (rlogin) | 远程登录 | 514 | cmd | Remote commands | 远程命令,不必登录的远程shell(rshell)和远程复制(rcp) | 515 | lpd | Printer service | 打印机(lpr)假脱机 | 517 | talk | Talk | 远程对话服务和客户 | 540 | uucp | Unix-to-Unix Copy Program | Unix到Unix复制服务 | 543 | klogin | Kerberos login | Kerberos版本5(v5)远程登录 | 544 | kshell | Kerberos shell | Kerberos版本5(v5)远程shell |
表5-8 常见UDP端口号及对应的字符串[td]
端口号 | | | | 7 | echo | Echo | Echo服务 | 9 | discard | Discard | 用于连接测试的空服务 | 37 | time | Time | 时间协议 | 42 | nameserver | Host Name Server | 主机名服务 | 53 | dns | Domain Name Service (DNS) | 域名服务 | 65 | tacacs-ds | TACACS-Database Service | TACACS数据库服务 | 67 | bootps | Bootstrap Protocol Server | 引导程序协议(BOOTP)服务端,DHCP服务使用 | 68 | bootpc | Bootstrap Protocol Client | 引导程序协议(BOOTP)客户端,DHCP客户使用 | 69 | tftp | Trivial File Transfer Protocol (TFTP) | 小文件传输协议 | 90 | dnsix | DNSIX Security Attribute Token Map | DNSIX安全属性标记图 | 111 | sunrpc | SUN Remote Procedure Call (SUN RPC) | SUN公司的远程过程调用(RPC)协议,用于远程命令执行,被网络文件系统(NFS)使用 | 123 | ntp | Network Time Protocol (NTP) | 网络时间协议,蠕虫病毒会利用 | 137 | netbios-ns | NETBIOS Name Service | NETBIOS名称服务 | 138 | netbios-dgm | NETBIOS Datagram Service | NETBIOS数据报服务 | 139 | netbios-ssn | NETBIOS Session Service | NETBIOS会话服务 | 161 | snmp | SNMP | 简单网络管理协议 | 162 | snmptrap | SNMPTRAP | SNMP陷阱 | 177 | xdmcp | X Display Manager Control Protocol (XDMCP) | X显示管理器控制协议 | 434 | mobilip-ag | MobileIP-Agent | 移动IP代理 | 435 | mobilip-mn | MobileIP-MN | 移动IP管理 | 512 | biff | Mail notify | 异步邮件,可用来通知用户有邮件到达 | 513 | who | Who | 登录的用户列表 | 514 | syslog | Syslog | UNIX系统日志服务 | 517 | talk | Talk | 远程对话服务器和客户端 | 520 | rip | Routing Information Protocol | RIP路由协议 |
TCP标志信息格式:tcp-flag { ack | established | fin | psh | rst | syn | urg }* 在高级ACL中,当协议类型指定为TCP时,设备支持基于TCP标志信息过滤报文。 TCP报文头有6个标志位:
TCP标志信息中的established,表示标志位为ACK(010000)或RST(000100)。 指定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连接。
IP分片信息格式:none-first-fragment 基本ACL和高级ACL支持基于IP分片信息过滤报文。 IP分片除了首片报文外,还有后续分片报文,又叫做非首片分片报文。仅首片分片报文携带四层信息(如TCP/UDP端口号等),后续分片报文均不携带。网络设备收到分片报文后,会判断其是否是最后一个分片报文。如果不是,则为其分配内存空间,以便于最后一个分片报文到达后完成重组。黑客可以利用这一点,向接收方设备发起分片报文攻击,始终不向接收方发送最后一个分片报文,使得接收方的内存得不到及时释放(接收方会启动一个分片重组的定时器,在定时器超时前如果无法完成重组,将向发送方发送ICMP重组超时差错报文;如果定时器超时后仍未完成重组,则丢弃已存储的分片报文)。在分片报文发送数量很多并且发送速度很快的情况下,接收方的内存很容易被占满,从而导致接收方没有足够的内存资源处理其他正常的业务。 为了解决这个问题,可以配置指定none-first-fragment匹配项的ACL规则来阻塞非首片分片报文,从而达到防范分片报文攻击的目的。 针对非分片报文、首片分片报文、非首片分片报文这三类报文,ACL的处理方式如表5-9所示。 表5-9 ACL对IP分片报文的处理方式
规则包含的匹配项 | | | | 三层信息(如源/目的IP地址) | 三层信息匹配上,则返回匹配结果(permit/deny);未匹配上,则转下一条规则进行匹配 | 三层信息匹配上,则返回匹配结果(permit/deny);未匹配上,则转下一条规则进行匹配 | 三层信息匹配上,则返回匹配结果(permit/deny);未匹配上,则转下一条规则进行匹配 | 三层信息 + 四层信息(如TCP/UDP端口号) | 三层和四层信息都匹配上,则返回匹配结果(permit/deny);未匹配上,则转下一条规则进行匹配 | 三层和四层信息都匹配上,则返回匹配结果(permit/deny);未匹配上,则转下一条规则进行匹配 | 不匹配,转下一条规则进行匹配 | 三层信息 + none-first-fragment | 不匹配,转下一条规则进行匹配 | 不匹配,转下一条规则进行匹配 | 三层信息匹配上,则返回匹配结果(permit/deny);未匹配上,则转下一条规则进行匹配 |
例如,ACL 3012中存在以下规则: # acl number 3012 rule 5 deny tcp destination 192.168.2.2 0 none-first-fragment rule 10 permit tcp destination 192.168.2.2 0 destination-port eq www rule 15 deny ip #
|