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

MPF(Modular Policy Framework, 模块式策略框架)是思科ASA7.0版本引入的一套“对报文按规则分类并针对各分类灵活的应用不同策略”的机制。它由三部分组成,分类(class)、策略(policy)和应用(service),其中分类是将报文分类的机制,定义各种灵活的规则将报文划分为不同的“流”;策略是对“流”采取的“动作”;应用(service)是将策略在可指定的位置启用起来。思科ASA7.0版本之后的各种filter过滤功能和Inspect(即fixup)功能开始切换到这一框架之中实现并且功能上得到很大的强化和丰富(旧版本的fixup和filter过滤命令依然存在,以向后兼容)。Adreaman尝试通过本文对这一框架机制进行概要地基础性分析和总结。

  • 一、分类/class(匹配L3/L4流量)

1.1创建class

命令 :class-map cmap名称
视图:全局配置视图下
说明: 定义class map。cmap名称长度在40字符以下,输入此命令后将进入config-cmap视图,即进入此L3/L4流量cmap的配置视图。

命令: rename cmap新名称
视图: cmap视图下
说明: 给cmap改名

命令: description text
视图: cmap视图下
说明: 给cmap增加描述说明文字(200字符以下)

(除了Match一个VPN Tunnel组和Match一个默认流量(default-inspection-traffic)之外(这两种分类在后面会介绍),一个cmap只能match一条匹配规则)

1.2匹配端口

命令: match port {tcp | udp} {eq port | range start end}
视图: cmap视图
说明: 根据port范围定义match规则对流量分类匹配。指定match的端口号范围和TCP/UDP方式。
举例:
Firewall(config)# class-map class_http
Firewall(config-cmap)# match port tcp eq http
Firewall(config-cmap)# exit
Firewall(config)# class-map class_sip
Firewall(config-cmap)# match port udp eq sip
Firewall(config-cmap)# exit

1.3匹配ACL

命令: match access-list acl名称
视图: cmap视图
说明: 根据指定的ACL来定义match规则对流量分类匹配。注意,cmap忽略ACL语句中的permit和deny;另外ACL应该使用地址转换之后的地址。
举例:
Firewall(config)# access-list MyTraffic extended permit tcp any
? any eq http
Firewall(config)# access-list MyTraffic extended permit tcp any
? any eq https
Firewall(config)# access-list MyTraffic extended permit tcp any
? any eq 8080
Firewall(config)# class-map MyClass
Firewall(config-cmap)# match access-list MyTraffic

1.4匹配QOS字段
命令: match precedence value1 [value2 [value3 [value4]]]
视图: cmap视图
说明: 根据IP头的TOS部分的precedence数值来match规则对流量分类匹配。最多可以同时在一条match中指定4种TOS值。
附:TOS的precedence的8种二进制数值如下:
??????????? 111 – Network Control
??????????? 110 – Internetwork Control
??????????? 101 – CRITIC/ECP
??????????? 100 – Flash Override
??????????? 011 – Flash
??????????? 010 – Immediate
??????????? 001 – Priority
??????????? 000 – Routine
举例:
Firewall(config)# class-map high_precedence
Firewall(config-cmap)# match precedence 4 5
Firewall(config-cmap)# exit
???????????
???????????
命令: match dscp value1 [value2 ...[value8]]
视图: cmap视图
说明: 根据IP的DSCP数值来match规则对流量分类匹配。最多可以同时在一条match中指定8种DSCP值。可以用0-64的数值表示DSCP值,也可以使用DSCP服务名称表示。
附:DSCP数值和DSCP服务名称
对应的服务? DSCP(二进制) DSCP[dec][Hex] TOS(十六进制)
BE????????? 0??????????? 0     ?? 0????????????
AF1???????? 001 010????? 10[0x0a]????? 40[0x28]?????
AF1???????? 001 100????? 12[0x0c]????? 48[0x30]?????
AF1???????? 001 110????? 14[0x0e]????? 56[0x38]?????
AF2???????? 010 010????? 18[0x12]????? 72[0x48]?????
AF2???????? 010 100????? 20[0x14]????? 80[0x50]?????
AF2???????? 010 110????? 22[0x16]????? 88[0x58]?????
AF3???????? 011 010????? 26[0x1a]????? 104[0x68]????
AF3???????? 011 100????? 28[0x1c]????? 112[0x70]????
AF3???????? 011 110????? 30[0x1e]????? 120[0x78]????
AF4???????? 100 010????? 34[0x22]????? 136[0x88]????
AF4???????? 100 100????? 36[0x24]????? 144[0x90]????
AF4???????? 100 110????? 38[0x26]????? 152[0x98]????
EF????????? 101 110????? 46[0x2E]????? 184[0xB8]????
CS6(INC)??? 110 000????? 48[0x30]????? 192[0xC0]????
CS7(NC)???? 111 000????? 56[0x38]????? 224[0xE0]????????
??????
举例:
Firewall(config)# class-map dscp_ef
Firewall(config-cmap)# match dscp ef
Firewall(config-cmap)# exit
Firewall(config)# class-map dscp_af4
Firewall(config-cmap)# match dscp af41 af42 af43
Firewall(config-cmap)# exit

