访问列表(ACL)在Cisco路由器安全策略中的重要性
作者:Vitter(vitter@safechina.net)
访问列表(Access List)是一个有序的语句集。它是基于将规则与报文进行匹配,用来允许或拒绝报文流的排序表。用来允许或拒绝报文的标准是基于报文自身包含的信息,通常这些信息只限于第三层和第四层报文头中的包含的信息。当报文到达路由器的接口时,路由器对报文进行检查,如果报文匹配,则执行该语句中的动作;如果报文不匹配,则检查访问表中的下一个语句,直到最后一条结束时仍没有匹配语句,则报文按缺省规则被拒绝。整个过程如图 1所示:
图 1
正确的使用和配置访问列表是路由器配置中至关重要的一部分。因为,有了它不仅使管理员有强大的控制互联网络流量的能力,而且还可以实现安全策略,也可以保护敏感设备防止非授权的访问。
访问列表基本上是一系列条件,这些条件控制对一个网段的访问也控制来自一个网段的访问。访问列表可以过滤不必要的数据包,并用于实现安全策略。通过恰当的组合访问列表,网络管理员具有了实现任何创造性的访问策略的能力。
IP和IPX访问列表工作原理非常相似——它们都是包过滤器,包被比较、被分类并遵照规定行事。一旦建立了列表,可以在任何接口上应用入站(inbound)或出站(outbound)流量。
这里有一些数据包和访问列表相比较时遵循的重要规则:
l 通常是按照顺序比较访问列表的每一行,例如,通常从第一行开始,然后转到第二行,第三行,等等。
l 比较访问列表的各行直到比较到匹配的一行。一旦数据包与访问列表的某一行匹配,它就遵照规定行事,不再进行后续比较。
l 在每个访问列表的最后有一行隐含式的“deny(拒绝)”语句——意味着如果数据包与访问列表中的所有行都不匹配,将被丢弃。
当使用访问列表过滤IP和IPX包时,每个规则都有很强的含义。
IP和IPX有两种类型访问列表:
标准访问列表 这种访问列表在过滤网络时只使用IP数据包的源IP地址。这基本上允许或拒绝了整个协议组。IPX标准访问列表可以根据源IPX地址和目的IPX地址进行过滤。
扩展访问列表 这种访问列表检查源IP地址和目的IP地址、网络层报头中的协议字段和传输层报头中的端口号。IPX扩展访问列表使用源IPX地址和目的IPX地址、网络层协议字段和传输层报头中的套接字号。
一旦创建了一个访问列表,可应用于输出型或者输入型的接口上:
输入型访问列表 数据包在被路由到输出接口前通过访问列表而被处理。
输出型访问列表 数据包被路由到输出接口,然后通过访问列表而被处理。
这里还有一些在路由器上创建和实现访问列表时应当遵循的访问列表指南:
l 每个接口、每个协议或每个方向只可以分派一个访问列表。这意味着如果创建了IP访问列表,每个接口只能有一个输入型访问列表和一个输出型访问列表。
l 组织好访问列表,要将更特殊的测试放在访问列表的最前面。
l 任何时候访问列表添加新条目的时候,将把新条目放置到列表的末尾。
l 不能从访问列表中删除一行。如果试着这样做,将删除整个访问列表。
l 除非在访问列表末尾有permitany命令,否则所有和列表的测试条件都不符合的数据包将被丢弃。每个列表应当至少有一个允许语句,否则可能会关闭接口。
l 先创建访问列表,然后将列表应用到一个接口。任何应用到一个接口的访问列表如果不是现成的访问列表,那么此列表不会过滤流量。
l 访问列表设计为过滤通过路由器的流量。不过滤路由器产生的流量。
l 将IP标准访问列表尽可能放置在靠近目的地址的位置。
l 将IP扩展访问列表尽可能放置在靠近源地址的位置。
标准IP访问列表
表1列出了和标准IP访问列表相关的配置命令,表2列出了相关的EXEC命令。
标准IPX访问列表
同标准IP访问列表配置方法类似:
access-list{numer} {permit | deny} {source_address} {destination_address}
ipx access-group {number|name}{in| out}
扩展IPX访问列表
扩展IPX访问列表可以根据下列任何内容进行过滤:
l 源网络/节点地址
l 目的网络/节点地址
l IPX协议(SAP、SPX,等等)
l IPX套接字
同标准访问列表的配置方法一致,只是增加了协议和套接字信息:
access-list{numer} {permit | deny} {protocol} {source} {socket}{destination } {socket}
(由于IPX不是我们介绍的重点,所以只是稍微介绍J)
值得注意的是访问列表的号码,下面是一个可以用于过滤网络的访问列表举例。访问列表可以使用的不同协议依赖于IOS版本。
Router(config)#access-list?
<1-99> IPstandard access list
<100-199> IP extended access list
<1000-1099> IPX SAP access list
<1100-1199> Extended 48-bit MAC address access list
<1200-1299> IPX summary address access list
<200-299> Protocol type-code accesslist
<300-399> DECnet access list
<400-499> XNS standard access list
<500-599> XNS extended access list
<600-699> Appletalk access list
<700-799> 48-bit MAC address accesslist
<800-899> IPX standard access list
<900-999> IPX extended access list
访问列表在安全策略中的重要性
通常,ACL用于实现安全策略。一个配置良好的路由器能够提供商用防火墙具有的很多功能,并且路由器经常用来对防火墙进行补充。
1. 防止路径追踪
检测和确认网络设备(路由器或防火墙)只需要用到traceroute、netcat、nmap或SuperScan等工具就够了。
针对路径追踪的对策:在Cisco路由器上限制对TTL已过期的分组进行响应:
access-list 101 deny icmp anyany 11 0
也可以只允许对某些信任的网络通过ICMP分组,而拒绝其他任何网络:
access-list 101 permit icmpany 10.16.10.0 0.255.255.255 11 0
access-list 101 deny ip anyany log
2.防止Cisco 分组泄露
Cisco分组泄露脆弱点最初是JoeJ在Bugtraq上公开的,他与Cisco设备在1999端口(ident端口)上对TCP SYN请求的响应有关。
下面就是针对这个脆弱点的方法:
access-list 101 deny tcp anyany eq 1999 log ! Block Ciscoident scan
3.防止Cisco旗标攫取与查点
Cisco finger 及2001,4001,6001号虚拟终端端口都对攻击者提供不少信息,比如访问URL为http://10.16.10.254:4001那么所的结果可能大体是:
User Access VerificationPassword: Password: % Bad passwords
另外Cisco Xremote 服务(9001端口),当攻击者用netcat连接该端口时,路由器也会发送回一个普通旗标。
针对这些查点,采取的措施就是使用安全的ACL规则限制访问这些服务,比如:
access-list 101 deny tcp anyany 79
access-list 101 deny tcp anyany 9001
4.防止TFTP下载
几乎所有路由器都支持TFTP,攻击者发掘TFTP漏洞用以下载配置文件通常轻而易举,在配置文件里含有很多敏感信息,比如SNMP管理群名字及任意ACL。
执行下面措施可去除TFTP脆弱点:
access-list 101 deny udp anyany eq 69 log ! Block tftp access
5.防止RIP欺骗
支持RIP v1或RIP v2的路由器很容易被RIP攻击。针对这类攻击在边界路由器上禁止所有RIP分组(端口号为520的TCP/UDP分组),要求使用静态路由,禁止RIP。
6.保护防火墙
比如CheckPoint的Firewall-1在256,257,258TCP端口上监听,Microsoft的Proxy Server在1080和1745 TCP端口上监听,使用扫描程序发现这些防火墙就很容易了。为了防止来自因特网上的防火墙扫描,就需要在防火墙之前的路由器上使用ACL规则阻塞这些扫描:
access-list 101 deny tcp anyany eq 256 log ! Block Firewall-1scan
access-list 101 deny tcp anyany eq 257 log ! Block Firewall-1scan
access-list 101 deny tcp anyany eq 258 log ! Block Firewall-1scan
access-list 101 deny tcp anyany eq 1080 log ! Block Socks scan
access-list 101 deny tcp anyany eq 1745 log ! Block Winsockscan
ICMP和UDP隧道攻击能够绕过防火墙,(参见http://phrack.infonexus.com/search.phtml?
view&article=p49-6)针对这种攻击可以对ICMP分组采用限制访问控制,比如下面ACL规则将因管理上的目的而禁止穿行不是来往于10.16.10.0子网的所有ICMP分组:
access-list 101 permit icmpany 10.16.10.0 0.255.255.255 8 ! echo
access-list 101 permit icmpany 10.16.10.0 0.255.255.255 0 ! echo-reply
access-list 102 deny ip anyany log ! deny and log all else
7.防止非授权用户控制VTY(Telnet)访问
比如如下规则就只允许主机10.16.10.8远程登陆到路由器:
Router(config)#access-list 50permit 10.16.10.8
Router(config)#line vty 0 4
Router(config-line)#access-list 50 in
8.防止IP地址欺骗
如图2所示:
图2
在面向Internet的接口S0/0应该有一个规则来阻止任何源地址在200.200.200.xxx范围内的数据包:
access-list 101 deny ip200.200.200.0 0.0.0.255 any
access-list 101 deny ip10.0.0.0 0.0.0.255 any (禁止非法地址访问内网)
access-list 101 deny ip172.16.0.0 0.15.255.255 any (禁止非法地址访问内网)
access-list 101 deny ip192.168.0.0 0.0.255.255 any (禁止非法地址访问内网)
access-list 101 permit ip anyany
这个规则不会影响合法的流量,因为所有来自于200.200.200.xxx网络的合法流量都来源于路由器的其他接口。
9.控制蠕虫病毒传播
在控制蠕虫病毒传播方面ACL也有其作用,比如Nachi蠕虫是通过ICMP报文来造成网络拥塞的,我们只要阻止ICMP报文传播就可以:
access-list 101 deny icmp anyany echo
对付其他一些通过固定端口传播的蠕虫病毒则可以通过ACL规则封闭这些端口,比如Blaster蠕虫(传播通常使用4444、69、135、139、445、593等)。
以上只是ACL安全性的部分总结,希望是抛砖引玉,由于作者水平有限,如有错误请斧正。如果哪位朋友有相关方面的研究,请与作者联系进行交流:vitter@safechina.net。
|