一种基于Netfilter的P2P流量控制系统的实现

2015-09-28 06:11杨轩
现代计算机 2015年8期
关键词:钩子数据包端口

杨轩

(四川大学计算机学院,四川 610095)

一种基于Netfilter的P2P流量控制系统的实现

杨轩

(四川大学计算机学院,四川610095)

0 引言

近年,伴随着P2P技术和应用的快速发展,在整体互联网的流量中,P2P流量已经占据了其中的很大一部分[1],这不仅对互联网资源带来负担,同时也对其他资源如通信资源带来了不便。因此,如何对P2P的流量进行控制成为了日益受到关注的问题。现有的流量控制技术核心是流量识别,最初的识别方式是以细分的形态识别出每条流,然后针对性地进行控制,但是由于通信方式越来越复杂,以及应用通信的端口不确定性增加,因此这样的识别方法已经无法满足当前的需要。近年来,学者提出了基于应用层特征的识别方法和基于流的行为特征的识别方法,这两种方式各有优点,前者的细分程度较高后者的效率较高,但也各有缺点,前者对加密协议无法识别,而后者资源消耗较大。

从2003年开始,学者J.Early等提出了通过统计TCP流每个包到达时间、包平均值等特征来识别一些主流协议,2004年,Subhabrata Sen等提出基于应用签名的P2P流量检测方法,是深层数据包检测方法的一种。2005年,Thomas Karagiannis等首次提出了基于传输层的协议识别思路,从2007年开始,有学者提出基于Netfilter框架进行P2P流量识别的观点,此后不断有学者进行基于Netfilter框架的研究,2012年,有学者研究了基于Netfilter的防火墙和连接跟踪机制。

针对上面的问题,本文设计并实现了一种保留传统识别方法的基础上,结合对流量特征的分析,基于Linux内核的Netfilter模块,利用其可扩展的特性,设计一种P2P流量进行混合识别的系统,并利用TC控制实现对网络流量控制,从而达到对网络资源合理利用的目的。

1 体系结构

1.1Netfilter框架

本系统实现的流量识别和控制功能基于Linux的Netfilter框架,因此简单介绍一下Netfilter框架。Linux系统从内核2.4版本开始新增Netfilter结构[2],它是一种独立的防火墙底层模块,对不同类型的网络定义了钩子节点,由一系列基于协议栈的钩子所组成,内核模块可以对一个或者多个钩子点注册挂载钩子函数。例如对IP协议,定义5个钩子函数[3]:当数据进入系统后,先通过第一个挂载点NF_IP_PRE_ROUTING注册的钩子函数进行处理。如果该数据包是发送给本机,则通过NF_IP_LOCAL_IN的函数处理进入本地用户空间的数据包,然后传递到上层协议,如果该数据包需要转发,则通过NF_IP_FORWARD的函数处理。对于需要发送到网络层的数据包,要经过NF_IP_POST_ROUTING的函数处理以后,才可以发送到网络层。对于网络层以上的数据包需通过NF_IP_LOCAL_OUT的函数处理后,再进行路由选择,然后由NF_IP_POST_ROUTING函数处理。

1.2系统框架

本系统的设计是基于Linux 2.6内核版本的设计,在Netfilter的框架下,识别出P2P流量,根据对流量限制的具体需求,对P2P流量进行控制,系统架构如图1所示。

图1 系统架构

1.3系统模块

系统包含Web页面配置模块,流量识别模块和流量控制模块共三个模块。其中配置模块功能是让用户指定限制P2P应用的最大带宽,流量识别模块利用现有的几种流量识别方法混合式识别,流量控制模块则根据用户的配置限制P2P应用的带宽,如未指定则根据系统默认值进行限制。

2 系统的设计与实现

2.1流量识别模块

