Cisco路由器ACL剖析

摘要:访问控制列表是CiscoIOS防火墙的核心技术,它包括标准ACL、扩展ACL、命名ACL、基于时间的ACL、动态ACL、自反ACL、基于上下文的访问控制(CBAC)等,这些ACL技术从简到繁、从网络层到应用层,为网络的边界安全提供了灵活的解决方案。

1 前言

    访问控制列表ACL(Access Control Lists) 使用包过滤技术,在路由器上根据第三层或第四层包头中的信息,如源地址、目的地址、源端口、目的端口以及上层协议等对数据包进行过滤。ACL技术不仅在路由器上技术成熟、应用广泛,而且在三层交换机上也广泛支持,甚至有的二层交换机也支持ACL。ACL可以实现如下功能:检查和过滤数据包;限制网络流量,提高网络性能;限制或减少路由更新的内容;提供网络访问的基本安全级别;控制用户网络行为;控制网络病毒的传播。

    从ACL的功能不同,ACL技术可以做如下分类:标准ACL;扩展ACL;命名ACL;基于时间的ACL;动态ACL;自反ACL;CBAC(Context-Based AccessControl)基于上下文的访问控制列表等。按照这个顺序可以看作越来越高的层次,具有越来越完善的防火墙功能。为了便于论述,本文示例依据如图1拓朴结构。

 示例网络拓朴

图1 示例网络拓朴

    图1网络中,R1路由器的左侧fa0/0接口IP地址设为192.168.1.254/24,连接内网,fa0/1接口IP地址设为202.115.100.206/28,连接DMZ区,R1右侧serial0/0接口IP地址设为202.115.100.1/30,连接外网。

2 标准访问控制列表

    标准ACL的过滤参数只有源IP地址范围,不能做更灵活的定制,所以应用范围受到限制,但是网络设备处理起来却很简单,效率很高。

    如图1网络拓朴,如果要应用标准ACL拒绝外部网访问DMZ区服务器InServ,则相关的命令序列如下:

    R1(config)#access-list 10 deny host 202.115.100.200

    R1(config)#access-list 10 permit any

    R1(config)#interface s0/0

    R1(config-if)#ip access-group 10 out

    如果要指定目的IP地址范围,或者指定被拒绝访问的某项服务,标准ACL就无法实现了。

3 扩展访问控制列表

    3.1 常规应用

    要在包过滤规则中限制目的IP地址范围,或者指定被拒绝访问的某项服务,扩展ACL可以实现。例如在图1网络拓朴中,要限制外部网访问DMZ服务器InServ的DNS、FTP和MS SQL Server服务,则相关的命令序列如下:

    R1(config)#access-list110denytcpanyhost202.115.100.200eqftp

    R1(config)#access-list110denyudpanyhost202.115.100.200eqdomain

    R1(config)#access-list110denytcpanyhost202.115.100.200 eq 1433

    R1(config)#access-list 110 permit ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group 110 in

    3.2VTY虚拟终端连接限制

    默认状态下路由器本身不允许通过telnet进行登录,必须配置VTY虚拟终端,设置登录密码或者登录用户,并启用登录验证,远程主机就可以用telnet登录路由器进行设备配置了。VTY虚拟终端连接限制有几种方法,一种是在扩展ACL中拒绝telnet的TCP端口,例如:

    R1(config) #access- list 120 denytcpany host202.115.100.1 eq telnet

    R1(config)#access-list 120 permit ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group 120 in

    我们只对路由器的一个接口进行了限制,相似地,也可以在所有接口上对路由器的所有IP地址进行限制。第二种方法是在VTY虚拟终端线路上应用访问控制列表,那样就不需要限制TCP端口。例如:

    R1(config)#access-list130permitip192.168.1.00.0.0.255any

    R1(config)#access-list 130 denyip any any

    R1(config)#linevty 0 4

    R1(config-line)#access-class130in在VTY虚拟终端线路上因为只需要限制源IP地址范围,所以用标准ACL就可以了。

 

    3.3 established关键字

    扩展ACL对TCP协议的包过滤有一个established关键字,它根据是否设置了TCP包的ACK或RST位来过滤TCP包(设置了ACK或RST位后,说明这个包不是会话的第一个包,即此包属于某个已经建立的会话)。可以不用考虑TCP包的ACK和RST位的问题,根据established字面意义,只要此TCP包属于某个已经建立的会话,才是我们所关注的。

    例如在图1网络拓朴中,内网向外网发出的TCP连接是允许的,而且外网可以正常回应,但是不允许外网向内网发起TCP连接。

    R1(config)#access-list112permittcpanyanyestablished

    R1(config)#access-list 112 deny ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group 112 in

    主机InServ可以访问OutServ的WWW、FTP等服务,但是OutServ不能访问InServ的服务。另外established关键字只是针对TCP连接,对UDP、ICMP、EIGRP等协议并不适用。

    3.4单向ping的实现

    established关键字只能针对TCP连接,而ping命令使用的ICMP协议包,在图1网络拓朴中如果要PC1能够ping通PC2,而PC2不允许ping通PC1,一种方法是拒绝一个方向的ICMP协议的echo-reply回应数据包。相关命令序列如下:

    R1(config)#access-list 110 deny icmp any any echoreply

    R1(config)#access-list 110 permit ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group 110 out

    当然,要实现这个单向ping功能,还有几种方法,比如后面的动态ACL和自反ACL。

4 命名访问控制列表

    标准ACL和扩展ACL用数值序号来作为列表的名称使用,但是Cisco设备限制了标准ACL的序号范围是1-99,而扩展ACL的序号范围是100-199,如果要定义更多的ACL或者要让ACL名称更有意义,就需要用到命名ACL了。

    命名ACL与标准ACL、扩展ACL的工作原理是一样的。编号ACL和命名ACL的主要区别是:

    (1)名字能更直观地反映出访问列表完成的功能;

    (2)命名ACL突破了99个标准ACL和100个扩展ACL的数量限制,能够定义更多的访问列表;

    (3)命名ACL允许删除个别语句,而编号ACL只能删除整个访问列表;

    (4)命名ACL有一个配置子模式,而编号ACL没有;把2.3中的示例用命名ACL来实现的命令序列如下:

    R1(config)#ip access-list extended unid-acl

    R1(config-ext-nacl)#permit tcp any any established

    R1(config-ext-nacl)#deny ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group unid-acl in

5 基于时间的访问控制列表

    基于时间的ACL可以为一天中的不同时间段,或者一个星期中的不同日期,或者两者的结合制定不同的访问控制策略,从而满足用户对网络的灵活需求。它能够应用于扩展编号ACL或者扩展命名ACL。

    例如在图1网络拓朴中,内网用户在本学期的上班时间不允许访问外网,相关命令序列如下:

    R1(config)#time-range term-res

    R1(config-time-range)#absolute start 8:00 1 sept 2010end 18:00 22 jan 2011 /* 定义一个绝对时间范围,在一个学期

    R1(config-time-range)#periodic weekday 8:00 to18:00 /* 定义上班时间,周一至周五每天8:00-18:00

    R1(config-time-range)#exit

    R1(config) #access- l i s t 110 d e n y i p 192.168.1.00.0.0.255 any time-range term-res

    R1(config)#access-list 110 permit ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group 110 out

 

