博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
路由器安全-FPM
阅读量:4980 次
发布时间:2019-06-12

本文共 4462 字,大约阅读时间需要 14 分钟。

1、FPM(也叫NGACL)

FPM是Cisco IOS新一代的ACL,叫做Flexible Packet Matching,灵活的包匹配。

  • 根据任意条件,无状态的匹配数据包的头部,负载,或者全部。
  • 分析协议,更易于规则的创建。
  • 用于替代传统的ACL,对特定的恶意流量的基础架构过滤。

如下是一个示例:

FPM的限制:

①无状态的,如果是有状态的,那和防火墙也没啥差别了。

②只能匹配IPv4单播包。

③不能去分析报文的IP options 。

④不支持tunnel或者MPLS接口。

⑤一些特殊的网卡FlexWAN Cards也不支持。

⑥非初始化的fragment也不能匹配。

 

FPM三种匹配流量的方式:

①使用协议头描述文件(Protocol Header Description File,PHDF);

②基于offset(偏移量)和length直接匹配流量;

③以上两种的混合。

 比如,如下是ip.phdf的一部分(XML文件):

注意:可能以后配置都是xml or JSON的文件格式了!

 

2、举例说明FPM功能:

2-1、PHDF文件

我们看一下Router上的PHDF文件:

R1#dir system:/fpm/phdf/?

system:/fpm/phdf/ether.phdf  system:/fpm/phdf/icmp.phdf
system:/fpm/phdf/ip.phdf     system:/fpm/phdf/tcp.phdf
system:/fpm/phdf/udp.phdf

例如我们查看ip.phdf文件:

R1#more system:/fpm/phdf/ip.phdf <<<这会显示出“1”中截图所示信息

 

2-2、以login invalid为例

R1尝试去Telnet R2,这里故意输错密码,可以看到如下结果:

R1#telnet 12.1.1.2

Trying 12.1.1.2 ... Open
User Access Verification
Username: cisco
Password:
% Login invalid <<<这个信息肯定是在PHDF文件中的一个信息
Username:

对这个过程进行分析:

其中的报文中,主要包含Telnet Data,这里面主要的信息是在建立Telnet远程连接时,输入的username,另一个是password,这里有10个包是包含了cisco这个信息(如果手速够快,多个字符也可能在一个包中)。另一个是错误的密码“123”有三个包。

注意:我们输入用户名cisco能看到,是因为对端回显,而不是我们键盘直接输入在显示器显示的效果,所以,我们这里抓取到了10个报文,而密码123是看不到的,没有回显,所以是3个报文。

后续出现的关键信息:

这里,我们就可以写class-map和policy-map去实现,让这个信息不出现在我们的显示中。还是如之前所说的,关键的参数是“偏移量”(也就是指定一个位置算起,到我们需要匹配的数据的地方,到底有多少个字节),然后是长度有多长字节,匹配的信息是哪些等。

例如这里吧invalid给deny掉:它的偏移量是10个字节(包含\r\n% Login)包括2个字节的空格,也就是在invalid出现之前,有10个字节,而invalid有7个字节(ASCII)。

 

3、配置操作:

3-1 加载PHDF文件

由于Telnet是TCP的,所以我们加载ip.phdf和tcp.phdf就好了

R1(config)#load protocol system:/fpm/phdf/ip.phdf

R1(config)#load protocol system:/fpm/phdf/tcp.phdf

 

3-2 配置Class-map

Class-map分为stack(堆栈类,就是匹配所有的TCP流量)和access-control(访问控制器类)

R1(config)#class-map type stack match-all ip-tcp

R1(config-cmap)#match field ip protocol eq 0x6 next tCP  (IP协议号6-TCP;17-UDP;1-ICMP;47-GRE;50-ESP;51-AH)

R1(config)#class-map type access-control match-all DENY-invalid

R1(config-cmap)#match field TCP source-port eq 23
R1(config-cmap)#match field IP length eq 0x47 (这里是IP长度)
R1(config-cmap)#match start TCP payload-start offset 10 size 7 string invalid   (string invalid可以换为正则表达式regex [Ii][Nn][Vv][Aa][Ll][Ii][Dd]

