如何高速转储、索引和第7层网络流量过滤?
n2disk是ntop社区中很多人用来转储高达100 Gbit流量的应用程序。很少有人知道,n2disk不仅可以使用数据报头信息(即IP,端口,VLAN,MAC…)来索引数据,还可以使用nDPI来生成包含应用程序协议信息的索引。
可能发生以下过滤:
- 在数据包捕获过程中(即指示n2disk避免转储占用大量磁盘空间且通常无害的特定协议,例如Netflix或YouTube)。
- 从存储的pcap文件中提取数据包时。
- 对于任何基于PF_RING的应用程序,包括使用libpcap的应用程序,例如tcpdump或Suricata。
L7捕获过滤
由于集成了PF_RING FT(n2disk 10/40/100 Gbit不需要额外的PF_RING FT licenses),n2disk支持–l7-filter-conf <file>来指定配置文件,在这个文件中可以定义可以哪些协议可以转发给n2disk引擎,哪些协议应该被丢弃,从而不在pcap上转发。例如,如果要放弃流媒体,转发其他协议,你可以指定一个过滤器文件,名字叫ft.conf,如下所示:
[global]
default = forward
[filter]
YouTube = discard
Netflix = discard
L7提取过滤
在pcap提取过程中,只有在数据包捕获过程中创建了扩展的(将-I -E 2添加到n2disk)索引,才可以使用L7过滤从pcaps中提取选定的数据包。这样一来,n2disk的配套工具npcapextract就可以在通常的基于包头的过滤器之外使用L7协议来过滤数据包。例如,为了过滤所有由主机192.168.1.1产生的Instagram流量,可以这样做
npcapextract -t /storage -b "2020-09-16 12:05:32" -e "2020-09-16 12:10:32" -o output.pcap -f "ip host 192.168.1.1 and l7proto Instagram"
该技术支持所有nDPI检测到的协议,并随着新协议/版本的支持而不断更新。
在基于PF_RING的工具(包括tcpdump)中使用L7筛选
除了n2disk,PF_RING也支持L7过滤。您只需要在PF_RING或libpcap-PF_RING之上编译你的应用程序。例如,如果您使用在PF_RING上编译的tcpdump,则可以执行
# PF_RING_FT_CONF=ft.conf tcpdump -ni pcap:file.pcap
or
# PF_RING_FT_CONF=ft.conf tcpdump -i eth0
请注意,对于实时通信,nDPI需要一些数据包来检测应用协议,因此对于基于TCP的协议,例如,初始的3WH不会被过滤,而后面的数据包将根据L7规则进行过滤。
总结
多亏了nDPI,通过PF_RING,您现在可以在数据包捕获,索引和提取过程中,用第七层过滤来补充现有的基于数据包头的过滤技术,如BPF。这使您可以节省转储不需要的协议的磁盘空间,并仅提取您关心的流量,这对于现代网络流量中存在的大量应用协议来说可能很复杂。
- 技术分享 | Apache Kafka下载与安装启动
- JavaScript数组操作总结
- 初识Shiro
- 在网页里点击链接,直接打开app的方法
- 常用算法比较,js实现
- Exploiting Jolokia Agent with Java EE Servers
- AngularJS数据源的多种获取方式汇总
- 跨站的艺术-XSS入门与介绍
- 堆排序
- 两个元素定位,要求子元素垂直居中
- 在Spring Boot框架下使用WebSocket实现消息推送
- Linux上安装Zookeeper以及一些注意事项
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
- Shiro中的授权问题(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tomcat在idea中乱码
- Typecho博客开启gizp压缩
- SpringBoot日志功能
- JavaWeb使用response的中文乱码问题
- 《机器学习》-- 第六章 支持向量机
- Java并发编程的艺术[1]
- Java并发编程的艺术[2]
- Spark UDF实现demo
- Spring boot 开发中热部署配置(只需两步)
- 纯Java搭建SpringMVC项目
- 整理一下Spring整合Junit4单元测试方法
- spring 到底注入接口还是实现类?
- 韩松团队新作 | MCUNet | IoT设备+微型机器学习时代已经到来了
- SpringMVC在web.xml中的配置(引入springmvc)
- springmvc使用DELETE|PUT请求