Linux路由器流量统计系统
统计分析师:Linux路由器流量统计系统 发布时间:2007.06.27 11:59 来源:赛迪网 作者:skid 本文首先概述三种常用的Linux路由器计费方式,然后详细介绍Linux系统的Netfilter包过滤技术,并在此基础上探讨以Netfilter为核心开发的高
统计分析师:Linux路由器流量统计系统 |
发布时间:2007.06.27 11:59 |
本文首先概述三种常用的Linux路由器计费方式,然后详细介绍Linux系统的Netfilter包过滤技术,并在此基础上探讨以Netfilter为核心开发的高效、低负载、可扩展的流量统计系统。 表1 Netfilter的组成 图1 Netfilter的数据包路由 1.当一个数据包进入(如网络1),内核首先检查包的目的地(路由决策)。 2.如果它是进入本机的,包会向图的下方移动,到达INPUT链。在这里,任何等待该包的进程都会收到它。 3.否则,如果内核未被允许转发,或者不知道如何转发该包,它就会被丢弃。如果允许转发,而且包的目的地是另一个网络接口(如网络2),那么包继续向图的下边行进,到达FORWARD链。如果策略允许通过(ACCEPT),它将被送出。 4.服务器上的进程也可以发送网络包,这些包直接通过OUTPUT链发送,如果被允许(ACCEPT),那么该包继续向可到达其目的地的网络接口发送。 “nat表”管理网络地址翻译,其中PREROUTING链可定义进行目的地址NAT的规则。因为路由器进行路由时只检查数据包的目的IP地址,所以为了使数据包能正确路由,必须在路由之前就进行目的NAT。POSTROUTING链用来定义进行源地址NAT的规则,系统在决定数据包的路由以后才执行该链中的规则。OUTPUT链定义对本地产生的数据包的目的地址NAT规则。 除了内建链,Netfilter还支持用户自建链,支持更复杂、功能更强的应用。 计费规则 根据Netfilter可扩展表链的特性,可以通过自定义链来实现对数据包的流量计费。从网络管理的角度考虑,需要关注的流量一般是总流入流出及一些基本的网络应用流量,如FTP、WWW、SMTP、POP等,更多的监控可以根据需要添加。 iptables的流量计费功能在同一链内只能实现一次,因此自定义表必须精心设计,保证目标数据包经过计费链。首先建立用户自定义表ACC-IN、ACC-OUT、ACC-OUT-SMTP、ACC-IN-POP3、ACC-IN-WWW、ACC-IN-FTP。 对于Linux路由器,往往需要实现IP伪装与透明代理,其计费链与传统的包转发路由器有所不同。对于IP伪装(网络地址翻译),第一个分组IP包经过PREROUTING(nat)链,此后所有的IP包均经过FORWARD(filter)链,因此实际上对NAT的计费是在FORWARD链上完成的。对于透明代理,其实质是将用户HTTP的80端口请求转发到代理服务进程,如果代理服务进程在本地,则相应的流量发生在本地的OUTPUT链。 流入量统计的iptables表与用户自定义表的顺序关系如图2。 图2 计费表的顺序关系 表2 计费类型说明
◆ FTP流量包括20、21端口,由于21端口只负责FTP控制信令传送,故只需对负责数据传送的20端口计费即可:
◆ WWW流量如果不设置透明代理,则计费发生在FORWARD链:
◆ 对于使用透明代理的流量,计费发生在OUTPUT链(其中10.x.x.x为内网IP,X为代理进程的端口号):
其它协议的计费方式类似。对于任意的TCP及UDP协议,只要知道服务端口号,都可以进行计费。 实际的计费规则采用PERL自动生成。首先生成需要计费的IP地址列表文件,然后通过PERL程序读取该文件并自动生成计费规则。程序示例如下:
图3 系统结构示意图 系统的后台程序 Iptables的计数功能仅仅提供了简单的流量显示,使用参数iptables -nvxL可得到更多的流量详细数据。例如:
计费后台程序由于采用PERL语言编写,程序紧凑高效,与SNMP计费方式相比,实现方法简单,可定制性强,而且每天执行一次,对Linux路由器没有增加额外的负载。 数据库与前端实现 由于Linux路由器承担大量用户的IP包转发任务,负载较重,为了避免对其性能的影响,后台数据库不设置在本地,而采用多台路由器使用同一后台MySQL数据库来进行管理。 前台查询界面则可采用PHP语言编写,提供给用户日流量、月流量、年流量的查询,同时可对计费策略进行监控和管理,如图4示。 图4 用户查询界面 本计费系统由于基于Netfilter技术,实现简单、高效,对系统的性能影响不大,同时保持了良好的可扩充能力,在实际的应用过程中能够根据用户的需要增加计费类型,是一个高效、低负载、可扩展的Linux路由器流量统计系统。 (责任编辑:凌云通) |
更多推荐
所有评论(0)