cisco ios 12.45T新特性-FPM

cisco ios 12.4.15T系列中推出了新的FPM技术。简单的介绍一下cisco fpm技术。fpm技术在cisco iso 12.4.4T中已经推出,在cisco iso 12.4.4T之前,fpm能够检测IP包的前256byte中的最多32byte的数据,检测出与配置相符合的数据,你可以选择丢弃或者允许通过或者log,当然还有其他功能,这里不一一细表。而在cisco iso 12.4.15T中cisco强化了fpm的功能,使其能检测整个IP数据包(最大1500byte)中最多256byte的数据。这实际上等于在cisco router上安装了一个sniffer软件,然后通过配置决定什么数据能够被允许通过,什么数据要丢弃。
cisco的推出fpm技术的初衷是通过fpm技术来强化网络安全,封堵网络病毒及各种攻击

一个封PPLIVE的例子
一.用udp 8000端口进行登陆
这种登陆方式最简单的封堵方法就是用access-list,方式如下:
access-list 199 deny udp any any eq 8000
int f0/0
ip access-group 199 in
但是,对这种方式我并不满意,因为除了pplive使用udp8000端口以外,还有好多程序使用udp800端口,比如说QQ。
使用sniffer软件反复分析,我找到了udp8000包的特征。
1.ip包长度 97byte
2.udp目的端口 8000
3.在ip包的第28位起包含4个byte的特征字段:E9030201
4.在ip包的第32位起包含4个byte的特征字段:98AB0102
变换成cisco的配置文件就是:
class-map type access-control match-all pplive-udp8000-request
match field UDP dest-port eq 8000
match field IP length eq 97
match start l3-start offset 28 size 4 eq 0xE9030201
match start l3-start offset 32 size 4 eq 0x98AB0102
注意:上面offset的数值要注意,如果是ip包中的第一个byte位,则offset为0,第二个byte位,则offset为1,offset是从0开始计数而不是1,这个问题我有教训,cisco网站上也没有写明,提醒一下大家。
OK,udp8000的请求包的问题解决

二.使用tcp 80端口进行登陆,也就是用http登陆,并下载用户列表
解决这个问题我就头大了,因为用sniffer反复分析,从用户端向pplive server发送的http包基本没有数据净载就是没有payload,我无法取得数据包的特征。(应该是有的,但是我没有找到)

那好了,请求的包没有特征,那从pplive server回应的包有没有特征了。

还好是有的。

回应包的特征如下:

1.tcp源端口80
2.在ip包的第52位起包含2个byte的特征字段:E903
3.在ip包的第56位起包含4个byte的特征字段:98AB0102

变换成cisco的配置文件就是:
class-map type access-control match-all pplive-http-answer-I
match start l3-start offset 52 size 2 eq 0xE903
match start l3-start offset 56 size 4 eq 0x98AB0102
match field TCP source-port eq 80

配置完成后,我想应该是大功告成了,一测试,nnd,pplive还能照样工作。

于是在这两条policy工作的情况下我再次使用sniffer抓包,结果,发现在pplive server在原有格式http包被丢弃的情况下,修改了http的格式。

特征如下:

1.tcp源端口80
2.在ip包的第56位起包含2个byte的特征字段:E903
3.在ip包的第60位起包含4个byte的特征字段:98AB0102

变换成cisco的配置文件就是:
class-map type access-control match-all pplive-http-answer-II
match start l3-start offset 56 size 2 eq 0xE903
match start l3-start offset 60 size 4 eq 0x98AB0102
match field TCP source-port eq 80



下面是完整的配置文件:

load protocol flash:ip.phdf
load protocol flash:tcp.phdf
load protocol flash:udp.phdf

class-map type stack match-all ip-tcp
match field IP protocol eq 0x6 next TCP

class-map type stack match-all ip-udp
match field IP protocol eq 0x11 next UDP

class-map type access-control match-all pplive-udp8000-request
match field UDP dest-port eq 8000
match field IP length eq 97
match start l3-start offset 28 size 4 eq 0xE9030201
match start l3-start offset 32 size 4 eq 0x98AB0102

class-map type access-control match-all pplive-http-answer-I
match start l3-start offset 52 size 2 eq 0xE903
match start l3-start offset 56 size 4 eq 0x98AB0102
match field TCP source-port eq 80

class-map type access-control match-all pplive-http-answer-II
match start l3-start offset 56 size 2 eq 0xE903
match start l3-start offset 60 size 4 eq 0x98AB0102
match field TCP source-port eq 80
!
policy-map type access-control fpm-udp-policy
class pplive-udp8000-request
log
drop
policy-map type access-control fpm-tcp-policy
class pplive-http-answer-I
log
drop
class pplive-http-answer-II
log
drop
policy-map type access-control fpm-output-policy
class ip-tcp
service-policy fpm-tcp-policy
policy-map type access-control fpm-input-policy
class ip-udp
service-policy fpm-udp-policy


interface FastEthernet0/0
description $FW_INSIDE$
ip address 172.24.43.100 255.255.255.0
no ip redirects
no ip unreachables
no ip proxy-arp
ip nat inside
ip virtual-reassembly
ip route-cache flow
ip tcp adjust-mss 1452
duplex auto
speed auto
no mop enabled
service-policy type access-control input fpm-input-policy
service-policy type access-control output fpm-output-policy

关于fpm的配置,有些地方我就不再做很多讲解,否则能要写个xx页,大家如果有兴趣,可以到
[url]www.cisco.com/go/fpm[/url]上去仔细看看。

反正我觉得fpm的推出,对于水平比较高的网络管理人员是非常好的,它是一个强大的工具,可以让网络管理员对网络进行准确到bit的管理。

注:只有高级安全版、高级IP版和高级企业版的12.4.4T以上版本才能使用fpm,我的经验是最好现在不要用12.4.15T,因为这个版本刚刚推出bug很多,我在配置时死机好几次。我用的是高级企业版的12.4.9T5,硬件平台是cisco 1841。