APP下载

基于Netfilter的内网流量监控系统应用研究

2012-08-29张文盛侯整风

关键词:重定向内网网络流量

张文盛,侯整风

(1.合肥工业大学 计算机与信息学院,安徽 合肥 230009;2.安徽广播电视大学 网络中心,安徽 合肥 230022)

随着Internet迅速普及,用户数不断扩大,各种网络应用层出不穷,使得网络流量的持续增长和固定带宽之间的矛盾成为内网的重要问题[1-2].进而,用户有意或无意(病毒)发送大量数据包,占用过高网络带宽,甚至堵塞网络,造成对资源的不公平使用现象越来越频繁[3-4].如何有效控制每个用户的带宽占用,使得大家公平有效使用带宽便成为一个很现实和紧迫的课题.

对用户的流量监控可量化为三个指标:连接数,字节流量和包流量[5-6].连接是指,内网用户都是通过网关的NAT功能上网,为了实现NAT,网关需要跟踪和维持每个连接,建立连接数据库,每个连接包括如下信息:源地址,目的地址,协议(TCP,UDP等),源端口,目的端口,网关转换使用的地址,网关转换使用的端口等.一个用户建立太多的连接,网关会创建相同数量的这样表项,占用大量内存,检索更耗时间.极端情况下,会导致内存耗尽,系统死机,显然需要控制每个用户的连接数.字节流量很好理解,就是我们通常说的流量,例如多少MB/s.包流量是指,用户可发送大量的小包,总体的流量虽然不大,但每个包都会触发网卡中断来处理,导致中断太多,系统疲于应付处于瘫痪状态,因此有必要限制用户的包速.这三个指标当中,除连接数外,字节流量和包流量是有方向的,分成发送方向和接收方向,对应内网用户的上传和下载.

Linux内置的Netfilter框架非常优秀,众所周知的iptabes包过滤防火墙就是建立Netfilter框架之上[7-11].目前iptables功能已经非常强大,被广泛应用于内外网网关,完成地址转换和包过滤等任务.其提供的模块如Limit,Connbytes,Connlimit,Hashlimit,Recent等涉及对每个IP的带宽管理,但不成系统.Linux还内置了链路层Sched框架,提供TBF,HTB,SFQ等队列规程,可实现QOS和流量控制功能.能部分实现对每个IP的带宽管理,但是应用起来很复杂.我们利用Netfilter和Sched框架,建立一套基于IP的内网流量监控系统,统计每个内网IP地址的连接数、字节流量和包流量,检测恶意流量,按照管理员设置的策略进行限制,使每个内网用户都能公平合理地利用网络资源[12-13].

1 系统设计

本系统部署时的拓扑图如图1所示.本系统主要由三个部分组成:网关,管理服务器和用户.内网用户通过网关提供的NAT功能上网,网关应该部署在网络出口处并接入主交换机,网关配置两块网卡,一块配外网地址接互联网,一块配内网地址接主交换,主交换下接汇聚层或接入层交换机,接入层交换机直接接入用户终端,形成树形结构.管理服务器直接接入主交换机,和网关进行通讯,管理数据存放在数据库中.

图1 系统部署拓扑图

详细的系统功能和系统间连接及功能交互如图2所示.

图2 系统功能及连接图

网关是系统核心,网关的主要功能分三个部分,流量统计、流量控制和访问重定向.流量统计是记录为每个用户建立的连接数、转发的字节数和包数,设计内容见表1.

统计内容按协议、数据方向、数据超限否进行分类.协议分TCP、UDP、ICMP和其他四种.数据方向分内到外和外到内.每个连接上也计数,统计内容和上面基本相同.

流量控制是根据管理员设置的策略对用户的连接数、字节速和包速进行限制.限制策略有两种,直接丢弃数据和执行QOS,执行QOS是指不丢弃数据,但是降低数据包的优先级,在满足正常流量的情况下再处理,这里用到Sched框架和Prio队列规程.除了连接数,字节速和包速的限速算法采用经典的令牌桶算法.

表1 流量统计

访问重定向是对未认证的用户,只开放DNS查询和对于80端口的HTTP访问,并全部重定向到本机,由应用层的的Bind进程完成DNS服务,由Nginx进程完成URL重定向到管理服务器的登录验证页面,引导用户先验证,验证通过后才开放全部访问权限.

除了主要功能外,网关还需要一个控制服务器进程,完成和管理服务器的通讯和服务.控制服务器根据接收到的命令,使用系统调用接口从内核模块接收统计数据或者向内核模块设置参数.管理服务器运行在B/S模式下,使用基于MVC的PHP语言和MySQL数据库开发,需要专用的通讯协议和PHP扩展完成控制服务器和服务器间的通讯.B/S模式是无状态的,而流量监视任务需要计算两次计数的差值,解决方法是将PHP Session ID的MD5值作为会话键值传给控制服务器,在控制服务器上进行会话绑定,由控制服务器完成计算,返回计算结果.

2 系统实现

本系统的实现分成四个部分:网关内核模块、控制服务器、PHP扩展和管理系统.

2.1 网关内核模块

根据系统功能,内核模块需要在Netfilter架构中注册两个钩子:重定向钩子和流量监控钩子,如图3所示.

重定向钩子的优先级在Mangle表的PREROUTING链和Nat表的PREROUTING链之间.此时连接已经建立,我们为每个内网IP地址建立信息数据库和连接队列,将这些连接挂入对应队列.重定向钩子查询对应内网IP是否验证过,如果没有,给到53端口的UDP包和到80端口的TCP包打上Mark n,其他包全部丢弃.在PREROUTING链中加入一条规则,

图3 网关内核模块

这条规则将数据包重定向到本机,交由Bind和Nginx去处理域名查询和HTTP重定向,使用用户层应用程序处理而不是内核的好处是极大降低实现的复杂性.Nginx只需要建立一个默认站点,完成重定向到验证页面:

用户验证通过后,管理系统通过PHP扩展和网关通讯,设置用户的IP为验证状态.

流量监控钩子的优先级低于Filter表的FORWARD链,让包先经过FORWARD链过滤.流量监控的算法是:

根据包找到对应的连接;

如果配置为执行QOS策略,还要在内外网网卡上绑定Prio队列规程:

2.2 控制服务器

内核模块提供系统接口供用户层程序访问,分别是:

1)SO_GET_TC_COUNTER_INFO查询内核模块版本和各主要数据结构大小,控制服务器用于检查是否是自己支持的内核模块;

2)SO_GET_TC_COUNTER_COUNT查询有多少个内网IP控制信息,从而知道多少内网IP正在上网,也为了方便后面的操作,例如为获取全部控制信息分配多大内存;

3)SO_GET_ALL_TC_COUNTERS获取全部的内网IP控制信息,可以提取其中的统计数据,进行流量分析;

4)SO_GET_TC_COUNTER_BY_IP获取指定IP的控制信息,监控特定IP的流量;

5)SO_GET_ALL_CONNS_BY_IP获取指定IP的全部连接信息,监控特定IP的各个连接上的流量;

6)SO_SET_TC_COUNTER_BY_IP设置指定IP的控制信息,例如令牌桶大小,超限策略是执行QOS还是直接丢弃,正常Mark和超限Mark的值是多少,设置验证状态,空闲时间等等.

控制服务器完成对以上接口的包装,并通过定制TCP协议对外提供服务.另外一个好处是这个接口一般只有root能访问,经过控制服务器中转,采用口令的方式验证,在取消限制的同时不降低安全性.

2.3 PHP扩展

PHP扩展使用定制的协议完成和控制服务器的通讯,协议接口除了上面所有的功能外,增加:

1)登录验证服务,只有授权的用户名和密码可以访问控制服务器;

2)流量查询服务,通过控制服务器提供的计算服务解决B/S无状态问题.

PHP扩展到控制服务器的连接使用长连接技术,优化查询性能.

2.4 管理系统

管理系统主要管理用户数据库,通过PHP扩展执行用户登录验证,监控用户流量状态,设置用户流量控制参数等操作.

系统可以设置是否允许用户登录,是否绑定登录IP,空闲时间等,并记录用户登录信息.空闲时间是指,用户没有退出登录而直接关机,系统无法知晓,使用超时机制检测用户一段时间内没有任何流量就销毁用户的控制结构,节省内存,提高查找效率.

3 结束语

通过构建基于Netfilter的流量控制系统,可以有效控制客户端经过网关的流量,监控用户上网行为,提升内网安全和管理水平.另一方,其缺点也显而易见,只能在流量通过网关时执行控制,无法从源头限制,如果发生恶意的流量攻击,系统将无能为力.

[1]周中伟.校园网络流量控制的应用研究[J].湖南工业职业技术学院学报,2009,9(5):26-28.

[2]冯淑媛,赵明,郑志凌.校园网络流量控制策略的研究[J].湖南工业职业技术学院学报,2011,11(6):13-14.

[3]张连成,王振兴,苗甫.网络流量伪装技术研究[J].计算机应用研究,2011,28(7):2418-2423.

[4]郑黎明,邹鹏,贾焰,等.网络流量异常检测中分类器的提取与训练方法研究[J].计算机学报,2012,35(4):719-730.

[5]张艺濒,张志斌,赵咏,等.TCP与UDP网络流量对比分析研究[J].计算机应用研究,2010,27(6):2192-2197.

[6]蒋海,刘淑芬.流量监测MRTG的改进及其实现[J].计算机应用研究,2006(2):201-202.

[7]乐艳辉,李之棠,柳斌.基于Netfilter的P2P流量测量系统[J].计算机应用研究,2008,25(4):1224-1226.

[8]王振宇,邓锦福.基于Netfilter的DNS实时监控统计系统的设计[J].计算机应用研究,2009,26(4):1487-1496.

[9]王裕邦,卢显良,段翰聪,等.BT流量控制系统的设计与实现[J].计算机应用研究,2007,24(9):214-220

[10]刘罗仁,罗金玲.一种控制网关流量的控制器设计[J].重庆科技学院学报:自然科学版,2008,10(2):73-76

[11]黄文焱,褚伟.网络流量控制系统在开源路由器上的实现[J].计算机技术与发展,2010,20(8):225-228

[12]张五生,郑灵翔.基于Linux的流量控制系统研究[J].厦门大学学报:自然科学版,2010,49(1):38-42

[13]梁根,郭小雪,秦勇,等.基于Linux的流量控制机制研究[J].微计算机应用,2008,29(12):87-92

猜你喜欢

重定向内网网络流量
基于多元高斯分布的网络流量异常识别方法
基于神经网络的P2P流量识别方法
解决安卓文件夹乱象
重复压裂裂缝重定向的措施研究
AVB网络流量整形帧模型端到端延迟计算
4G伪基站的监测定位与规避协同分析
企业内网中的数据隔离与交换技术探索
地下车库柱网布置设计思路
网络流量监控对网络安全治理的重要性
基于马氏体重定向的铁磁形状记忆合金本构理论分析