思科ASA系统MPF框架介绍(之二)

接上文?

  • 三、应用/Service(启用策略服务)

3.1定义应用服务
命令:service-policy policymap_name
视图:pmap-c视图
说明: 为本match匹配的流量启用policymap_name指定的策略。

3.2启动应用服务
命令:service-policy policymap_name? global | interface intf
视图:全局视图
说明: 为指定的接口启用policymap_name指定的策略。global表示为所有的接口启用该policy。

3.3默认策略介绍

默认策略,初始化配置下show service-policy可以看到系统的默认MPF策略:

Global policy:
? Service-policy: global_policy
??? Class-map: inspection_default
????? Inspect: dns preset_dns_map, packet 0, drop 0, reset-drop 0
????? Inspect: ftp, packet 0, drop 0, reset-drop 0
????? Inspect: h323 h225 _default_h323_map, packet 0, drop 0, reset-drop 0
????? Inspect: h323 ras _default_h323_map, packet 0, drop 0, reset-drop 0
????? Inspect: netbios, packet 0, drop 0, reset-drop 0
????? Inspect: rsh, packet 0, drop 0, reset-drop 0
????? Inspect: rtsp, packet 0, drop 0, reset-drop 0
????? Inspect: skinny , packet 0, drop 0, reset-drop 0
????? Inspect: esmtp _default_esmtp_map, packet 0, drop 0, reset-drop 0
????? Inspect: sqlnet, packet 0, drop 0, reset-drop 0
????? Inspect: sunrpc, packet 0, drop 0, reset-drop 0
????? Inspect: tftp, packet 0, drop 0, reset-drop 0
????? Inspect: sip , packet 0, drop 0, reset-drop 0
????? Inspect: xdmcp, packet 0, drop 0, reset-drop 0
?????
说明:可见,系统的默认情况下,启用了一个名为global_policy的全局策略的应用,所有match了名为inspection_default这个class-map的流量将使用这个策略,这个策略的动作是上面列出的这些各协议的Inspect动作(下面就将详细介绍Inspect)。

3.4显示MPF配置信息
show service-policy命令可以显示系统当前的MPF策略。

Firewall# show service-policy
Global policy:
? Service-policy: global_policy
??? Class-map: inspection_default
????? Inspect: dns maximum-length 512, packet 363, drop 0, reset-drop 0
????? Inspect: ftp, packet 0, drop 0, reset-drop 0
????? Inspect: h323 h225, packet 0, drop 0, reset-drop 0
????? Inspect: h323 ras, packet 0, drop 0, reset-drop 0
????? Inspect: rsh, packet 0, drop 0, reset-drop 0
????? Inspect: rtsp, packet 26601, drop 0, reset-drop 0
????? Inspect: esmtp, packet 1668, drop 0, reset-drop 0
????? Inspect: sqlnet, packet 0, drop 0, reset-drop 0
????? Inspect: skinny, packet 0, drop 0, reset-drop 0
????? Inspect: sunrpc, packet 0, drop 0, reset-drop 0
????? Inspect: xdmcp, packet 0, drop 0, reset-drop 0
????? Inspect: sip, packet 0, drop 0, reset-drop 0
????? Inspect: netbios, packet 0, drop 0, reset-drop 0
????? Inspect: tftp, packet 0, drop 0, reset-drop 0
????? Inspect: http, packet 36614, drop 0, reset-drop 0
????? Inspect: icmp, packet 3911, drop 0, reset-drop 0
????? Inspect: icmp error, packet 171, drop 0, reset-drop 0
??? Class-map: asa_class_tftp
????? Inspect: tftp, packet 0, drop 0, reset-drop 0
Interface outside:
? Service-policy: test-policy
??? Class-map: test
????? Inspect: http, packet 369, drop 0, reset-drop 0
????? Priority:
??????? Interface outside: aggregate drop 0, aggregate transmit 0
Interface inside:
? Service-policy: PolicyA
??? Class-map: http_class
????? Inspect: http test_http, packet 99400, drop 41, reset-drop 0
??? Class-map: ftp_class
????? Inspect: ftp strict Filter_ftp, packet 696, drop 0, reset-drop 0
??? Class-map: test
????? Priority:
??????? Interface inside: aggregate drop 0, aggregate transmit 0
Firewall#

  • 四、Inspection(ASA7.0版本之前的fixup)功能:

4.1概述:
Inspection涉及协议众多,但各协议都遵循统一的配置规则,本文仅就这些共性的配置规则做介绍,就不逐一针对各协议介绍其细节命令了,其实各协议的配置基本都是类似的。先举例几个Inspection的配置:
(各协议在FWSM、PIX和ASA系统下的详细命令索引参见Cisco.Press.Cisco.ASA.PIX.and.FWSM.Handbook.2nd.Edition.Aug.2007文档第490页的Table 7-7)
TFTP协议:
TFTP— Firewall(config-pmap-c)# inspect tftp
FWSM— Firewall(config-pmap-c)# inspect tftp
PIX—- Firewall(config)# fixup protocol tftp [port[-port]]
HTTP协议:
ASA —- Firewall(config-pmap-c)# inspect http [http_pmap_name]
FWSM—- Firewall(config-pmap-c)# inspect http [http_map_name]
PIX—– Firewall(config)# fixup protocol http [port[-port]
H.323协议:
ASA —- Firewall(config-pmap-c)# inspect h323 [h323_pmap_name]
FWSM—- Firewall(config-pmap-c)# inspect h323 {h225 [h225_map] | ras}
PIX—– Firewall(config)# fixup protocol h323 {h225 | ras}? port[-port]

