一、Cisco IOS安全技术
Cisco IOS防火墙特性集作为Cisco IOS软件的一个选项,提供了一个先进的安全解决方案,这种集成化路由器安全解决方案是Cisco Systems安全解决方案系统中的一个部件。
Cisco IOS安全服务包括一系列特性,能使管理人员将一台Cisco路由器配置成为一个防火墙,而Cisco IOS防火墙特性集则可以为现有的Cisco IOS安全解决方案增加更大的深度和灵活性。表1为Cisco IOS防火墙特性集相关新特性的概述。
二、基于上下文的访问控制
CBAC提供四个方面的主要功能:
- 流量过滤:
扩展ACL只能过滤3层和4层的流量,RACL能够过滤5层的流量,而CBAC支持应用层的检测,即查看某些数据包的内容,如FTP,他能够分别查看控制连接或者数据连接,由于控制和数据使用的端口是分开的,所以这点对于CBAC来说是做不到的。CBAC甚至能够检测HTTP连接中使用的Java程序,并过滤他们。 - 流量检测:
CBAC不仅能像RACL那样检查返回到网络的流量,同时还能够防止TCP SYN 洪水***:CBAC能够检测客户端到服务器连接的频率,如果到达一个限度,就会关闭这些连接。也可用来防止DoS分片***。 - ***检测:
CBAC是一个基于状态的防火墙机制,他也能够检测某些DoS***。提供对于某些SMTP e-mail***的保护,限制某些SMTP命令发送到你内部网络的e-mail服务器。所有这些***都使CBAC产生日志信息,并且会选择性的重置TCP连接或者丢弃这些欺骗数据包。 - 一般的告警和审计:
CBAC对于检测到的问题或***能够产生实时的告警,对于连接请求提供详细的审计信息。例如,记录所有的网络连接请求,包括源和目的的IP地址,连接使用的端口,发送的数据大小,连接开始和结束的时间。
CBAC的原理:
CBAC会追踪它监视的连接,创建包括每个连接信息的状态表。这个表和PIX使用的状态表很相似。CBAC监视TCP,UDP,和ICMP的连接并记录到状态表,并为返回的流量创建动态ACL条目,这点和RACL很相似。但是CBAC能够检测应用层的流量,这点是RACL不能实现的。CBAC使用状态表和动态ACL条目来检测和防止某些DoS***,尤其是TCP洪水***。
CBAC的处理步骤:
1.用户发起一个到外部的连接,如Telnet。如果配置了进站ACL,则在CBAC检测之前先处理进站ACL。接着根据CBAC的检测规则,Cisco IOS来检测或忽略这些连接。如果没有要检测的连接,Cisco IOS允许数据包的通过,否则跳入步骤2。
2.Cisco IOS比较当前连接和状态表中的条目:如果条目不存在,则添加一条到状态表中,否则,Cisco IOS重置这个连接的空闲计时器(idle timer)
3.如果这是一个新条目,则Cisco IOS添加一个动态ACL条目到外部接口的进站方向,允许返回到内部网络的流量。这个动态ACL不会保存到NVRAM。
在Cisco IOS 12.3(4)T后,出现了一个新的特性叫做:Firewall ACL Bypass (FAB),使用这个特性后,Cisco IOS不会为允许返回的流量创建动态ACL条目,而是直接查看状态表看哪些流量允许返回内部网络,这是通过快速交换进程,如CEF来实现的,从而加快了处理返回的流量的速度。如果在状态表中没有发现符合的条目,则继续进行进站ACL的检查过程。在12.3(4)T之后,FAB特性会自动的启用并且不能被关闭。
注意:CBAC能够配置要检测哪个方向的流量,大多数情况下,你可以在边界路由器上配置CBAC来允许返回到内部网络的流量。然而,你也能够配置CBAC来同时检测两个方向的流量,来同时保护两边的网络。
CBAC相比与RACL的改进
TCP:
像RACL一样,CBAC会检测TCP数据包包头的控制位,如果看到FIN位,则Cisco IOS会等待5秒钟来关闭连接,并且删除动态ACL条目(在FAB特性引入之前),并从状态表中删除条目。如果一个TCP的会话空闲超过1个小时,则Cisco IOS会移除这个条目。此外和RACL不同的是CBAC会要求TCP连接在看到第一个SYN字段的30秒钟之内(用户配置)建立。如果在这个时间断里没有建立,Cisco IOS会从状态表中出这个条目和ACL。
此外,CBAC还会检查TCP连接的序列号来保证在一个范围内。如果不在这个范围中,CBAC会丢且这些报文,并且假设发生了DoS欺骗***。
UDP:
和RACL一样,CBAC会估计UDP连接的时间,假设30秒之内(用户配置)没有UDP数据包,则说明连接已经结束了。因此Cisco IOS从状态表中移除这个条目(包括动态ACL条目)。此外,与RACL不同的是,CBAC会检测DNS的查询和响应。如果内部设备产生了DNS查询,远端DNS服务器应该会在5秒钟发送DNS响应。如果在5秒钟内没有看到响应,这个DNS连接条目会被立刻移除来防止欺骗***。同样的,如果从DNS服务器看到DNS响应后,Cisco IOS也会立刻从状态表中移除相应,来防止DNS欺骗和DoS***。
另外的连接:
某些应用程序,如FTP,会开启额外的连接来传输数据。这种情况RACL就不能起作用了,而CBAC能够监视这些应用的控制连接,并决定他们是否开启了其他的数据连接。当CBAC发现额外开启的连接,他会自动将这些信息加入到状态表中(在启用FAB之前,还会加入到动态ACL种)来允许这些连接通过路由器。
对于地址转换的支持:
CBAC对于经过地址转换的地址能够在状态表种进行正确的转换,并正确的响应。但是有两个限制:
- 启用CBAC的路由器必须同时扮演地址转换的角色,这样才能够获得包头的地址转换的信息。
- 并不支持所有的应用程序;只支持某些类型的地址转换,如NAT,而不是PAT。
CBAC的配置:
步骤一:决定路由器上的哪个接口作为内部接口,哪个接口作为外部接口
内部接口(internal)是指连接发起的数据包进入CBAC路由器的接口,外部接口(external)是流量出去后返回CBAC路由器的接口,如果要配置双向CBAC,推荐先配置单向CBAC,测试正常后再配置另外一边。
注意:如果不配置内部端口,则除了外部端口外的所有端口都是内部端口
步骤二:创建普通的IP ACL列表过滤进入和离开内部网络的流量,并保证那些要监视的出站流量允许被通过
推荐在配置CBAC之前,先用ACL(应用到接口上)允许某些必要的流量进入或离开内部网络,这样做简化了以后的CBAC配置和相关排错,inspect会在这些deny的条目上开孔,允许指定的流量进入
步骤三:(可选)改变全局的连接超时时间
Router(config)# ip inspect tcp synwait-time #_of_seconds 等待多长时间来完成TCP连接(三次握手),默认是30秒
Router(config)# ip inspect tcp finwait-time #_of_seconds 等待多长时间来完成TCP连接关闭,默认是5秒
Router(config)# ip inspect tcp idle-time #_of_seconds TCP连接的空闲时间,默认是3600秒
Router(config)# ip inspect udp idle-time #_of_seconds UDP连接的空闲时间,默认是30秒
Router(config)# ip inspect dns-timeout #_of_seconds 配置DNS查询条目在状态表中存在的时间,默认是5秒,优先级高于UDP空闲时间
步骤四:(可选)配置应用程序端口映射(Port Application Mapping(PAM))
CBAC是哦那个PAM来决定要监视的应用连接类型,如果要监视的那些使用非标准端口的应用程序,如HTTP使用8080端口,必须要手动配置。
PAM表中有三类条目:
- System-defined entries-默认的应用程序端口条目
- User-defined entries-用户定义的应用程序端口条目
- Host-specific entries-User-defined entries的一种,如果一个应用程序同时存在默认端口和用户自定义的端口,则用户自定义的条目称为Host-specific entries
配置PAM条目:
Router(config)# ip port-map application_name port port_# [list acl_#] ACL指定哪些设备使用非标准的端口,如果不加代表全部设备。
PAM配置举例:使用PAM和ACL来决定CBAC检测的范围
Router(config)# ip port-map http port 8080 list 1
Router(config)# access-list 1 permit 192.1.1.2
Router(config)# ip port-map http port 8090 list 2
Router(config)# access-list 2 permit 192.1.1.3检测IP地址为192.1.1.2,端口为8080的HTTP连接
检测IP地址为192.1.1.3,端口为8090的HTTP连接
注意:
PAM表在某些版本的Cisco IOS上必须保存配置,重启后才生效
使用show ip port-map查看
步骤五:定义CBAC监视规则(最为重要的一步)
定义哪些条目要加入到状态表,哪些流量被允许返回。如果出站流量不符合监视规则,路由器不会监视这些流量,只把他们当作普通流量处理。
Router(config)# ip inspect name inspection_name protocol [alert {on | off}] [audit-trail {on | off}] [timeout seconds]
protocol:支持的协议cuseeme, fragment, ftp, h323, http, icmp, netshow, rcmd (UNIX R commands), realaudio, rpc, rtsp, sip, skinny, smtp, sqlnet, streamworks, tcp, tftp, udp, and vdolive
alert和audit-trail:详细指定对于这条规则,告警和审计是否开启,如果不配置,则启用默认告警审计规则
timeout:指定这条规则的超时,如果不指定,则使用默认超时时间
步骤六:在接口上激活监视规则。这样路由器会使用CBAC来监视这些流量
Router(config)# interface type [slot_#] port_#
Router(config -if)# ip inspect inspection_name {in | out}in:连接发起的数据包进入CBAC路由器的接口
out:流量出去后返回CBAC路由器的接口
步骤七:(可选,强烈推荐)发送流量经过CBAC路由器来测试你的配置
CBAC查看命令:
Router# show ip inspect [parameter]
Router# show ip inspect sessions 查看CBAC状态表
告警和审计
告警
告警会显示CBAC的一些消息,如:路由器资源不够,DoS***和其他威胁。告警默认情况会开启,并自动显示在console线程上。
全局关闭CBAC告警:
Router(config)# ip inspect alert-off
审计
审计会追踪CBAC检查的连接,获取他们的统计信息。默认情况下审计是关闭的。
全局开启CBAC审计,默认情况会显示在console线程上:
Router(config)# ip inspect audit trail