一、CBAC技术介绍CBAC是一种允许路由器审查经过自己的流量,并且根据已经建立起来的状态信息决定允许某些流量或者拒绝某些流量通过的机制。CBAC动态修改扩展的访问控制列表以允许从外部发起的返回流量,CBAC提供对应用层和传输层协议的检查,同时基于检查数据包收集到的信息来控制会话的数量,同时也生成警告和审计信息。和ACL不同的是,普通的扩展ACL只能在第3,4层对流量进行过滤,RACL(自反射列表)能过滤第5层会话层的信息,CBAC支持应用服务的审查,能检查某些数据包的内容,如TELNET数据包内输入的命令;也能检查连接消息,确定连接的状态,CBAC能检查控制连接,确定数据连接正在建立,并将该连接添加到状态表中。CBAC也支持多个多媒体协议,以及其他的执行这种功能的应用。同样,CBAC也可以对HTTP做检查,发现JAVA程序,并进行过滤。CBAC做为IOS的状态防火墙的工作如下:为需要进行审查的协议维持传输和应用状态。每一个连接都会创建一个连接状态,对于TCP协议而言,TCP的连接初始化序列号用来创建TCP的连接状态。对于UDP协议来说,只要CBAC审查到UDP数据包有特殊的地址和端口组合就创建一个连接状态。当TCP和UDP携带我们想要进行审查的应用服务时,CBAC就会针对应用服务的端口号来对有效负载进行审查。当连接终止时,同时删除连接状态。携带有无效的TCP序列号的TCP数据包会被主动的丢弃。CBAC不支持IP分组重组装,CBAC允许非初始分片通过CBAC状态防火墙,同时维持分片的互连状态并校验分片以防止分片攻击的发生。CBAC对由路由器本身产生的数据包不做审查。二、CBAC工作流程1.一个用户发起一个到外部网络的访问连接,如HTTP。如果在路由器的内部接口上设置的入方向的ACL。那么在CBAC审查之前,首先需要ACL对此流量进行审查,只有不被ACL拒绝的流量才会进入到CBAC审查的步骤。而CBAC不一定对所有的流量进行审查,如果流量不需要进行转发,则路由器直接转发该流量。例中用户发起的HTTP需要进行审查,则进行下一个步骤。2.IOS防火墙将该连接和状态表中的条目做比较:如果说状态表中没有该连接的条目,则创建一个条目,并重置连接的空闲计数器。3.如果是一个新的条目,则CiscoIOS在外部接口的入方向上动态的添加一条访问控制列表条目,以允许该流量返回。4.在较新的IOS版本上,已不会在外部接口的入方向上添加本条ACL条目,而是通过查看状态表来决定该流量是否允许进入。该特性成为FAB(FirewallACLBypass,FAB),且不能被关闭,此特性会使流量可以通过CEF进行快速交换从而提高路由器的性能。5.如果状态表中不存在流量的条目,则进入IOS路由器的流量通过外部接口的ACL来实施策略。三、CBAC针对无状态化过滤的增强与无状态过滤的机时RACL(自反列表)相比较,CBAC具有以下的增强:1.TCP对于TCP来说,CBAC审查该连接并检查TCP报文中的控制位。如果CBAC看到TCP报文中的FIN标识,CBAC在外部接口的ACL上动态地删除生成的访问控制列表条目(较老的版本中),然后在状态表中删除有关该连接的条目。同时TCP连接空闲超过一定的时间后,CBAC也会对该连接进行删除。针对于TCP连接的建立时,当CBAC看到TCP报文中的SYN标识后的一段时间内,连接还没有建立的话,IOS同样会在ACL和状态表中删除有关该连接的条目。2.UDP对于UDP而言,由于UDP是无连接的,CBAC无法像处理TCP数据一样处理UDP数据。CBAC会自行估计一个UDP连接的生命周期(默认是30秒),如果空闲时间超过这个生命周期值,CBAC会认为该连接已经结束,并删除状态表条目和访问控制列表条目(较老的版本中)。CBAC还可以审查DNS请求和回复消息,生命周期为5秒。3.ICMP针对ICMP流量做审查时,CBAC能针对ICMP的请求、应答、不可达、超时、时间戳请求和时间戳应答消息进行审查。和UDP连接一样,CBAC也会为ICMP流量提供一个生命周期,超过该周期后就删除状态表条目和访问控制列表条目(较老的版本中)。4.多连接的应用FTP和多媒体应用等协议,是通过打开附加连接来进行数据的传输。CBAC为这些应用审查控制连接的同时,也能确定数据连接和其他连接是否正在被打开。当CBAC发现这些附加的连接时,会将连接的信息自动添加到状态表中,并在ACL内动态的添加条目以允许返回流量的进入(较老的版本中)。5.内嵌的地址信息对于CBAC支持的应用,CBAC也能审查这些连接,查看数据流量中是否有被嵌入的地址信息,如IP地址或端口号,并通过CiscoIOS在地址转换表中的转换条目来对这些地址信息做动态地修改。但是要注意的是,针对某些应用而言,CBAC只支持NAT,而不支持PAT。6.应用层的审查CBAC支持应用层信息得审查,从而限制设备间基于应用服务的交互。7.DoS探测CBAC能探测某些类型的DoS泛洪攻击。当DoS攻击发生时,CiscoIOS使用阻塞而已的数据包,生成警告信息,关闭伪造的连接等手段保护路由器。CBAC使用超时值和阈值来审查TCP连接的建立,CBAC会设置一个特定的计数器,在这个计数器计时结束的时候,TCP的连接建立还没有完成的话,CiscoIOS将从状态表中删除连接的信息,并发出TCPRST消息通知源地址和目的地址。这个措施被用来释放半开连接,保护路由器不会因为过多的连接而过载。CBAC可以建立3种阈值:TCP半开连接和UDP未完成的会话总数。一段时间内TCP半开连接和UDP未完成的会话数。每台主机TCP半开连接和UDP未完成的会话数。四、CBAC的附加特性1.JAVA内容的过滤在访问HTTP数据时,HTTP数据经常会携带JAVA的小程序,JAVA的小程序有可能会被恶意的利用。针对这些流量,CBAC也提供了过滤JAVA程序的手段。而需要注意的是,如果JAVA程序被压缩、加密或者是承载JAVA程序的HTTP流量在CBAC中没有定义的话,CBAC不能对JAVA程序进行过滤。配置JAVA过滤的步骤如下:步骤1定义标准访问控制列表来匹配需要进行JAVA过滤的流量:hostname(config)#access-listacl_#[permit|deny]ip_add步骤2对携带JAVA小程序的HTTP流量进行审查hostname(config)#ipinspectnameinspect_namehttpjava-listacl_#[alert{on|off}][audit-trail{on|off}][timeoutseconds]2.针对协议审查的端口映射CBAC使用端口映射来确定一个连接上应该执行审查的类型。端口映射(PAM)被用来重新映射端口或者关联其他非标准协议的端口到特定的应用服务,以便使CBAC可以进行审查过程。例如,默认情况下,使用TCP协议端口号为21的流量,CBAC认为这是FTP的应用,CBAC将针对FTP的审查应用在这个流量上。但是,某些情况下,我们会更改应用服务的端口号,比如说将HTTP服务的端口号改为21,这个时候CBAC就不能对这个流量做出正确的判断并执行审查,此时我们应该配置PAM来通知CBAC,应当对TCP端口21的应用进行HTTP服务的审查。另外,其他的非标准的端口,CBAC也不会进行审查,我们也需要通过PAM将这些非标准的端口指定为特定的服务,以提供给CBAC进行审查。PAM的映射关系被存放在PAM表中,这张表中包含三种类型的条目:系统定义的条目:这些条目建立了应用服务和标准端口的映射关系。用户定义的条目:这些条目建立了对应用服务和非标准端口的映射关系。也能应用一个范围到一个特定的应用。特定的主机条目:这些条目建立了某些主机所对应的应用服务和非标准端口的映射关系。PAM的配置方法如下:hostname(config)#ipport-mapapplication_nameportport_#[list]acl_#我们可以通过showipport-map命令来查看映射关系:五CBAC配置实例在这里举一个简单的例子来说明CBAC的配置方法:图1CBAC配置实例如图1所示:边界路由器的两边分别连接了内部网络和外部网络,外部网络上有一台TELNET服务器和服务器,TELNET所使用的端口是2323,在边界路由器的外部接口的入方向上配置了拒绝所有外部流量进入的访问控制列表来保护内部网络的主机不受外部网络攻击的侵害;内部网络有一台终端PC,IP地址是192.168.1.100,需要对外部的Telnet服务器进行登陆。需要保证终端PC可以正常的访问Telnet服务器,且不允许在外部的访问控制列表上添加任何ACE条目。命令(1)匹配源地址段是172.16.1.0/24的流量,访问控制列表的编号是1命令(2)匹配主机源地址是172.16.1.2的流量,访问控制列表的编号是23命令(3)建立外部的访问控制列表,拒绝所有流量进入内部网络命令(4)建立对从内部到外部HTTP流量的审查,并且针对除了匹配访问控制列表1的流量进行JAVA内容过滤命令(5)建立名称为CBAC的针对ICMP协议流量做审查的CBAC策略命令(6)建立名称为CBAC的针对TCP协议流量做审查的CBAC策略命令(7)说明将匹配访问控制列表23流量的TCP2323数据作为telnet流量进行审查我们在终端PC上进行ping操作和登陆该TELNET服务器后,查看路由器针对两种流量动态生成的访问控制列表与流量进程信息:由以上的信息,我们会发现,CBAC为我们的流量在外部接口的in方向上动态的生成了ACL条目允许返回流量的进入,并且针对从内部发起的流量生成了状态信息。在本例中我们使用的IOS版本较老,在较新的IOS版本中以不在生成ACL,而通过状态信息来检查是否允许流量进入。以下来自baidu概要基于上下文的访问控制协议(CBAC)通过检查通过防火墙的流量来发现&管理TCP和UDP的会话状态信息。这些状态信息被用来在防火墙访问列表创建临时通道。通过在流量向上配置ipinspect列表,允许为受允许会话放回流量和附加数据连接,打开这些通路。受允许会话是指来源于收保护的内部网络会话。[编辑本段]工作原理CBAC制定了那些协议及接口。接口方向(流入和流出)需要检查,同指定了检查的起始。CBAC只对制定的协议进行检查。对于这些协议,只要数据包经过已配置检查的接口,那么无论它们从那个方向通过防火墙都将被检查。进入防火墙的数据包只会在其第一次通过接口的入站ACL时才会被检察。如果数据包被ACL拒绝,数据包会被简单的丢掉并且不会被CBAC检查。[编辑本段]CBAC的配置在Cisco路由器上创建ACL(访问控制列表)是管理员常用的数据过滤和网络安全防护措施,但是ACL的局限性是非常明显的,因为它只能检测到网络层和传输层的数据信息,而对于封装在IP包中的恶意信息它是无能为力的。因此,ACL并不可靠,需要CBAC(基于上下文的访问控制)的配合,这样网络安全性将会极大提升。一、CBAC简述CBAC(context-basedaccesscontrol)即基于上下文的访问控制,它不用于ACL(访问控制列表)并不能用来过滤每一种TCP/IP协议,但它对于运行TCP、UDP应用或某些多媒体应用(如Microsoft的NetShow或RealAudio)的网络来说是一个较好的安全解决方案。除此之外,CBAC在流量过滤、流量检查、警告和审计蛛丝马迹、入侵检测等方面表现卓越。在大多数情况下,我们只需在单个接口的一个方向上配置CBAC,即可实现只允许属于现有会话的数据流进入内部网络。可以说,ACL与CBAC是互补的,它们的组合可实现网络安全的最大化。二、CBAC的合理配置1.CBAC配置前的评估在进行CBAC配置之前需要对网络的安全标准、应用需求等方面进行评估然后根据需要进行相应的配置。通常情况下,用户可以在一个或多个接口的2个方向上配置CBAC。如果防火墙两端