MPF


基本MPF架构介绍

class-map:什么流量,对流分类

3-4层:源目ip,协议号,端口

5-7层:应用层http ftp telnet

policy-map:添加多个类,为每个类做什么动作

3-4层:较简单

5-7层:限速,屏蔽关键字,比较复杂

service-policy:在哪里 匹配哪个class 执行哪个policy


class-map

ASA(config)#class-map3-4ASA(config-cmap)#match?mpf-class-mapmodecommands/options:access-listMatchanAccessListanyMatchanypacketdefault-inspection-trafficMatchdefaultinspectiontraffic:ctiqbe----tcp--2748dns-------udp--53ftp-------tcp--21gtp-------udp--2123,3386h423-h325-tcp--1720h423-ras--udp--1718-1719http------tcp--80icmp------icmpils-------tcp--389ip-options-----rsvpmgcp------udp--2427,2727netbios---udp--137-138radius-acct----udp--1646rpc-------udp--111rsh-------tcp--514rtsp------tcp--554sip-------tcp--5060sip-------udp--5060skinny----tcp--2000smtp------tcp--25sqlnet----tcp--1521tftp------udp--69waas------tcp--1-65535xdmcp-----udp--177dscpMatchIPDSCP(DiffServCodePoints)//ip包中tos里的字段flowFlowbasedPolicy//定义流portMatchTCP/UDPport(s)precedenceMatchIPprecedencertpMatchRTPportnumbers//语音流量(ipudprtpvideo/audio)tunnel-groupMatchaTunnelGroup//IPSec的tunnel里每条流(流由上面的flow定义)的流量

flow与tunnel-group示例:将tunnel里的每条流(以不同目的ip区分流)限速56k


policy-map

为每一个流量定义行为


发送流量到AIP-SSM//送往IPS过滤检查是否有危险代码

发送流量到CSC-SSM//送往防病毒模块 查看是否有病毒

发送Netflow信息//将匹配的流量信息发到网管

Qos对流量优先处理//优先级

Qos对流量进行police或shape处理//限速

运用层监控

配置高级连接设置//最大连接数,半开连接等等

全局和每一个接口只能配置一个policy map

在一个policy map中,行为处理的顺序如下。
QoS 入方向流量的policing
高级连接设置
CSC-SSM
运用层监控
AIP-SSM
QoS 出方向流量的policing
QoS 优先级队列

QoS 流量shaping


Service Policy
1.运用policy map到一个接口,或者全局运用到所有接口
2.策略的方向基于policy map的运用
每接口:归类和行为被运用到两个方向上
全局:归类和行为被运用到所有接口的入方向

policing(出入都可), shaping(出)和priority(出)例外



MPF对网管流量的控制

1.网络策略仅仅只控制穿越的流量

2.使用管理策略来控制抵达ASA的流量
3.只有一部分匹配功能可以使用
4.只有一部分行为可以使用



class-map


ASA(config)#class-maptypemanagementManagement_Telnet_TrafficASA(config-cmap)#matchporttcpeqtelnetASA(config-cmap)#exit

policy-map

ASA(config)#policy-mapinside//这个inside是个名字,由于一个接口只能用一个policy,取名方便识别ASA(config-pmap)#classManagement_Telnet_Traffic//添加一个类ASA(config-pmap-c)#setconnectionconn-max1embryonic-conn-max0//动作:最大连接数为1,半连接数无限制ASA(config-pmap-c)#exit

service-policy


ASA(config)#service-policyinsideinterfaceinside//运用到接口:第一个inside是名字ASA(config)#telnet00inside//开启TelnetASA(config)#passwdcisco//远程登录需要密码


MPF基本状态监控特性


ASA默认只对TCP/UDP流量进行状态监控,ICMP ping和ESP默认禁止

icmp:直接在默认全局policy里的class中加个inspect icmp

policy-mapglobal_policyclassinspection_defaultinspecticmp

esp:ipsec分协商和加密,协商部分是UDP故能生成cnnection 表,但加密部分不能生成表项,故出去了回不来

access-listESPextendedpermitespanyanyclass-mapESPmatchaccess-listESPpolicy-mapglobal_policyclassESPinspectipsec-pass-thru


ASA会话超时

如果出现TCP连接关闭事件,或闲置超时事件,会话表项会被删除

等待SYN/ACK 超时时间30s