6 动态访问控制列表

    前面的标准ACL和扩展ACL,包括命名ACL对信道的限制都是永久性的,如果要临时性地允许某个IP地址的数据包通过,只能用人工修改ACL实现。虽然established关键字可以实现单向访问,但是并不支持另一个方向的临时性通道。为了智能地解决这个问题,动态ACL技术应运而生。

    要在一个拒绝通过的路由器接口上临时打开一个通道,首先需要用telnet在该路由器上进行登录认证,用户一般通过提供用户名和口令,就能够开启一个到路由器的telnet会话。在用户被认证之后,路由器会自动关闭telnet会话,并将一个动态访问表项置于某个访问表中,以允许源地址为认证用户工作站地址的数据包通过。这样,我们可以在路由器接口上配置访问表,只允许那些telnet认证的工作站才能发送临时通过的数据包。

    当然,事先我们至少应该允许到达路由器的telnet数据包,这样才能进行用户认证过程。如果不允许telnet连接,用户无法在路由器上认证,也就谈不上创建动态访问表项了。

    例如在图1网络拓朴中,允许在路由器上经过认证的外部用户连到DMZ区的202.115.100.200服务器,以进行www和FTP访问。相关命令序列如下:

    R1(config)#username in-server secret inserv@sina.com

    R1(config)#access-list 120 permit tcp any host202.115.100.1 eq telnet /* 必须先允许连接到路由器进行认证

    R1(config)#access-list 120 permit tcp any host202.115.100.206 eqtelnet / * 允许连接到路由器的另一个IP地址进行认证

    R1(config)#access-list 120 permit eigrp any any

    R1(config)#access-list 120 dynamic dyn1 timeout 120

    permit tcp any host 202.115.100.200 eq www /* 如果经过认证,此条生效,允许访问DMZ服务器的WWW服务,绝对超时时间120分钟,超时将断开

    R1(config)#access-list 120 dynamic dyn2 timeout 120permit tcp any host 202.115.100.200 eq ftp /* 如果经过认证,此条生效,允许访问D M Z 服务器的F T P 服务,绝对超时时间120 分钟,超时将断开

    R1(config)#interface s0/0

    R1(config-if)#ip access-group 120 in

    R1(config)#line vty 0 4

    R1(config-line)#login local

    R1(config-line)#autocommand access-enable host

    timeout 15 /* 登录后动态创建ACL条目,同时telnet自动断开

    R1(config-line)#rotary 1 /*telnet 断开后,如果要再用telnet对路由器进行配置,就重新用telnet登录,并指定telnet连接端口3001,如果是rotary2命令,就表示telnet连接端口3002。

    应用的注意事项在命令注释中已有说明,动态ACL的telnet认证成功后就会断开,不能用这个telnet连接对路由器进行配置,如果一定要用telnet对路由器配置,用rotary命令允许另开一个带端口号的telnet通道。

    有两个地方设置超时值,在access-list中设置的timeout值是绝对超时值,无论是不是有被允许的流量通过,超时将断开链接,删除动态表项。在autocommand命令中设置的timeout值是相对超时值,如果没有被认证的流量通过,超时将断开链接。绝对超时值必须大于相对超时值,超时值以分钟为单位。

7 自反访问控制列表

    某些情况要允许内网访问外网,但是不允许外网访问内网,前面提到的扩展ACL中的established关键字可以实现这个功能,但是established关键字只适用于TCP连接,不能用于ICMP、EIGRP、UDP等协议数据包。自反ACL可以实现多种协议数据包类型的单向访问控制。

    例如在图1网络拓朴中,要拒绝外网向内网发起的所有访问,但是允许内网向外网发起的所有访问。相关的命令序列如下:

    R1(config)#ip access-list extended r1-in

    R1(config-ext-nacl)#permit ospf any any

    R1(config-ext-nacl)#evaluate my-ref /*对进方向的数据包进行评估,评估依据是出方向的扩展访问列表中的自反条目,如果是出方向自反条目允许访问的回应数据包,则允许通过

    R1(config)#ip access-list extended r1-out

    R1(config-ext-nacl)#permit ip any any reflect myref/* 在出方向定义自反条目

    R1(config)#int s0/0

    R1(config-if)#ip access-group r1-in in

    R1(config-if)#ip access-group r1-out out

    R1(config)#ip reflexive-list timeout 60 /* 临时反射出来的条目的全局超时有效时间60 秒

 

    在接口的in方向上只允许了一个ospf协议,其他访问都禁止了,也就是不允许外网访问内网。evaluatemy-ref嵌套了一个反射ACL,名称为my-ref。在接口的out方向上,允许所有的访问,但是如果没有自反功能的话是可以出去但是回不来,所以在permitipanyany后加上了一个reflect,也就是说,任何从内网发起的流量如果它匹配这条permit ip any any reflect my ref语句的话,则自动在r1-in的列表中创建一条动态的permit语句。另外,对自反ACL做以下说明:

    (1)自反ACL永远是permit的;

    (2)当使用自反ACL时,命名访问列表必须创建两个,一个用于入站数据包,一个用于出站数据包,自反条目将成对使用并且相互关联;

    (3)自反ACL允许高层Session信息的IP包过滤;

    (4)利用自反ACL可以只允许出去的流量,但是阻止从外部网络产生的向内部网络的流量,从而可以更好地保护内部网络;

    (5)自反ACL是在有流量产生时(如出方向的流量)临时自动产生的,并且当Session结束时条目就删除;

    (6)自反ACL不是直接被应用到某个接口下的,而是嵌套在一个扩展命名访问列表下的;

    (7)对那些在会话过程中改变所使用端口号的应用程序来说,自反访问列表不能与之工作,FTP是使用过程中改变端口号的应用程序,如果使用了自反ACL,必须使用被动FTP来取代;

    (8)自反ACL不能处理多通道应用程序;

    (9)每行自反条目可以用timeout配置超时值,也可以整个用一个全局超时值。UDP连接中,或者TCP会话未正常终止时,将使用闲置超时值删除临时允许条目。

8 基于上下文的访问控制列表

    基于上下文的访问控制列表CBAC能够处理那些不能使用自反ACL处理的多端口协议。之前的ACL工作在网络层或传输层,它们处理一些应用程序的能力是有限的,而CBAC通过应用层来过滤数据包,处理能力更强。CBAC的工作方式和自反ACL很类似,它们都是基于从路由器出站经过外部接口的数据流创建一个临时通道,这些通道允许会话返回进入内部网络的数据流通过。应用层的协议种类很多,CBAC并不支持所有的应用层协议,但是可以修改端口应用程序映射表(PAM,PortApplication Mapping)把非标准端口号与CBAC支持的应用层协议相关联,这也提供了一定的灵活性。

    CBAC的主要功能是:(1)CBAC能够基于应用层智能地过滤TCP/UDP包,可以支持FTP、RPC、SQL*Net等协议过滤,甚至可以过滤JAVA应用程序;(2)因为CBAC检测流量是基于会话状态的,所以可以防止一些DoS拒绝服务的攻击;(3)CBAC可以创建实时的警报和审计日志,以方便对事件进行跟踪;(4)CBAC支持Cisco的入侵检测系统IDS,增强系统的安全性。

    例如在图1网络拓朴中,要拒绝外网向内网发起的所有访问,但是允许内网向外网发起的http、ftp、电子邮件访问,并对java小应用程序进行限制。相关的命令序列如下:

    R1(config)#ip inspect name test-cbac http java-list 51timeout 3600

    R1(config)#ip inspect name test-cbac ftp timeout 3600

    R1(config)#ip inspect name test-cbac pop3 timeout3600

    R1(config)#ip inspect name test-cbac smtp timeout3600

    /* 以上定义被允许的CBAC 应用协议,同时限制网页中的java 小应用程序,相应的CBAC 名称是test-cbac,连接超时值是3600 秒

    R1(config)#access-list 51 permit host 61.139.100.200R1(config) #access- l i s t 51 p e r m i t 61.135.167.00.0.0.255

    R1(config)#access-list 51 deny any

    /* 上面的标准访问列表应用于java 应用程序的友好列表中,只允许指定服务器和一个指定网段的java 程序进入内网

    R1(config)#access-list 110 permit icmp any any

    R1(config)#access-list 110 deny ip any any

    R1(config)#int s0/0

    R1(config-if)#ip access-group 110 in

    R1(config-if)#ip inspect test-cbac out

    CBAC的限制:(1)CBAC不能为所有协议提供智能过滤,他只能为你所指定的协议进行过滤;(2)CBAC只能提供一定类型的入侵保护.只能提供大部分常规的入侵保护;(3)CBAC只能检查TCP和UDP连接,不能检测ICMP、路由协议等;(4)对第三者路由器的加密的信道也无法进行检测,如IPSec信道。

9 总结

    访问控制列表ACL是CiscoIOS防火墙的核心技术,多种访问控制列表技术从简到繁、从低层次到高层次,为网络的边界安全提供了灵活的解决方案,在此分析了各种访问控制列表技术的性能和相互之间的差别,并使用案例对它们的应用进行了展示。

posted on 2012-12-13 21:59  周德顺  阅读(3146)  评论(0编辑  收藏  举报