Monday, February 13, 2012

思科IOS防火墙


翻译自思科官方出的CCIE RS认证指南《CCIE Routing and Switching Exam Certification Guide 4th Edition

经典的思科IOS防火墙
    在一些情况下,访问列表过滤足于控制和保护一个路由器接口。但是随着攻击者变得越来越老练,思科也发展出更好的工具来处理这些威胁。颇为艰难的是,常常需要实现安全性时对网络用户相对透明,而又能防御攻击。思科的IOS防火墙是这些工具中的一种。
 
    经典的IOS防火墙依靠基于上下文的访问列表(Context-Base Access Control,CBAC.CBAC是思科IOS内置的一个防火墙特性功能。它通过人工定义的动态检测流量的一两个或更多的步骤,实现流量穿越路由器时的访问列表过滤。它的实现是基于实际的协议命令。比如FTP get 命令,而不是简单的四层端口号。CBAC根据流量的起源决定哪些流量应该允许通过访火墙。 当发现一个来自可信任网络的特定协议发起一个会话,CBAC会在防火墙上创建临时开放条目去允许相应的从非信任网络返回可信任网络的流量。(译者注:类似于自反ACL),而默认情况下其它的过滤方式是阻断的。CBAC只允许需要的流量,而不是开放防火墙去允许特定协议的所有流量。
 
    CBAC工作在TCPUDP流量的层面上,支持像FTP这种需要多个并发连会话或连接的协议。典型的应用是通过配置CBAC使其检测从外部来的这些协议的流量,来保护内部网络免受外部威胁。要使用CBAC,你需要配置以下内容:
要检测的协议
要检测的接口
要检测的每个接口的流量方向
 
基于CBACTCP vs UDP
    TCP有明确的连接,所以CBAC(和其它有状态检测和过滤方法)能够很容易地处理。但是,CBAC不是工作在简单的协议和端口号,而是在更深的层次。比如CBAC能够通过检测和识别特定的FTP控制信道命令,决定在什么时候开放或关闭防火墙的临时开放条目。
 
    TCP不同的是,UDP流量是无连接的,所以比较难处理。CBAC管理UDP流量是基于一些因素决定的,比如UDP报文的原、目的地址和端口是否和最近来的流量一致,还有它们的相对时间间隔。你可以配置一个全局空闲超时时间决定多长间隔之内可以认为是同一个流。你也可以配置其它超时时间,包括TCPUDP流量的特定协议超时时间。
思科IOS防火墙协议支持
    当使用CBAC的时候,IOS防火墙能够检测很长的协议列表,并且随着时间继续增加。CBAC通够检测的常用协议有:
       ■  任何普通的TCP会话,无论是哪种应用层协议
       ■  所有UDP会话
       ■  FTP
       ■  SMTP
       ■  TFTP
       ■  H.323(网络会议,电视会议等)
       ■  Java
       ■  CU-SeeMe
       ■  UNIX R命令(rlogin,rexec,rsh等)
       ■  Real Audio
       ■  Sun RPC
       ■  SQL*Net
       ■  StreamWorks
       ■  VDOLive
 
思科IOS防火墙注意事项
    虽然CBAC有强大的动态检测和过滤功能,但是它有一些缺陷。你应该知道CBAC的一些局限性和注意事项:
 
       ■  接口上如果配置了访问列表,那么将先检查访问列表再检查CBAC。如果一个访问列表在接口上阻断了一个特定类型的流量,那么流量将在CBAC检测前就被拒绝掉。
 
       ■  CBAC不能够防止来自内部网络的攻击。而实际上大部分攻击是来自内部的。
 
       ■  CBAC只根据你定义的协议检测,而不影响访问列表等其它过滤方式。
 
       ■  如果需要检测非TCPUDP流量,你必须配置一个命名检测规则。
 
       ■  CBAC并不检测源自路由器或发往路由器的流量,只检测穿过防火墙路由器的流量。
 
       ■  CBAC在处理加密流量时有缺陷。
 
思科IOS防火墙配置步骤
    虽然配置CBAC并不难,但需要很多步骤,具体如下:
1.选择一个接口(“inside”或“outside”)
2.配置一个拒绝所有需要检测的流量的访问列表。
3.使用ip inspect命令配置全局超时时间和阈值。
4.使用ip inspect name protocol定义一个检测规则和可选的针对特定规则的超时时间值。比如:ip inspect name WOLF ftp timeout 3600
5.在接口上调用检测规则。比如在接口配置模式下:ip inspect WOLF in
6.在相同接口下调用访问列表,但是是调用在相反的方向。(inboundoutbound
18-15显示一个路由器其中一个接口连接内网,一个连接外网。CBAC将在外网接口上调用。这个路由器被本置为使用CLASS_FW检测所有的ICMPTCPUDP流量,TCP和会话将在30秒后超时。但是ICMP会话将只在10秒后超时。访问列表IOS_FW允许路由协议流量,但拒绝所有将会被CBAC检测的流量。检测规则调用在出接口,outbound方向。访问列表调用在相同接口,inbound方向。所有TCPUDPICMP通过串口流向外网的一台主机的流量将被track。回包将根据访问列表IOS_FW里一个动态条目被允许通过。但是,访问列表IOS_FW将拒绝任何外部主机向内网主机发起的连接。
 
    可以通过命令show ip inspect session查出IOS防火墙的运行情况。可以看到例子中有一个telnet的会话已建立。
18-15 利用CBAC配置经典IOS防火墙
ip inspect name CLASSIC_FW icmp timeout 10
ip inspect name CLASSIC_FW tcp timeout 30
ip inspect name CLASSIC_FW udp timeout 30
!
ip access-list extended IOS_FW
permit eigrp any any
deny tcp any any
deny udp any any
deny icmp any any
!
interface Serial0/0
ip address 192.168.1.3 255.255.255.0
ip access-group IOS_FW in
ip inspect CLASSIC_FW out
!
R2#show ip inspect sessions
Established Sessions
Session 47699CFC ( 10.1.1.2:11003)=>(172.16.1.10:23) tcp SIS_OPEN
 
    CBAC是一个强大的IOS防火墙特性集选项,在参加CCIE  RS认证考试前,你必须理解其功能。
 
 
思科IOS 基于区域的防火墙(Zone-Based Firewall
    从例18-15中你会发现,就算配置一个简单的经典的IOS防火墙也是非常复杂的。另外,经典的IOS检测策略需要在所有接口上调用,你不能对不同用户组应用不同的策略。
 
    基于区域的防火墙(ZFW)改变了这一情况。(ZFW12.46)或之后的IOS版本可用。)基于区域的防火墙的概念和硬件防火墙类似。路由器接口将被划入安全区域。流量在同一区域内自由通行,但在不同区域间默认是被阻止的。已划入安全区域的接口和没有划入安全区域接口间的流量也是被阻断的。你必须显式地调用一个策略去允许区域间的流量。区域策略利用基于策略的语言(Class-Base Policy Language,CPL)配置,类似于MQC。如果需要的话,Class map允许你配置高颗粒度的策略。基于区域的防火墙引入了一个新的classpolicy map类型——inspect类型。
 
ZFW 允许检测和控制许多协议,包括:
 
■ HTTP and HTTPS
■ SMTP, Extended SMTP (ESMTP), POP3, and IMAP
■ P2P应用(能够利用启发式跟踪跳动端口)
■ IM应用 (AOL, Yahoo!, MSM)
■ Remote Procedure Calls (RPC)
 
以下是配置ZFW的步骤:
1.决定所需要的区域,并在路由器上创建。
2.决定流量在不同区域量如何流动,并在路由器上创建zone-pair(区域对)
3.创建class map去识别区需要防火墙检测的区域间的流量
4.创建policy map并关联class map来管理流量。
5.在正确的zone-pair上调用policy map.
6.将接口划入区域。一个接口只能划入一个安全区域。
 
    为了帮助你理解这些步骤,看看图18-11的网络。路由器Branch 1 有两个接口:一个串行WAN接口,一个以太网接口。这是一个简单的例子,但在IOS防火墙可用的情况下很常在小型的分支办公室里使用。LAN口被划入一个LAN区域,WAN接口被划入WAN区域。
 
18-11思科IOS基于区域的防火墙
在这个例子里,网络管理员决定对LAN区域到WAN区域的流量使用以下策略:
        只有允许来自LAN子网的流量
        允许访问Corp intranet serverHTTP流量。
        允许其它所有HTTP流量,但限速为1Mbps
        阻止ICMP
        对所有流量,TCPUDP的超时时间必须小于300秒。
 
对于从WAN区域到LAN区域的流量,只有来自公司管理网络的SSH允许通过。
 
    所以,你必须配置两个区域:LANWAN。路由器为自己自动创建一个区域,叫做self zone.默认情况下,允许所有始发或到达这个区域的流量,但可以手动修改。在这个例里,防火墙策略将被应用在从LAN区到WAN区的流量,以及从WAN区到LAN区的流量。所以你需要两个zone pairLAN-to-WANWAN-to-LAN。配置zone需要使用全局命令zone security name ,配置zone paire需要使用全局命令zone-pair security name source source-zone-namedestination desination-zone-name。例18-16显示两个步骤::配置zonezone pair
18-16 配置ZFW zonezone pair
Branch1(config)# zone security LAN
Branch1(config-sec-zone)# description LAN zone
!
Branch1(config)# zone security WAN
Branch1(config-sec-zone)# description WAN zone
!
Branch1(config)# zone-pair security Internal source LAN destination WAN
Branch1(config)# zone-pair security External source WAN destination LAN
 
 
    下一步是创建class map去识别流量。需要4class map:三个用来指定定制策略的流量类型,另一个用来指定所有来自LAN的流量。路由器自动创建一个默认的class,但所有在这个class下的流量都被drop。例18-17显示访问列表LAN_Subnet允许所有来自LAN子的流量,访问列表Web_Servers允许去往corp intranet servers的流量。注意class map Corp_Servers使用match-all关键字同时匹配访问列表Web_ServerHTTP协议,所以访问列表和协议类型必须同时匹配。例如,class map Other_HTTP同时匹配HTTP协议和访问列表LAN_Subnet,以达到只允许从本地来的HTTP流量。class map ICMP只匹配ICMP协议,因为所有流量将被丢弃,没有必要让路由器检测原地址。路由器将使用NBAR去匹配HTTPICMP流量。
 
18-17 配置ZFW class map
Branch1(config)# ip access-list extended LAN-Subnet
Branch1(config-ext-nacl)# permit ip 10.1.1.0 0.0.0.255 any
!
Branch1(config-ext-nacl)# ip access-list extended Web_Servers
Branch1(config-ext-nacl)# permit tcp 10.1.1.0 0.0.0.255 host 10.150.2.1
Branch1(config-ext-nacl)# permit tcp 10.1.1.0 0.0.0.255 host 10.150.2.2
!
Branch1(config-ext-nacl)# class-map type inspect match-all Corp_Servers
Branch1(config-cmap)# match access-group name Web_Servers
Branch1(config-cmap)# match protocol http
!
Branch1(config-cmap)# class-map type inspect Other_HTTP
Branch1(config-cmap)# match protocol http
Branch1(config-cmap)# match access-group name LAN_Subnet
!
Branch1(config-cmap)# class-map type inspect ICMP
Branch1(config-cmap)# match protocol icmp
!
Branch1(config-cmap)# class-map type inspect Other_Traffic
Branch1(config-cmap)# match access-group name LAN_Subnet
 
在第4步,将之前创建的class map关联到policy mapZFWpolicy map能够在每一个class map下执行以下动作:
Drop——丢弃数据包
Inspect——使用CBAC引擎
Pass——通过数据包
Police——监管流量
Service-policy——使用包深层检测引擎
Urlfilter——使用URL过滤引擎
    回想一下,对于普通的网络流量,TCPUDP计时器需要减少到300秒,这可以通过一个parameter map实现。Parameter mappolicy map下指定的class修改流量检测行为。在例18-18里,parameter map TimeoutsTCPUDPidle时间设置为300秒。Parameter map也可以用来设置警告和审计跟踪,并且控制其它会话参数,比如半连接(half-open)的会话数。Policy map LAN2WAN关联所有目前已创建的class map,并且对class Other_Traffice应用parameter map,同时限制了Other_HTTP流量到1Mbps,突发速率为8Kbps。注意policy map的配置也使用type inspect这关键字。
 
18-18 配置ZFW parameter mappolicy map
Branch1(config)# parameter-map type inspect Timeouts
Branch1(config-profile)# tcp idle-time 300
Branch1(config-profile)# udp idle-time 300
!
Branch1(config-profile)# policy-map type inspect LAN2WAN
Branch1(config-pmap)# class type inspect Corp_Servers
Branch1(config-pmap-c)# inspect
!
Branch1(config-pmap-c)# class type inspect Other_HTTP
Branch1(config-pmap-c)# inspect
Branch1(config-pmap-c)# police rate 1000000 burst 8000
!
Branch1(config-pmap-c)# class type inspect ICMP
Branch1(config-pmap-c)# drop
!
Branch1(config-pmap-c)# class type inspect Other_Traffic
Branch1(config-pmap-c)# inspect Timeouts
class Other_Traffic 下没有指定要检测的协议,那么所有协议将被检测。
 
    在第5步中,将创建policy map,并调用在zone pair下,这类似于在MQC中将一个service policy调用在接口下。命令是在zone pair配置模工下使用service-policy type inspect policy-map-name 。
 
    最后一步,第6步,通过在接口模式下使用命令zone-member security zone-name将路由器接口划入正确的zone。回到图18-11看一下,接口F0/0连接LAN,接口S0/0/0连接WAN。例18-19显示了如何将service policy调用在zone pair下,另外,有两个接口划入了zone
 
18-19 调用ZFW service policy和划入zone
Branch1(config)# zone-pair security Internal source LAN destination WAN
Branch1(config-sec-zone-pair)# service-policy type inspect LAN2WAN
Branch1(config-sec-zone-pair)# exit
!
Branch1(config)# interface fa 0/0
Branch1(config-if)# zone-member security LAN
!
Branch1(config-if)# interface s0/0/0
Branch1(config-if)# zone-member security WAN
!
!Verify the configuration
Branch1# show zone-pair security
Zone-pair name Internal
Source-Zone LAN Destination-Zone WAN
service-policy LAN2WAN
Zone-pair name External
Source-Zone WAN Destination-Zone LAN
service-policy not configured
 
    到目前为止,你已经看到一些创建并调用对从本地LANWAN相当复杂的防火墙策略。在这个时候,只有回包能够到达LAN。需要创建其它class map 和service policy将需要来允许从WAN发向LANSSH会话。然后policy map将被调用在 zone pair Extenrnal。在例子并没有写出来,你最好自己做一下练习,以确保理解ZFW背后的概念。

No comments: