本文转自http://www.chinaunix.net 作者:eliumao 发表于:2005-12-13 22:17:40
Netflow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。也许它不能象tcpdump那样提供网络流量的完整记录,但是当汇集起来是,它更加易于管理和易读。Netflow由Cisco创造。 这篇文章主要参考http://www.onlamp.com/lpt/a/6137和http://www.onlamp.com/lpt/a/6177这两篇文章,由于自行加入了ng_netflow和修改了部分程序,勉强算做原创吧 Netflow Netflow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。也许它不能象tcpdump那样提供网络流量的完整记录,但是当汇集起来是,它更加易于管理和易读。Netflow由Cisco创造。 Netflow结构 一个Netflow系统包括三个主要部分:探测器,采集器,报告系统。探测器是用来监听网络数据的。采集器是用来收集探测器传来的数据的。报告系统是用来从采集器收集到的数据产生易读的报告的。 探测器设置 探测器有很多种,常用的如softflowd,freebsd自带的ng_netflow。 (1)softflowd a.安装 #/usr/ports/net-mgmt/softflowd/make install clean b.运行 #softflowd -i 监听网卡 -n 采集器IP:端口 c。监控程序 #softflowctl statistics 查看状态,还有很多参数,自己看man (2)ng_netflow a.配置 1./boot/loader.conf ng_ether_load="YES" ng_one2many_load="YES" 2.ng配置文件/etc/ng_conf mkpeer 监听网卡: netflow lower iface0 name 监听网卡:lower netflow connect 监听网卡: netflow: upper out0 mkpeer netflow: ksocket export inet/dgram/udp msg netflow:export connect inet/采集器IP:端口 b.运行 #/usr/sbin/ngctl -f /etc/ng_conf 如果需要自动运行,需要在/usr/local/etc/rc.d/目录下加入相应的启动脚本 采集器设置 (1)安装flow-tools #/usr/ports/net-mgmt/flow-tools/make install clean (2)运行 #/usr/local/bin/flow-capture -p /var/run/flow-capture.pid -n 287 -N 0 -w /var/log/netflows/ -S 5 本地监听IP/远端IP/监听端口 :D 其中,/var/log/netflows/目录为日志目录,需要手动创建;本地监听IP为0,则在所有IP监听;远端IP为0,接受任意探测器的数据;其它可以不用更改。 一旦启动flow-capture,日志目录下就会出现日志文件。例如tmp-v05.2005-12-12.174000+0800,表示临时的,Netflow版本5的数据,采集开始时间是2005-12-12,17:40:00,距离GMT(标准时间)+8小时。每隔5分钟,flow-capture就会把临时文件移动到永久位置,并开始记录新的临时文件。永久文件就是把tmp替换成ft,文件名的其它部分一样,文件也在同样的日志目录下。 报告系统 (1)Cflow.pm 日志文件是二进制形式,需要特殊的工具阅读。很多工具均利用Cflow.pm。你可以把它当作一个简单的命令行工具。 a.安装 #/usr/ports/net-mgmt/p5-Cflow/make install 注意,这里没有用"clean"这个参数,因为,安装过程可能出错,错误提示包括这样一行 "Note (probably harmless): No library found for -lnsl" 如果是这样你还需要做下面的工作: # cd /usr/ports/net-mgmt/flow-tools/work/flow-tools-0.68/contrib # tar -xzvf Cflow-1.051.tar.gz # cd Cflow-1.051 # perl Makefile.PL # make # make install 这样才算安装成功,可以"clean"了 b.使用 #flowdumper -s ft-v05.2005-12-12.174000+0800 后面会出来很多记录信息。结果很容易阅读。但是没有我们关心的汇总之类的图形化的东西,当然你可以在flowdumper的基础上自行书写程序,但是,当然,肯定已经有很多非常棒的程序在那里等着我们了。 (2)flowscan和CUFlow flowscan是把采集器采集到的数据(/var/log/netflows/ft-*)分类整理,输出rrd格式的文件;CUFlow是flowscan使用的模块(或者插件)。同时CUFlow包含一个程序,方便我们通过WEB访问定制的图形化数据。 a.flowscan设置 1.安装: #/usr/ports/net-mgmt/flowscan/make install clean 由于一段时间来没有官方的升级版本,所以要从这里 http://net.doit.wisc.edu/~plonka/list/flowscan/archive/att-0848/01-FlowScan.pm 下载升级版本(V1.5至V1.6)才能正确处理日志数据。然后 #cp 01-FlowScan.pm /usr/local/var/db/flows/bin/FlowScan.pm 2.配置: #cd /usr/local/var/db/flows/bin/; #cp flowscan.cf.sample flowscan.cf #vi flowscan.cf /*修改配置文件flowscan.cf*/ ------------------------------------------------------------------------------ FlowFileGlob /var/log/netflows/ft-v*[0-9] #需要分析的数据的位置 ReportClasses CUFlow #使用的分析模块 WaitSeconds 300 #分析数据产生间隔,单位是秒,这里是5分钟 Verbose 1 #详细日志,但是可以在系统调试完成后关闭它,设置为0 ------------------------------------------------------------------------------ b.配置CUFlow 在这里(http://www.columbia.edu/acis/networks/advanced/CUFlow/)下载CUFlow。 #tar xvfz CUFlow-1.5.tgz;cd CUFlow-1.5 #cp CUFlow.pm CUFlow.cf /usr/local/var/db/flows/bin #vi CUFlow.cf /*修改配置文件CUFlow.cf*/ --------------------------------------------------------------------------------------- Subnet 192.168.2/23 #告诉CUFlow内网的IP段高,意区分外出和进入流量 Network 192.168.1.3,192.168.1.5 webservers #设置要分别处理的流量,当然你 Network 192.168.1.9,192.168.1.1 mailservers #会得到分别的数据显示。注意: Network 192.168.1.0/25 infrastructure #设置的地址可以交叠 OutputDir /var/log/cuflow #输出结果的位置(RRD) Scoreboard 10 /usr/local/www/data/scoreboard /usr/local/www/data/scoreboard/topten.html #产生过去5分钟内TopN用户的网页,这里N是10,就是头10位最大用户 AggregateScore 10 /var/log/cuflow/agg.dat /usr/local/www/data/overall.html #产生所有5分钟采样的平均值,这里是头10位 Router 192.168.1.1 fred #如果你的网络有比较复杂,多个网段都有自己的探测器,这里就是区分各个 Router 192.168.2.1 barney #不同的探测器的流量 Service 20-21/tcp ftp #你感兴趣的服务,可以很多,可以自定义 Service 22/tcp ssh Service 23/tcp telnet Protocol 1 icmp #你感兴趣的协议 Protocol 6 tcp Protocol 17 udp #ASNumber 1 Genuity #这一项是Cisco专用的,所以我注释掉了 ---------------------------------------------------------------------------------------- #mkdir /var/log/cuflow #mkdir /usr/local/www/data/scoreboard c.运行: # /usr/local/var/db/flows/bin/flowscan 可以看到flowscan开始处理/var/log/netflows/下的文件了,处理完后就会sleep等待300秒了。 d.启动脚本 # cp /usr/local/etc/rc.d/cflowd-flowscan.sh.sample /usr/local/etc/rc.d/cflowd-flowscan.sh 日志在/var/log/flowscan.log (3)图形结果 a.还记得刚才那个CUFlow的包么,里面有一个叫做CUGrapher.pl的文件,把它复制到/usr/local/www/cgi-bin/下。 b.修改 #vi /usr/local/www/cgi-bin/CUGrapher.pl -------------------------------------------------------------------------------- my $rrddir = "/var/log/cuflow"; #要处理的rrd文件的位置 my $organization = "My Network"; #修改成自己公司的名字 -------------------------------------------------------------------------------- c.浏览 http://youip/topten.html #Top10列表 http://youip/overall.html #总汇总列表 http://youip/cgi-bin/CUGrapher.pl #可定制输出 d.如果你配置无误,并且幸运的话,一切都会正常。但是我在这里遇到了问题。有些(除了Network之外的几乎全部)选项无法产生图象。在google了一通未能找到答案后,开始了痛苦的程序debug过程。好在CUGrapher.pl是个perl程序,并不很长,让我找到了问题的所在。需要修改一下CUGrapher.pl这个文件: # vi CUGrapher.pl -------------------------------------------------------------------------------- # router name if( scalar @} || scalar @} || scalar @} || exists $total ) { push @args, 'COMMENT: Router: '.$r; } --------------------------------------------------------------------------------- 找到上面这部分,全部注释掉。 由于我较懒,所以采用了回避(注释)的方法。 图形结果也许不那么令你满意,当然,你可以根据自己的需要修改CUGrapher.pl来定制。如果你有改好的文档,十分感谢能告诉我。