路由器安全-FPM
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 size 7 string invalid
R1(config-cmap)#match start 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
路由器安全-FPM的更多相关文章
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- Angular2学习笔记——路由器模型(Router)
Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树.组件大致分为两类:一类是如list.table这种通放之四海而皆准的通用组件,一类是专为业务开发的 ...
- 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)
在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...
- 树莓派 连接wifi与路由器ip绑定
先推荐几个手机软件 在酷安网里应该能找到 1.JuiceSSH 橘子ssh软件 手机连上路由器 就可以控制局域网内的树莓派 2.VNC Viewer 远程桌面软件VNC 也是连接局域网的树莓派 ...
- 中大东校小米路由器mini实现inode上网,ipv6 wifi【中大】【东校】【inode】【ipv6】
还有不到4个月就要毕业了,前几天半夜没事捣鼓小米路由没想到竟然实现了wifi的ipv6. 正好又安利了同学一台小米路由mini,从刷机到inode到ipv6全搞了一遍. 这里将教程写出来,服务学弟妹. ...
- hub,桥,交换机,路由器的区别
1.四种设备在网络中的物理位置 如下图 2.这四种设备的本质 这四种设备,不管怎样,他们都是进行包的转发,只不过转发的行为有些不一样而已 3.逐一介绍 对于hub,一个包过来后,直接将包转发到其他口. ...
- 智能路由器操作系统OpenWrt
小米路由器的“MiWiFi”又让路由器成了关键词,每台智能路由器的系统是该款产品的亮点之一,其系统肯定有不少“好玩”的地方.为自己的智能路由器量身打造系统,并且纷纷开发了适合智能手机.平板电脑等使用的 ...
- 开发OpenWrt路由器上LuCI的模块
[题外话] 学校里最近改造了校园网,要求必须用iNode验证,万幸的是路由器能刷OpenWrt,并且OpenWrt上有好多iNode认证的开源项目,比如njit8021xclient(以下简称njit ...
- CentOS 6编译安装lamp,并分别安装event模块方式和FPM方式的PHP
任务目标: 编译安装LAMP 要求(1) 安装一个模块化的PHP 要求(2) 安装一个FPM的PHP 注意PHP需要最后一个安装,因为需要前两者的支持. 所以这里的安装次序为 1.httpd 2.Ma ...
随机推荐
- C语言 strlen
C语言 strlen #include <string.h> size_t strlen(const char *s); 功能:计算指定指定字符串s的长度,不包含字符串结束符‘\0’ 参数 ...
- [RedHat]“is not in the sudoers file”解决方法
当在终端执行sudo命令时,系统提示“luckchengis not in the sudoers file”: $ sudo ls Password: luckcheng is not in the ...
- Vue - 解决路由过渡动画抖动问题
前言 Vue-Router 作为 Vue 的核心模块,它为我们提供了基于组件的路由配置.路由参数等功能,让单页面应用变得更易于管理.良好的路由管理尤为重要,比如路由拦截.路由懒加载.路由权限等都在开发 ...
- leetcode 25. K 个一组翻转链表
# coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...
- 网页链接在QQ内因多人投诉被拦截的解决方案
背景 相信大家经常会遇到一个头疼的问题就是,明明自己的网页没有违规内容(比如线下活动的推广),但链接在QQ内转发分享会被QQ管家拦截,导致用户无法访问. 那么当大家遇到这个问题的时候应该怎么办呢?不用 ...
- 引用opencv静态库的makefile写法
参考博客:https://blog.csdn.net/baidu_31872269/article/details/91985846 参考博客:https://blog.csdn.net/Felaim ...
- AlertDialog 、SimpleDialog、 showModalBottomSheet、showToast 自定义 Dialog
// AlertDialog .SimpleDialog.showModalBottomSheet.showToast // 使用showToast安装插件 https://pub.dev/packa ...
- FileOutputStream,BufferedOutputStream,FileWriter 效率比较
测试代码: /** * 写文件 * FileOutputStream, BufferedOutputStream, FileWriter * 三个流 效率比较 */ @Test public void ...
- 504,什么是FOUC?怎么避免
Flash of Unstyled Content :用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再重新显示文档,造成页面闪烁 解决办法:把样式表放到文档的<head& ...
- Docker - Docker 镜像 简介
概述 简单介绍一下 docker 镜像的概念 1. 背景 复习 docker 镜像是 docker 最基础, 最重要的概念之一 所以正式使用之前, 最好有所理解和认识 2. 镜像 概述 简单描述 理解 ...