半关闭 10分钟tcp 是双向的,单向存在的时间

闲置时间 1小时 没数据包的连接 idle时间


Telnet的connection表项超时时间DCD

access-listglobal_mpc_1extendedpermittcp10.1.1.0255.255.255.0host202.100.1.1eqtelnetclass-mapClient-to-Server-Telnetmatchaccess-listglobal_mpc_1policy-mapglobal_policyclassClient-to-Server-Telnetsetconnectiontimeoutidle4:00:00resetdcd0:15:005//超时后会清除connection表项reset:清除表后还会向两边发送reset报文,使得两端也清除连接信息//dcd(探测邻居存活):每15分钟检测一次,5次超时则清除

ASA默认对穿越流量不减TTL,也可激活

(顺便提下,win的tracert发得是icmp报文,而路由器traceroute发的是UDP报文)

class-mapTraceroutematchaccess-listTraceroute//acl抓包看看端口33434,自己对着写,记得放行流量policy-mapglobal_policyclassTraceroutesetconnectiondecrement-ttl//ttl减一

穿越ASA 别人写的就是好..


MPF TCP规范化


ASA对IP分片的处理

1.缓存一个数据包的所有分片,直到所有分片被收齐。
2.确认分片被适当的切分。
3.重组装IP分片,并对其进行TCP规范化和运用层监控处理。

4.发送分片就和收到它们的时候一样

ASA(config)#fragment?configuremodecommands/options:chainConfiguremaximumnumberofelementsinafragmentset//一个包最多多少个分片reassemblyConfigurereassemblyoptionsizeConfiguremaximumnumberofblocksindatabase//每个接口最多缓存1000个分片timeoutConfigurenumberofsecondstoassembleafragmentset//一个包多少S内没有收到全部分片完成重组。则全部丢弃ASA(config)#fragmentsize1000OutsideASA(config)#fragmentchain24OutsideASA(config)#fragmenttimeout5Outside


MPF TCP规范化

1.确认遵循TCP协议,并且阻止逃避***
2.默认情况下,只是允许最小的TCP特性(option字段全部置1)
3.执行TCP初始化序列号扰乱以保护内部主机(防止会话挟持)

4.为上层监控提供对字节流的重组装


这会导致异步链路的一些链接建立失败(如tcp的握手):

解决:采用TCP状态化旁路(TCP Bypass)

TCP Bypass用MPF归类特定流量,以访问控制列表对待这些流量,同时也关闭了ASA对这些流量的三层监控,认证代理和TCP规范化处理,故只能旁路可信流量


实验:TCP Bypass

inside的lo0访问DMZ的lo0口,走的是ospf过防火墙

DMZ(config)#iproute7.7.7.7255.255.255.25510.0.0.72//在DMZ上添加指向inside的lo0静态路由

当inside的lo0 Telnet DMZ的lo0时,去的包过防火墙而回来的包走的10.0.0.0网段,形成异步链路

Telnet默认是不通的:

但可以ping,不受影响

ASA(config)#access-listtcpbypasspermittcphost7.7.7.7host2.2.2.2eqtelASA(config)#class-maptcpbypassASA(config-cmap)#matchaccess-listtcpbypassASA(config-cmap)#exitASA(config)#policy-maptcpbypassASA(config-pmap)#classtcpbypassASA(config-pmap-c)#setconnectionadvanced-optionstcp-state-bypassASA(config-pmap-c)#exitASA(config)#service-policytcpbypassinterfaceinside

ASA(config)#showconndetailFlags:B-initialSYNfromoutside,b-TCPstate-bypassornailed,TCPDMZ:2.2.2.2/23inside:7.7.7.7/55245,flagsb,idle3m47s,uptime3m50s,timeout1h0m,bytes31

这种connection表项无法正常检测到链路是否终结,只能等超时清除

实验:BGP 穿越ASA