1.5匹配RTP
命令: match rtp starting_port range
视图: cmap视图
说明: 匹配指定端口范围内的RTP流量。starting_port范围(2000-65535),range范围(0-16383)。
举例:
Firewall(config)# class-map rtp
Firewall(config-cmap)# match rtp 2000 100
Firewall(config-cmap)# exit

1.6匹配Tunnel组
命令:
match tunnel-group name
match flow ip destination-address
视图:cmap视图
说明:第一条命令匹配tunnel流量,第二条命令可以指定目的地址来匹配某条tunnel流。
举例:
hostname(config)# class-map cmap
hostname(config-cmap)# match tunnel-group
hostname(config-cmap)# match flow ip destination-address
hostname(config-cmap)# exit

1.7匹配所有
命令:match any
视图:cmap视图
说明:匹配所有流量。(系统默认有一个名为class-default的配置,在它的视图下就默认配置了match any)

1.8匹配默认常见端口
命令:match default-inspection-traffic
视图:cmap
说明:根据常见协议匹配流量。这是系统的初始默认配置,如下:
class-map inspection_default
?match default-inspection-traffic
在cmap视图下输入match加问好后,可以看到他的具体match情况:
default-inspection-traffic? Match default inspection traffic:
????????????????????????????? ctiqbe—-tcp–2748????? dns——-udp–53??????
????????????????????????????? ftp——-tcp–21??????? gtp——-udp–2123,3386
????????????????????????????? h323-h225-tcp–1720????? h323-ras–udp–1718-1719
????????????????????????????? http——tcp–80??????? icmp——icmp?????????
????????????????????????????? ils——-tcp–389?????? mgcp——udp–2427,2727
????????????????????????????? netbios—udp–137-138?? radius-acct—udp–1646
????????????????????????????? rpc——-udp–111?????? rsh——-tcp–514?????
????????????????????????????? rtsp——tcp–554?????? sip——-tcp–5060????
????????????????????????????? sip——-udp–5060????? skinny—-tcp–2000????
????????????????????????????? smtp——tcp–25??????? sqlnet—-tcp–1521????
????????????????????????????? tftp——udp–69??????? xdmcp—–udp–177?????
也就是说,使用match default-inspection-traffic后,就将match这些常见协议的标准流量。

1.9匹配正则表达式

一个cmap还可以用正则表达式来设定规则:
命令:regex regex_name regular_expression
视图:全局
说明:定义一个正则表达式对象。参数:regex_name,为这个正则表达式指定一个名字;regular_expression,正则表达式字符串

命令:class-map type regex match-any regex_cmap_name
视图:全局配置视图
说明:定义一个正则表达式cmap。match-any表示只要流量与此cmap视图下的任意一个正则表达式匹配即可,目前这个match-any是必选且唯一的选项,regex_cmap_name是自定义的此class-map的名称。

命令:match regex regex_name
视图:cmap视图(且是正则表达式cmap)
说明:为此正则表达式cmap设置正则表达式对象(就是前面定义的正则表达式的名称)
举例:
hostname(config)# regex url_example example\.com
hostname(config)# regex url_example2 example2\.com
hostname(config)# class-map type regex match-any URLs
hostname(config-cmap)# match regex example
hostname(config-cmap)# match regex example2
如果流量包含“example.com”或 “example2.com.”就将匹配。这样说来,这项匹配应该非常占用系统资源。

命令:test regex input_text? regular_expression
视图:EXEC视图
说明:测试正则表达式。如果输入文本或正则表达式包含空格,可以用引号括起。回车后,命令行将显示匹配结果,如“INFO: Regular expression match succeeded.”,或者“INFO: Regular expression match failed.”。

1.10管理流量的匹配

匹配管理流量(管理流量指终结在防火墙的流量,一般是管理连接的管理数据报文,对其进行检视可以防止对防火墙本身的攻击)

命令:class-map type management mgmt_cmap_name
视图:全局配置视图
说明:定义一个管理流量的class map。输入此命令后将进入config-cmap视图,即进入此管理流量cmap的配置视图。