注意,关键是看从哪个头部开始计算,这里是TCP负载开始,如果是IP负载开始,那么offset就是30,如果是L3开始,那就还要加上IP头部,offset就是50。

命令分别如下:

R1(config-cmap)#match start IP payload-start offset 30 size 7 string invalid

R1(config-cmap)#match start l3-start payload-start offset 50 size 7 string invalid

另外,上面IP长度包中显示的是10进制,16进制为47:

 

3-3 配置Policy-map

Policy-map只是access-control类型的。

R1(config)#policy-map type access-control TCP-Policy

R1(config-pmap)#class DENY-invalid
R1(config-pmap-c)#drop
R1(config-pmap-c)#exit
R1(config-pmap)#exit
R1(config)#policy-map type access-control FPM-POlicy
R1(config-pmap)#class ip-tcp
R1(config-pmap-c)#service-policy TCP-Policy

3-4 在接口调用Policy-map

R1(config)#int f0/0

R1(config-if)#service-policy type access-control input FPM-POlicy

查看匹配情况:

R1#show policy-map type access-control interface f0/0

 FastEthernet0/0
  Service-policy access-control input: FPM-POlicy
    Class-map: ip-tcp (match-all)
      39 packets, 2579 bytes
      5 minute offered rate 0 bps
      Match: field IP protocol eq 0x6 next TCP
      Service-policy access-control : TCP-Policy
        Class-map: DENY-invalid (match-all)
          3 packets, 255 bytes
          5 minute offered rate 0 bps
          Match: field TCP source-port eq 23
          Match: field IP length eq 0x47
          Match: start TCP payload-start offset 10 size 7 string "invalid"
      drop
        Class-map: class-default (match-any)
          36 packets, 2324 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: any
          
    Class-map: class-default (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

验证,输入了错误的密码后,一直卡在这里

R1#telnet 12.1.1.2

Trying 12.1.1.2 ... Open
User Access Verification
Username: cisco
Password:

在查看一下接口上的信息:

R1#show policy-map type access-control interface f0/0

 FastEthernet0/0
  Service-policy access-control input: FPM-POlicy
    Class-map: ip-tcp (match-all)
      83 packets, 5648 bytes
      5 minute offered rate 0 bps
      Match: field IP protocol eq 0x6 next TCP
      Service-policy access-control : TCP-Policy
        Class-map: DENY-invalid (match-all)
          9 packets, 765 bytes
          5 minute offered rate 0 bps
          Match: field TCP source-port eq 23
          Match: field IP length eq 0x47
          Match: start TCP payload-start offset 10 size 7 string "invalid"
      drop
        Class-map: class-default (match-any)
          74 packets, 4883 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: any
          
    Class-map: class-default (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

转载于:https://www.cnblogs.com/MomentsLee/p/10142704.html

你可能感兴趣的文章
Android 将取代 Ubuntu,做为个人桌面操作系统
查看>>
【Java】生成图形验证码
查看>>
layui学习笔记
查看>>
Codeforces.264E.Roadside Trees(线段树 DP LIS)
查看>>
BZOJ.1026.[SCOI2009]windy数(数位DP)
查看>>
BZOJ.4145.[AMPPZ2014]The Prices(状压DP)
查看>>
String 源码浅析(一)
查看>>
Shell脚本之:函数
查看>>
OSAL工作机制分析
查看>>
利用freemarker 静态化网页
查看>>
java enum(枚举)使用详解 + 总结
查看>>
Day 1:思考
查看>>
7.Python标准库_信号 (signal包,部分os包)
查看>>
android 电话接通时震动
查看>>
相似图片搜索的原理(二)
查看>>
微信小程序支付及退款流程详解
查看>>
boost::asio::ip::tcp实现网络通信的小例子
查看>>
ios开发——仿新版iBooks书本打开与关闭动画
查看>>
hibernate官方新手教程 (转载)
查看>>
myeclipse6.0下载及注冊码
查看>>