一、Cisco IOS安全技术
Cisco IOS防火墙特性集作为Cisco IOS软件的一个选项,提供了一个先进的安
全解决方案,这种集成化路由器安全解决方案是Cisco Systems安全解决方案系
统中的一个部件。
全解决方案,这种集成化路由器安全解决方案是Cisco Systems安全解决方案系
统中的一个部件。
Cisco IOS安全服务包括一系列特性,能使管理人员将一台Cisco路由器配置成
为一个防火墙,而Cisco IOS防火墙特性集则可以为现有的Cisco IOS安全解决
方案增加更大的深度和灵活性。表1为Cisco IOS防火墙特性集相关新特性的概
述。
为一个防火墙,而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***。提供
扩展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监视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)
状态表中,否则,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特性会
自动的启用并且不能被关闭。
(FAB),使用这个特性后,Cisco IOS不会为允许返回的流量创建动态ACL条目,
而是直接查看状态表看哪些流量允许返回内部网络,这是通过快速交换进程,如
CEF来实现的,从而加快了处理返回的流量的速度。如果在状态表中没有发现符
合的条目,则继续进行进站ACL的检查过程。在12.3(4)T之后,FAB特性会
自动的启用并且不能被关闭。
注意:CBAC能够配置要检测哪个方向的流量,大多数情况下,你可以在边界路
由器上配置CBAC来允许返回到内部网络的流量。然而,你也能够配置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。
IOS会等待5秒钟来关闭连接,并且删除动态ACL条目(在FAB特性引入之前),
并从状态表中删除条目。如果一个TCP的会话空闲超过1个小时,则Cisco IOS
会移除这个条目。此外和RACL不同的是CBAC会要求TCP连接在看到第一个SYN
字段的30秒钟之内(用户配置)建立。如果在这个时间断里没有建立,Cisco IOS
会从状态表中出这个条目和ACL。
此外,CBAC还会检查TCP连接的序列号来保证在一个范围内。如果不在这个范
围中,CBAC会丢且这些报文,并且假设发生了DoS欺骗***。
围中,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***。
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发现额外开启的连接,他会自动将这些信息加入到状态表
中(在启用FAB之前,还会加入到动态ACL种)来允许这些连接通过路由器。
对于地址转换的支持:
CBAC对于经过地址转换的地址能够在状态表种进行正确的转换,并正确的响应。
但是有两个限制:
但是有两个限制:
. 启用CBAC的路由器必须同时扮演地址转换的角色,这样才能够获得包头
的地址转换的信息。
. 并不支持所有的应用程序;只支持某些类型的地址转换,如NAT,而不是
PAT。
的地址转换的信息。
. 并不支持所有的应用程序;只支持某些类型的地址转换,如NAT,而不是
PAT。
CBAC的配置:
步骤一:决定路由器上的哪个接口作为内部接口,哪个接口作为外部接口
内部接口(internal)是指连接发起的数据包进入CBAC路由器的接口,外部接
口(external)是流量出去后返回CBAC路由器的接口,如果要配置双向CBAC,
推荐先配置单向CBAC,测试正常后再配置另外一边。
口(external)是流量出去后返回CBAC路由器的接口,如果要配置双向CBAC,
推荐先配置单向CBAC,测试正常后再配置另外一边。
注意:如果不配置内部端口,则除了外部端口外的所有端口都是内部端口
步骤二:创建普通的IP ACL列表过滤进入和离开内部网络的流量,并保证那些
要监视的出站流量允许被通过
要监视的出站流量允许被通过
推荐在配置CBAC之前,先用ACL(应用到接口上)允许某些必要的流量进入或
离开内部网络,这样做简化了以后的CBAC配置和相关拍错
离开内部网络,这样做简化了以后的CBAC配置和相关拍错
步骤三:(可选)改变全局的连接超时时间
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端口,必须要手动配置。
准端口的应用程序,如HTTP使用8080端口,必须要手动配置。
PAM表中有三类条目:
. System-defined entries-默认的应用程序端口条目
. User-defined entries-用户定义的应用程序端口条目
. Host-specific entries-User-defined entries的一种,如果一个应用
程序同时存在默认端口和用户自定义的端口,则用户自定义的条目称为
Host-specific 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指定哪些设备使用非标准的端口,如果不加代表全部设备。
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连接
检测IP地址为192.1.1.3,端口为8090的HTTP连接
注意:
PAM表在某些版本的Cisco IOS上必须保存配置,重启后才生效
使用show ip port-map查看
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
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}
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线程上。
警默认情况会开启,并自动显示在console线程上。
全局关闭CBAC告警:
Router(config)# ip inspect alert-off
审计
审计会追踪CBAC检查的连接,获取他们的统计信息。默认情况下审计是关闭的。
全局开启CBAC审计,默认情况会显示在console线程上:
Router(config)# ip inspect audit trail
CBAC 实验
实验拓扑
实验要求
1. R1是内网,而R3是外网;
2. 全网运行ospf协议;
3. 内网可以ping通外网,但外网不能ping通内网;
4. 内网可以telnet到外网的3.3.3.3,但外网不能telnet到内网;
5. 对内网访问外网进行审计和跟踪。
6. 若要允许R1能够traceroute R3,而R3 不能traceroute R1呢?
2. 全网运行ospf协议;
3. 内网可以ping通外网,但外网不能ping通内网;
4. 内网可以telnet到外网的3.3.3.3,但外网不能telnet到内网;
5. 对内网访问外网进行审计和跟踪。
6. 若要允许R1能够traceroute R3,而R3 不能traceroute R1呢?
实验步骤:
1. 配置ospf协议:
R1: router ospf 1
Router-id 1.1.1.1
Network 192.168.12.0 0.0.0.255 area 0
Network 1.1.1.1 0.0.0.0 area 0
R2,R3类似。
2. 配置CBAC:
Access-list 100 permit icmp any any (允许内部ping外部)
Access-list 100 permit icmp any any (允许内部ping外部)
Access-list 100 permit ospf any any (允许OSPF协议)
Access-list 100 permit tcp any host 3.3.3.3 eq telnet(当telnet成功,
回来的流量杯CBAC检测)
回来的流量杯CBAC检测)
Access-list 110 permit icmp any any echo-reply(允许外部回应内
部ping包)
部ping包)
Access-list 110 permit ospf any any
ip inspect name itb tcp audit-trail on(配置CBAC,打开跟踪功能)
no ip inspect alert-off(默认就是开启的,不需要这条命令)
Int s0/0
Ip access-group 100 in
Ip inspect itb in
Int s0/1
Ip access-group 110 in
3. 若允许traceroute,则配置为:
Access-list 100 permit icmp any any (允许内部ping外部)
Access-list 100 permit ospf any any (允许OSPF协议)
Access-list 100 permit tcp any host 3.3.3.3 eq telnet(当telnet成功,
回来的流量杯CBAC检测)
回来的流量杯CBAC检测)
Access-list 100 permit ip any any (允许IP流量,同时允许了
traceroute)
Access-list 110 permit icmp any any echo-reply(允许外部回应内
部ping包)
部ping包)
Access-list 110 permit ospf any any
Access-list 110 permit icmp any any time-exceeded
Access-list 110 permit icmp any any unreachable(允许回应内部到
外部的traceroute包)
外部的traceroute包)
ip inspect name itb tcp audit-trail on(配置CBAC,打开跟踪功能)
no ip inspect alert-off(默认就是开启的,不需要这条命令)
Int s0/0
Ip access-group 100 in
Ip inspect itb in
Int s0/1
Ip access-group 110 in
4. 查看:
R1#TELNET 3.3.3.3
登录成功后可以在R2#show ip inspect session
Show ip inspect config
Debug ip inspect events
R1#traceroute 3.3.3.3可以到达。