与L3/L4流量match类似的,在管理流量的cmap视图下,可以使用ACL方式或端口范围方式指定此管理流量的匹配方式:
match access-list acl_name
match port {tcp | udp} {eq port_number | range low high}

?

  • 二、策略/Policy(定义L3/L4流量处理策略)

2.1定义策略
命令:policy-map policy_map_name
视图:全局视图
说明:定义一个策略pmap,policy_map_name长度在40字符以下。命令成功后,进入该pmap的视图。

命令:rename name
视图:pmap视图
说明:重命名pmap名称

命令:description text
视图:pmap视图
说明:为pmap增加一些说明文字(200字符以下)

2.2为策略添加匹配分类
命令:class {class_map_name | class-default}
视图:pmap视图
说明:为此策略设置match的流量规则。class_map_name可以是“class-map cmap”命令或“class-map type management mgmt_cmap_name”命令创建的cmap名称,也可以是系统初始配置默认的“class-dafult”(上面介绍过,是一个系统默认配置,match any)。输入此命令后,进入“pmap-c”视图。

2.3为匹配流量设置策略
2.3.1设置匹配流量的TCP连接相关策略
命令:set connection timeout [embryonic {hh:mm:ss | 0}] [half-closed {hh:mm:ss | 0}] [tcp {hh:mm:ss | 0} dcd [retry_interval [max_retries]]
视图:pmap-c视图
说明:针对本match匹配的流量,设置TCP连接超时属性值。具体参数的解释暂略。

命令:set connection [conn-max n] [random-sequence-number {enable | disable}]
视图:pmap-c视图
说明:针对本match匹配的流量,设置连接数目。具体参数暂略。

命令:set connection advanced-options tcp_map_name
视图:pmap-c视图
说明:针对本match匹配的流量,设置tcp连接高级属性。tcp_map_name是用全局配置下命令“tcp-map tcp_map_name”配置的一个TCP属性map(tcp-map命令的具体介绍暂略)。
举例:
Firewall(config)# tcp-map conform_tcp
Firewall(config-tcp-map)# reserved-bits drop
Firewall(config-tcp-map)# tcp-options range 6 7 drop
Firewall(config-tcp-map)# tcp-options range 9 255 drop
Firewall(config-tcp-map)# exit
Firewall(config)# access-list acl_tcp permit tcp any any
Firewall(config)# class-map MyClass
Firewall(config-cmap)# match access-list acl_tcp
Firewall(config-cmap)# exit
Firewall(config)# policy-map MyPolicy
Firewall(config-pmap)# class MyClass
Firewall(config-pmap-c)# set connection advanced-options conform_tcp
Firewall(config-pmap-c)# exit
Firewall(config-pmap)# exit

2.3.2设置匹配流量的的策略为IPS处理
命令:
ips inline {fail-open | fail-close}
ips promiscuous {fail-open | fail-close}
视图:pmap-c视图
说明:针对本match匹配的流量,设置为IPS检查(IPS硬件模块检查)。inline方式表示将报文交给IPS检查,promiscuous表示IPS和ASA都做检查。 fail-open表示IPS检查失效后默认通过,fail-close表示IPS检查失效后默认阻断。

2.3.3设置匹配流量的的策略为CSC处理
命令:csc {fail-open | fail-close}
视图:pmap-c视图
说明:针对本match匹配的流量,设置为CSC检查(CSC硬件检查)。fail-open表示SCS检查失效后默认通过,fail-close表示CSC检查失效后默认阻断。
?
2.3.4设置匹配流量的的策略为带宽限制

命令:police {output | input} conform_rate [burst_bytes] [conform-action {drop | transmit}] [exceed-action {drop | transmit}]
视图:pmap-c视图
说明:针对本match匹配的流量,设置流量带宽限制。output/input指定outbound流量或inbound流量;conform_rate表示流量限制,单位bps,范围8000(8k)-2000,000,000(2G);conform-action可指定未超过限制的流量的处理动作(drop或transmit),exceed-action可指定超过限制的流量的处理动作(drop或transmit)。burst-bytes(单位KB,范围1000[1KB]-512,000,000[512M]) 表示加入超过了conform_rate,但是未超过conform_rate+burst-bytes时,依旧按照未超过处理。本设置针对下行流量。

2.3.5设置匹配流量的的策略为优先
命令:priority
视图:pmap-c视图
说明:针对本match匹配的流量,设置为LLQ(Low‐Latency-Queuing)优先转发。本设置针对下行流量。

未完,点击查看后续部分