一、系统架构
JP8v/|0hw F
系统搭建于Linux RedHat 9.0操作系统之上。需要模拟的部分主要是数据导出模块。我们使用NetflowExporter软件来模拟路由器的数据导出功能。目前该软件只支持常用的NetFlow V5格式。在数据采集模块中采用flow-tools 0.68工具包。
运行NetflowExporter的PC,最好配有两颗以上的CPU,内存的需要量要看具体的流量状况。根据经验,在10兆规模的网络中实现 NetFlow功能的话,内存不应小于1G。数据导出端还应配置双网卡以实现数据导出。数据采集模块部分主要实现flow聚合存储功能,需要比较大的存储空间。以我们实际实验为例,十兆级的流量大概每天要占用3-5G。采用压缩技术之后为再小一点。
T(`"{vuC#Q`
数据导出模块使用两个网络接口eth0和eth1(两块网卡),eth0需要内部IP地址,但是并不需要对eth1的IP地址进行设置(或者使用一个不用的私有地址) ,同时在NetflowExporter主机上设置监听接口。然后,在交换机上进行配置,把路由器的端口的数据分组完全复制一份到eth1接口。经过 NetflowExporter处理之后,通过eth0以UDP格式报文的形式导出到内部网络中的flow -tools或ntop主机,同时在采集端必须进行合理配置以正确接收由导出端发出的Netflow V5格式报文。这样会在采集模块中生成流量数据文件,从而可以在数据分析端处理分析用户所需要的流信息。安装flow-tools或ntop的主机可以是另一台主机或者就是NetflowExporter主机。系统结构如附件1所示。
二、具体实现
4EC6n u J6L V8r
1、导出模块
在数据导出部分,NetflowExporter主机目前只支持在i386平台的 Linux 及 FreeBSD 操作系统。以Linux平台为例,在 Linux平台下以rpm软件安装包来进行安装,如:# rpm -ivh NetflowExporter-0.1.25-1.i386.rpm 第一次运行可以输入:# netflow,然后可以进入 netflow 软件程序的用户界面。用户界面的提示符是 hostname::netflow> , 建议先用show configuration 指令来了解目前系统的配置情况。如果要监听的接口为eth1,可输入listen on eth1命令。用ip flow-export destination x.x.x.x portnumber(其中x.x.x.x表示目的主机的IP地址,portnumber为目的端口号)命令来指定NetflowExporter要输出的目的主机及其接收的端口。然后输入enable ip flow-export 命令来启动输出flow功能。建议在设定完成后,用show configuration 命令再确认一下配置正确与否。然后用write命令将配置保存下来,一般来讲,配置存储文件是/etc/netflow.conf。退出 NetflowExporter有两个命令。一个是exit,这个命令是离开这个软件的用户界面但是软件依然在后台工作。第二个命令是 terminate,这个命令不但会退出软件用户界面也会使软件停止工作。
lT KOH0t(y3XvT.l
2、采集模块
在数据采集端使用flow-tools 0.68工具包(http://cng.ateneo.net/cng/wyu/software/flow-tools.php)。
其中flow-capture主要负责收集、压缩、存储从路由器(数据导出端)发过来的UDP包。例如:flow-capture –n 105 –Z 6 –w /var/netflow 0/0/3309,其中-n参数用于指定每天创建文件的个数,默认值是95,大概15分钟生成一个流信息记录文件。-Z参数用于设置压缩级别。flow- tools中内建了Zlib算法用于对流数据进行压缩。压缩级别共有10级,分别为从0到9,0表示不进行任何压缩,9是压缩率最高但最耗资源。实验结果表明,在选择压缩参数6的时候,对cpu的耗用和压缩效果两者之间可以取得较好的平衡,基本上压缩率在 3-5:1。-w参数用于指定流文件存放的目录。这里需要注意的是,这个目录名一定要事先手动建立,不然无法生成流文件,也无法自动创建目录名。 0/0/3309分别是指本地(接收端)IP/远程(发送端)IP/接收端口号。在运行这个程序后,可以在Linux提示符下输入netstat –lnp查看程序所指定的监听端口是否已经打开。如果打开表示程序已经正常工作。如果没有说明程序设置有问题,需要重新检查设置。具体可以查看 /var/log/messages里的信息。
CH8T4zh_
3、数据转出程序&P:dK0w+js0`W
flow-import 和 flow-export 可以对数据进行导入导出,其中flow-export还支持直接导出到Mysql数据库中或者导出成为Cflow支持的流格式或直接导出为ASCII文本文件。例如:flow-export -f2 -mdpkts,doctets,first,last,srcaddr,dstaddr,srcport,dstport,prot,tos <流文件或流目录 > flows.ascii,这个命令就可以把流文件中的记录信息全部导出到一个ASCII文件中。flow-export -f2 -mdpkts,doctets,first,last,srcaddr,dstaddr,srcport,dstport,prot,tos -u “user:password:host:prot:name:table”<流文件或流目录,这个命令可以将流记录直接导入到指定的Mysql数据库中。需要注意的是指定的字段顺序不能颠倒,否则不能导出正确的流记录。
http://blog.163.com/sd_qiye/blog/static/43530267200821811234264/