我们可以看到,使能fixup时只有在PIX系统才指定协议的端口号,因为在PIX7.0系统中,还不存在MPF框架机制,配置在全局视图下进行,而在ASA和FWSM的MPF框架中,各Inspection(fixup)在定义之时已经在相应的策略和分类视图下(如上面的TFTP),有的协议还可以指定全局配置的策略视图(如上面的HTTP指定了名为http_pmap_name的策略,H323指定了名为h323_pmap_name的策略,这类协议的策略视图下面可以使用parameters命令配置一些高级参数,后面详细介绍),所以就无需在此再指定端口了,并且,MPF的策略和分类机制提供了更加复杂和灵活的流量分类方法。

4.2支持parameters命令配置inspection的协议
如上面介绍的HTTP或H323使能fixup时指定的策略那样,ASA系统对于某些协议的Inspection,除了可以match本视图相应的流量,还可以指定全局配置的pmap,这类视图的一个“高级”之处在于可以在视图下使用parameters命令进入“config-pmap-p”视图配置一些高级参数。

可以像下面这样查看哪些协议的Inspection(fixup)可以如此指定高级属性参数策略,它们都可以在全局配置视图下用policy-map type inspect创建策略视图:
ciscoasa(config)# policy-map type inspect ?

configure mode commands/options:
? dcerpc???????????? Configure a policy-map of type DCERPC
? dns??????????????? Configure a policy-map of type DNS
? esmtp????????????? Configure a policy-map of type ESMTP
? ftp??????????????? Configure a policy-map of type FTP
? gtp??????????????? Configure a policy-map of type GTP
? h323?????????????? Configure a policy-map of type H.323
? http?????????????? Configure a policy-map of type HTTP
? im???????????????? Configure a policy-map of type IM
? ipsec-pass-thru??? Configure a policy-map of type IPSEC-PASS-THRU
? mgcp?????????????? Configure a policy-map of type MGCP
? netbios??????????? Configure a policy-map of type NETBIOS
? radius-accounting? Configure a policy-map of type Radius Accounting
? rtsp?????????????? Configure a policy-map of type RTSP
? sip??????????????? Configure a policy-map of type SIP
? skinny???????????? Configure a policy-map of type Skinny

4.3支持class-map type inspect方式创建cmap的协议
对于某些协议,不使用我们上面介绍的传统的class-map方式创建cmap,而使用一种特殊的class-map type inspect方式(因为这些协议的cmap下需要有一些专有的选项配置):
ciscoasa(config)# class-map type inspect? ?

configure mode commands/options:
? dns?? Configure a class-map of type DNS
? ftp?? Configure a class-map of type FTP
? h323? Configure a class-map of type H323
? http? Configure a class-map of type HTTP
? im??? Configure a class-map of type IM
? rtsp? Configure a class-map of type RTSP
? sip?? Configure a class-map of type SIP
?
4.4Inspection的一个例子
以一个ASA系统HTTP的Inspection实例的配置,对上面的Inspection介绍做一个回顾加深认识:
Firewall(config)# class-map type inspect http match-any MyHTTPClass_drop
【注: 可以看到,之所以使用class-map type inspect方式定义cmap,因为下面这类match是http专有的】
Firewall(config-cmap)# match req-resp-content-type mismatch??
Firewall(config-cmap)# match request uri length gt 1024
Firewall(config-cmap)# exit
Firewall(config)# class-map type inspect http match-any MyHTTPClass_log
Firewall(config-cmap)# match response body active-x
Firewall(config-cmap)# match response body java-applet
Firewall(config-cmap)# exit
!
Firewall(config)# policy-map type inspect http MyHTTPPolicy
【注:这种使用policy-map type inspect定义的pmap策略视图可以用parameter命令进入(config-pmap-p)视图,进而配置一些高级参数。】
Firewall(config-pmap)# parameters
Firewall(config-pmap-p)# body-match-maximum 1000
Firewall(config-pmap-p)# exit

Firewall(config-pmap)# class MyHTTPClass_drop
Firewall(config-pmap-c)# drop-connection
Firewall(config-pmap-c)# exit
Firewall(config-pmap)# class MyHTTPClass_log
Firewall(config-pmap-c)# log
Firewall(config-pmap-c)# exit
Firewall(config-pmap)# exit
!
Firewall(config)# policy-map MyPolicy
Firewall(config-pmap)# class class-default
Firewall(config-pmap-c)# inspect http MyHTTPPolicy
Firewall(config-pmap-c)# exit
Firewall(config-pmap)# exit
Firewall(config)# service-policy MyPolicy interface outside

注意:在FWSM和ASA的7.2之前的版本中,使用下面这种方式定义cmap
MGCP协议: Firewall(config)# mgcp-map mgcp_map_name
HTTP协议: Firewall(config)# http-map Filter_http
GTP协议:Firewall(config)# gtp-map gtp_map_name
ASA7.2版本中,基本上所有协议已经不使用这样的方式了(统一换成了上面介绍的MPF框架机制),但是,不包括SNMP,它仍然采用如下方式:
snmp举例:
Firewall(config)# snmp-map Filter_snmp
Firewall(config-snmp-map)# deny version 1
Firewall(config-snmp-map)# deny version 2
Firewall(config-snmp-map)# exit
!
Firewall(config)# class-map _MyClass
Firewall(config-cmap)# match any
Firewall(config-cmap)# exit
Firewall(config)# policy-map MyPolicy
Firewall(config-pmap)# class MyClass
Firewall(config-pmap-c)# inspect snmp Filter_snmp
Firewall(config-pmap-c)# exit
Firewall(config-pmap)# exit
Firewall(config)# service-policy MyPolicy interface outside

<完>

仓促之间查阅资料和思科设备完成此文,如有不足不正之处,还请高人指点斧正,Adreaman感激不尽。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>