系统的流量识别模块主要采用混合式识别方式,主要包括端口识别、基于P2P流连接特性的识别和协议特征串的匹配识别。本系统的设计原则为保证对P2P流量识别正确识别的同时,降低系统对正常网络流量的误判,避免造成对正常服务网络的影响。当流入流量进入系统后,通过端口识别过滤之后的流量再进行P2P应用特性连接识别,在这部分,本系统设置了一个比较高的判断阈值,以此降低系统对非P2P流量的误判。剩余的流量再进入下一个判断过程,特征协议串的识别。流量通过整个系统的识别之后,最后的识别结果中仍然可能会有少量的未识别的P2P流量,但这少量的未识别的流量对正常的网络服务不会造成太大的影响。因此这样的设计确保了系统的识别效率较高,且不影响正常的网络服务流量。其流程如下图2所示。

图2 流量识别流程图

(1)端口识别。尽管现阶段的很多新的P2P应用涌现,而且技术也越来越先进,但还是有部分实际的P2P应用采取默认端口的方式,并且端口识别的速度快,实时性也好,因此可以把默认端口的识别方式作为一种识别手段,首先过滤出一部分P2P流量,也由于一些其他的应用流量可以利用端口技术来过滤点,因此本系统仍然保留端口识别技术。

(2)P2P应用连接特性识别。目前的P2P网络主要混合结构和多服务器结构,这种结构的P2P网络有明显的TCP和UDP链接特性。当一个连接建立的时候,目的IP地址会向多个服务器发起建立连接的请求。另外由于P2P网络节点的随时可加入或者离开的特性,导致会有很多的TCP或者UDP包用来保证网络连接的可靠性,因此可以根据TCP或者UDP的连接特性来识别P2P流量[5]。尽管还有其他的应用也会使用TCP 和UDP传输协议,但不同点在于P2P应用会大量并发地建立TCP或者UDP数据流,因此可以将其和其他应用区别开[6]。定义如下几个概念:不同目的端口数(dd_ port),不同源端口数(ds_port),不同目的地数目(dd_number),与客户端相连接的外部对等点数目n。TCP和UDP流量可以根据几个变量之间的关系进行判断,判断依据是针对一个时间段内的应用连接特性,对TCP流量:若某1分钟源IP向7个以上的目的IP发送了SYN包,则认为这个是P2P连接[7];对UDP流量,若10秒内UDP的数量大于3,则认为是P2P连接[7]。为了降低系统对正常网络流量的误判,避免造成对正常服务网络的影响,本系统对判断阈值进行了提高,具体是将TCP流量的判断标准提高到1分钟源IP向目的IP发送SYN包的数量由7个提高到10个。UDP流量的判断条件是将10秒内的UDP数量由3个提高到5个,以此保证系统的识别正确率。

对于TCP流量满足如下公式:

对于UDP流量满足如下公式:

(3)特征协议串识别。在流量传输一段时间后,根据该流量传输过程中的特性统计分析后判断是否属于P2P流量。对未能判断出来的流量,进行特征协议串的匹配识别,本系统采用BF(Brute Force)算法。BF算法是一种简单的单模式串匹配算法,假定pattern是一长度为n的字符串,希望被确定的pattern出现在字符串中最左的位置为i,则BF算法是通过判断字符串中的每个字符和由该字符开始的n个字符串是否和pattern匹配。通过一个二次循环实现,其中内层循环检测当前需要被验证的字符串与特征串相同长度的窗口文本是否相匹配。而外循环则移动窗口,每次都向右移动一个位置,然后遍历文本字符串。BF算法的C语言描述如下:

BF算法的实现在Netfilter的负载函数匹配中,利用其中的函数int string_match_offset()。本算法对常见的P2P协议例如BT、Gnutella、eMule可用。

2.2流量控制模块

对于识别出来的P2P流量,按照用户设置或者系统默认的带宽进行限制。用户可设置带宽的大小,可指定限制固定IP的流量。流量控制模块基于Linux内核的Netfilter模块扩展的,例如限制固定IP流量的功能是在Netfilter的limit模块中实现。在流量控制的过程中,使用TC模块来实现功能。TC处理是在数据包输出队列上,结合Netfilter中的处理流程如图3所示。

图3 Netfilter流量处理流程

TC流量控制的步骤有三个,建立队列、建立分类和建立过滤器。TC将流经网络接口的数据放入队列中,然后通过过滤器把数据包放在不同的分类中,最后再通过控制每个分类队列数据包发送的速率限制每个分类的带宽。其流程如图4所示。