*Mar101:08:35.219:%TCP-6-BADAUTH:NoMD5digestfrom2.2.2.2(179)to7.7.7.7(15325)(RST//原由:经过bgpmd5(tcp头部+密码+伪首部->hash)散列后的值会在bgp的报文中添加option为tcp的字段,type类型为19而ASA会将tcptype=19的option字段全改成1了,并



MPF支持动态运用协议


Cisco ASA默认嗅探很多动态协议(FTP,HTTP),只需ACL放行初始化会话,ASA会自动放行后续会话


FTP:

高优先级 以主动模式访问 低优先级的FTP时

第一信道:由高优先级先发起的,会建立connection会话,也能回来

第二信道:由低先发起,但ASA已经嗅探到第一信道的port数据,根据port建立了对应的connection会话,所以第二信道能通


但当FTP的端口不是21

第一信道:高到低能建立conn

第二信道:由于端口不是21,ASA并不知道是FTP,没有记录port信息,也就没有conn表项,低到高,通不了

class-mapNew-FTPmatchporttcpeq2121//FTP自定义端口policy-mapglobal_policyclassNew-FTPinspectftp


被动发起都是client,怎么都能通,除非client在低优先级,那么acl放行第一信道即可,如果不是21,第二信道也要放

以下是做了PAT的FTP,ASA会修改port数据,ip,端口发给外网,自动建立conn和PAT表项





MPF运用层策略


DNS..............


配置MPF URL过滤

定义URL过滤服务器:url-server(DMZ)vendorwebsensehost192.168.1.100定义需要过滤的流量:filterurlhttp10.1.1.0255.255.255.00.0.0.00.0.0.0allow//allow表示服务器挂了就放行

配置正则表达式:regexShrun"sh/run"regexWWWCiscowww.cisco.com配置运用层监控类型的Class-Map:class-maptypeinspecthttpmatch-allMatch-HTTP-ClassmatchrequestheaderhostregexWWWCiscomatchnotrequesturiregexShrun配置运用层监控类型的Policy-Map:policy-maptypeinspecthttpControl-HTTPparametersprotocol-violationactionresetclassMatch-HTTP-Classreset调用运用层监控类型的Policy-Map:policy-mapglobal_policyclassinspection_defaultinspecthttpControl-HTTP

配置ESMTP运用层控制

配置运用层监控类型的Policy-Map:policy-maptypeinspectesmtpControl-ESMTPmatchheaderlengthgt4096reset调用运用层监控类型的Policy-Map:policy-mapglobal_policyclassinspection_defaultnoinspectesmtpinspectesmtpControl-ESMTP


MPF连接控制与TCP Intercept


access-listglobal_mpcextendedpermittcpanyhost202.100.1.1eqwwwclass-mapConnection-Controlmatchaccess-listglobal_mpcpolicy-mapglobal_policyclassConnection-Controlsetconnectionconn-max1000embryonic-conn-max600per-client-max10per-client-embryonic-max5

MPF实现QoS


有两种方式实现QoS:

Policing:丢弃超时速率限制的流量;支持对一个接口出入流量配置;丢弃会造成TCP重传

Shaping:缓存超过限制的流量;只支持对一个接口的出流量配置;缓存会减少TCP重传,但会造成抖动

Priority Queuing:优先队列

Policing

配置HTTP限速内部接口入方向class-mapHTTP-Trafficmatchporttcpeqwwwpolicy-mapInside-policyclassHTTP-Trafficpoliceinput10000001500service-policyInside-policyinterfaceInside配置ICMP限速外部接口出方向access-listOutside_mpcextendedpermiticmpanyanyclass-mapICMP-Trafficmatchaccess-listOutside_mpcpolicy-mapOutside-policyclassICMP-Trafficpoliceoutput560001500service-policyOutside-policyinterfaceOutside

Shaping

出接口policy-mapOutside-policyclassclass-defaultshapeaverage10000000service-policyOutside-policyinterfaceOutside

Priority Queuing

1.Cisco ASA默认为一个接口收到的流量执行best‐effort队列
2.best‐effort队列是一个基于FIFO机制的服务
3.应该在一个接口为那些延时敏感的流量,例如:语音流量创建一个优
先级队列。
4.Cisco ASA在移动数据包到best‐effort队列之前,首先腾空优先级队列
5.使用Cisco MPF配置优先级队列


priority-queueOutsidetx-ring-limit128(硬件队列最大512)//只有当硬件队列满了,设备发生拥塞了,才会使用到软件队列queue-limit2048(软件队列最大2048)//此队列机制都有各自的调度机制和丢弃机制class-mapVoIPmatchdscpef//通过dscp字段是否为ef判断语言policy-mapOutside-policyclassVoIPpriorityservice-policyOutside-policyinterfaceOutside