图4 TC流量控制流程

具体来讲本系统使用的是HTB(Hierarchical Token Bucket)来控制流量,对于已经识别出来的P2P流量,由iptable加上Mark值,作出标记,当这些带上标记值的P2P数据包经过TC中的过滤器时,过滤器进行匹配,匹配后的数据包根据不同优先级分别放入不同的子分类队列中等待带发送。最后TC根据不同的队列策略将数据发送到网卡,从而达到流量控制的功能。

2.3Web配置模块

Web配置模块主要功能是让用户根据个人的需要调整流量限制的一些策略。在系统默认情况下,系统将带宽大小限制在2M。如果用户想根据特定的限制要求进行固定IP带宽的限制,只需进行简单的几个配置。用户通过Web界面填写配置策略或选择默认设置,访问到Web服务器,通过socket接口和流量控制系统的Linux服务器相连。在Linux系统服务器上配置或采取默认设置的流量控制模式,进而进行流量控制。

3 结语

本系统综合了端口、P2P流连接特性和协议特征串识别等流量识别方法对P2P流量进行识别,其中端口识别的方法主要是过滤一些非P2P流量,连接特性识别方法设置了比较高的阈值,减少识别过程中的错误,最后通过协议特征识别剩下的流量,并利用Netfilter框架对识别后的流量进行限制。流量连接特性识别的过程由于需要统计一定数量的数据包特征,所以识别过程会有一段时间延迟。

[1]P2P流量识别方法介绍.http://wenku.baidu.com/link?url=R-D4z5b3o01V9LWo7K199pDXnc8Xuls5HQXKvL8UP0j5_ebtTMEtd8eF-slj30IhOF3G8csoHJvQXF-fxHM6Wlv2hb8tgEZeIXhYXJZaODBxm

[2]Linux内核官方文档.https://www.kernel.org/

[3]杨刚,陈蜀宇.Linux中基于Netfilter/Iptables的防火墙研究.计算机工程与设计[J].北京,2007

[4]乐艳辉,李之棠,柳斌.基于Netfilter的P2P流量测量系统.计算机应用研究[J].成都,2008

[5]刘强.P2P流量监控技术研究与实现[D].北京:北京邮电大学,2007

[6]P2P Communication Across Middleboxes[R].http://www.ppcn.net/n1475c38.aspx

[7]王韬.基于Linux路由器的P2P流量识别控制系统的设计与实现[D].苏州,苏州大学,2010

Flow Recognition;Flow Control;Netfilter;P2P

Implementation of P2P Traffic Control System Based on Netfilter

YANG Xuan
(College of Computer Science,Sichuan University,Chengdu 610095)

1007-1423(2015)08-0077-04

10.3969/j.issn.1007-1423.2015.08.019

杨轩(1987-),男,四川达州人,硕士研究生,研究方向为网络安全

2015-02-10

2015-03-04

针对P2P流量在互联网的整个流量所占有的比例很高的情况,为了更加合理地利用互联网流量资源,提出一种基于Netfilter的P2P流量控制系统的设计和实现。综合端口识别,P2P应用连接特性识别和特征协议串识别,利用Netfilter扩展功能实现系统的识别过程,并利用TC对流量进行限制。

流量识别;流量控制;Netfilter;P2P

In view of this situation that P2P flow has a high share of the whole Internet flow,to rational use of the Internet resources,designs and realizes a P2P flow control system.Makes an integration of port identification,P2P application connect feature identification and protocol string recognition identification,and uses Netfilter extensions to realize the recognition process,then uses TC to control the flow.

猜你喜欢
钩子数据包端口
二维隐蔽时间信道构建的研究*
一种端口故障的解决方案
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
硬件解耦三端口变换器的软开关分析与仿真
多按键情况下,单片机端口不足的解决方法
C#串口高效可靠的接收方案设计
谁和谁好
幸福的一家
《脉望馆钞校本古今杂剧》穿关之“钩子困带”考
精钩子