nfdump分析netflow

nfdump是一款开源的netflow收集、存储、过滤、统计分析软件。目前支持 netflow v5、v7和v9版本.

NFDUMP工具概述(所有工具都支持netflow v5,v7,v9):

1、nfcapd-netflow捕获守护进程(deamon)
   从网络中捕获netflow数据,然后将数据存到文件中。它会每隔n(一般为5)分钟在这些文件中轮转。你必须为每个netflow流创建一个nfcapd进程。
2、nfdump-netflow数据挖掘
  从由nfcapd产生的数据文件中解析出netflow数据并显示出来,它能够建立大量关于流IP地址、端口等的top N统计信息,并根据想要的顺序显示出来。
3、nfprofile-netflow分析器
  从由nfcapd产生的数据文件中解析出netflow数据,并根据指定的过滤集过滤netflow数据,并将结果你存到文件中。
4、nfreplay-netflow数据转发
  从由nfcapd产生的数据文件中解析出netflow数据,并将它转发到另一台主机。
5、nfclean.pl-清除旧数据
  一些清除过期数据的脚本。你可以每隔一小时运行它一次。
6、ft2nfdump-读取并转换flow-tools数据
  从文件中读取或者标准输入接口读取flow-tools数据,并将它转换成nfdump格式,并交由nfdump处理。


NFDUMP运行原理:

设计的目标是既能够从过去的数据分析netflow数据也能连续的流量信息。能够分析过去多久的信息就看的硬盘容量。

所有的数据都存储到硬盘中,这样就将数据的存储和分析过程独立开来了。
这些数据按照一定的时间组织起来,每隔n分钟(一般为5),nfcapd就从新建立新的文件,并用时间戳来命名,例如nfcapd.200407110845包含的数据是从2004年7.11 8:45开始的时隙内的数据。如果时隙为5分钟,那么每天有288个文件。

分析数据可以一次一个文件也可以包含多个文件,它的输出可以是ASCII码文件也可以是二进制文件。
假如你有几个netflow数据源,router1,router2,那么你可以如下组织你的数据源:
/flow-base_dir/router1
/flow_base_dir/router2
每一个数据源,你都必须启动一个nfcapd进程:
nfcapd -w -D -l /flow_base_dir/router1 -p 23456
nfcapd -w -D -l /flow_base_dir/router2 -p 23457
当端口<1024时,命令无须root权限。然而,nfcapd没有接入控制机制。


软件地址:http://nfdump.sourceforge.net/

一 . nfdump安装

首先下载软件nfdump-1.6.4.tar.gz。

http://sourceforge.net/projects/nfdump/

目前最新版本为1.6.4.

# tar zxvf nfdump-1.6.4.tar.gz

# cd nfdump-1.6.4

# ./configure --prefix=/usr/local/nfdump

# make

# make install


将nfdump可执行文件加入到PATH目录中。

export PATH=/usr/local/netflow/bin:$PATH


二. nfdump使用

nfdump包含了五个命令,nfanon, nfcapd, nfdump, nfexpire和nfreplay,其中比较常用的只有nfcapd和nfdump。

下面就分别介绍这五个命令。

1.nfanon

nfanons使用CryptoPan模块实现netflow记录中所有IP地址(源 IP、目的IP、下一条、路由器IP)的匿名。

用法:

-r inputFile :指定单个输入文件, 如 -r nfcapd.201109020900

-R expr :指定一个目录或一组输入文件,如 -R /data/flows/nfcapd.201109020900:nfcapd.201109201000

-M expr :指定多个目录下的输入文件,如 -M /data/flows/router1:router2:router3

-w outputfile :指定输出文件

-K key :指定key, key用来初始化Rijndael加密算法,是一个32个字符的字符串,或64个以0x十六进制数值串。


2.nfexpire

nfexpire: 用于历史netflow数据文件到期的管理。文件的到期管理可以使用nfcapd的自动到期模式或nfexpire实现。

用法:

-l directory :列出directory datadir的当前数据统计;

-r directory :重扫描指定目录以更新统计文件;

-e datadir :指定到期文件目录

-s maxsize :设置目录的大小限制,接收如下格式参数, 100M, 100MB, 1.5G, 1.5T, 1.5TB等,0取消最大尺寸限制。

-t maxlife_time :设置目录下文件的最大存活期。接收如下格式参数,31d, 240H, 4w,0取消最大时间限制。

-u datadir :更新尺寸和生命期限制。

-w watermark :设置过期数据的百分比%, 默认为95%。

-h :帮助

-Y :将结果以可解析方式输出。


3.nfreplay

nfreplay :netflow的重放程序。从nfcapd存储的文件读取数据,将其发送到其他主机或广播组。过滤器语法与 nfdump相同。

用法:

-H remotehost :远程主机

-j mcastgroup :广播组

-p port :远端端口,默认为9995

-4 :强制将流发送到IPv4地址;

-6:强制将流发送到IPv6地址;

-v num :发送netflow的版本号(5, 9),默认为版本5.

-d usec :每条记录延迟usec毫秒,默认为0

-b buffersize: 设置发送缓冲区大小

-r inputfile :输入文件

-t timewin : 记录的时间窗,YYYY/MM/dd.hh:mm:ss-YYYY/MM/dd.hh:mm:ss

-c num :只发送前num条记录

-V :输出nfreplay版本

-h :帮助

4. nfcapd

nfcapd :netflow接收守护进程。从网络上读取netflow数据,并存出到文件。每个n分钟(通常是5分钟)自动生成文件。

用法:

-p portnum :指定接收端口号, 默认为9995

-b bindhost :绑定监听主机地址。

-4 :强制只监听IPv4地址;

-6 :强制只监听IPv6地址;

-j MulticastGroup :加入广播组监听;

-R host[/port] :开启数据包中继,将收到的所有包发送到另一台设备;

-I IdentString :指定标识字符串,用于统计记录中区分源。默认为none

-l base_directory :指定输出文件存储根目录;

-n <Ident, IP, base_directory> :通过源IP地址指定Ident

-f <pcap_file> :读取pcap_file

-s <rate> :指定netflow记录的采样比。

-S <num> :指定文件存储目录结构。

0  default     没有层级结构

1 %Y/%m/%d year/month/day

2 %Y/%m/%d/%H year/month/day/hour

3 %Y/%W/%u year/week_of_year/day_of_week

4 %Y/%W/%u/%H year/week_of_year/day_of_week/hour

5 %Y/%j year/day-of-year

6 %Y/%j/%H year/day-of-year/hour

7 %Y-%m-%d year-month-day

8 %Y-%m-%d/%H year-month-day/hour


-T <extension list> :指定存放在netflow文件中的扩展信息,;
-t interval :轮转文件的间隔,秒为单位,默认为300秒
-w 实现文件输出时间对齐,如5分钟为输出间隔时,将时间对齐为0, 5, 10... 默认不对齐
-x cmd 每个间隔的最后,当新文件可用时运行cmd命令
-X 收集并嵌入扩展统计信息。
-e :自动文件过期;
-P pidfile :指定pid文件名
-D :指定为守护进程模式
-u userid
-g groupid
-B bufflen:指定socket缓冲区
-E 将netflow记录以nfdump原始格式输出到标准输出。
-z 压缩
-V :输出nfcapd版本
-h :输出帮助信息

实例:
nfcapd -z -w -D -T all -p 9995 -l /data/flows -S 0 -P nfcapd.pid


5. nfdump

nfdump是nfdump软件包中最重要也是最复杂的程序。实现了netflow记录的过滤、聚合、top统计、排序等功能。

用法:

1>输入

-r inputfile :单个文件

-R expr : 同一目录下多个文件

-M expr :多个目录下多个文件

2>输出

-w outputfile :指定将二进制netflow记录输出到outputfile以便nfdump进一步处理。如果不指定,则以文本方式输出到标准输出。

-I :输出流统计信息;

-o format :指定输出格式

raw :将每条流记录多行输出;

line :将每条流记录单行输出,默认格式;

long :将每条流单行输出,有更加详细信息;

biline :和line相同,用于双向流

bilong :和long相同,用于双向流

extended :扩展模式

csv :csv逗号分割文本

pipe :字段通过|分割

fmt:format :自定义输出格式

-q :禁用首行和尾部统计信息;

-N :输出中输出普通数值,即不用M, G等表示

-v file :验证文件版本等信息;

-V :输出nfdump版本;

-h :帮助


3>过滤

-f filterfile :指定过滤配置文件

此外过滤可以直接在命令行指定。

过滤器语法如下:

expr and expr, expr or expr, not expr

include

@include <file>

protocol version

inet or ipv4 : IPv4

inet6 or ipv6 :IPv6

protocol

proto <protocol> : <protocol>可以是字符串tcp, udp等,也可以是6, 17等;

IP address

[SourceDestination] ip <ipaddr>

[SourceDestination] host <ipaddr>

[SourceDestination] ip in [, <iplist> ]

[SourceDestination] host in [ <iplist> ]

<iplist>用空格分割




4>聚合

-A aggregation

aggregation是逗号分割的tags,tags包含如下:

proto           IP协议

srcip 

dstip

srcip4/net

srcip6/net

dstip4/net

dstip6/net

srcnet

dstnet

srcport

dstport

srcmask

dstmask

srcvlan

dstvlan

srcas

dstas

inif

outif

next

bgpnext

insrcmac

outdstmac

indstmac

outsrcmac

tos

srctos

dsttos

mpls1 --- mpls10


5>统计

-s statistic[:p][/orderby] 提供Top统计



6>其它


实例:

nfdump -r nfcapd.201109020900 'net 192.168.1.0/24 and proto tcp' -o line 


NFDUMP的使用:
-r <single file> 从一个文件解析netflow数据
-R </path/to/first-file:lastfile> 读取一个目录下从first-file到last-file(按时间排列)并解析
-M </path/to/first-dir:next-dir:last-dir -r <single-file> 从多个目录(不同于上面,需一一列出)读取具有名为single-file的文件
-M </path/to/first-dir:next-dir:last-dir -R <first-file:last-file> 不作为解释

特殊:
-R </path/to/dir> 读取该目录下的所有文件
-M </path/to/first-dir:next-dir:last-dir -R . 读取多个目录下的所有文件
-R </path/to/first-file> 读取该目录下从first-file开始的所有文件
-M </path/to/first-dir:next-dir:last-dir -R <first-file> 读取所有目录下从first-file开始的所有文件


NFDUMP输出格式化

nfdump有四个固定的输出格式:raw,line,long和extended。用户也可以自定输出格式(格式为fmt:...)
1、raw 格式
   这种格式允许一个记录占用多行输出,输出记录中所有的有用信息。下面是例子:
Flow Record: 
  Flags       =       0x00000000
  size        =               52
  mark        =                0
  srcaddr     =    36.249.80.226
  dstaddr     =    92.98.219.116
  First       =       1125377992 [2005-08-30 06:59:52]
  Last        =       1125377992 [2005-08-30 06:59:52]
  msec_first  =              338
  msec_last   =              338
  dir         =                0
  tcp_flags   =                0
  prot        =               17
  tos         =                0
  input       =                5
  output      =                3
  srcas       =             1299
  dstas       =                0
  srcport     =             3040
  dstport     =             1434
  dPkts       =                1
  dOctets     =              404

2、line格式:-o line
   这种格式下,每条流记录只占用一行输出。下面是例子:
Date flow start         Duration Proto    Src IP Addr:Port         Dst IP Addr:Port   Packets    Bytes Flows
2005-08-30 06:59:52.338    0.001 UDP    36.249.80.226:3040  ->   92.98.219.116:1434         1      404     1
  流的开始时间和持续时间都是以毫秒来计算的,流数在流没有聚合之下永远是1。

3、long格式:-o long
   这个格式包含增加的信息,例如:TCP flags,服务的类型(Tos)

4、extended格式:-o extended
   比long格式增加了pps(每秒报文数),bps(每秒比特数),bps(每秒字节数)

5、自定义输出格式:-o fmt:..

Tag Description         Tag Description
%ts Start Time - first seen  %in  Input Interface num
%te  End Time - last seen  %out Output Interface num
%td Duration          %pkt  Packets
%pr  Protocol          %byt Bytes
%sa  Source Address          %fl  Flows
%da  Destination Address  %pkt  Packets
%sap Source Address:Port   %flg TCP Flags
%dap Destination Address:Port %tos Tos
%sp  Source Port          %bps bps - bits per second
%dp Destination Port  %pps pps - packets per second
%sas  Source AS          %bpp bps - Bytes per package
%das Destination AS 
例如:
-o “fmt:%ts %td %pr %sap -> %dap %pkt %byt %fl"

6、屏幕输出IPv6记录
   由于ipv6的地址长度为128位,一般情况下,为了输出规范,把ipv6地址缩短成ipv4地址长度。如果要输出ipv6地址的全部,则可以在输出格式中+6,例如:-o line6。

7、聚合流:-a或-A <scheme>
当使用-a时,默认当TCP协议、源目IP地址、源目端口一致时,则把这些流聚合成一条流。
使用-A时,则可以自定义聚合的条件。聚合后有些值可能无法表示则记为0;
使用-A script4/24时,可以根据子网来聚合;

8、过滤语法
   nfdump有很强的过滤功能,流过滤操作在对数据进行处理之前。过滤条件既可以在命令行(放在最后并以"."结束)中给定也可以在文件中定义(每一个一#开头的行都被视为是命令)。
过滤规则可以包含一个多个expr,例:expr and expr,expr or expr,not expr,(expr).
expr可以是下面这些条件:
(1)协议版本
  inet或者ipv4表示v4,inet6或者ipv6表示v6版本。
(2)应用层协议
   TCP,UDP ,ICMP, GRE, ESP, AH,RSVP或者PROTO<num>(num是应用层协议号)。
(3)ip地址
 ip a.b.c.d或者host a.b.c.d,前面可以加上SRC,DST或者SRC AND DST或者SRC OR DST。
(4)网络
  NET a.b.c.d(ip地址) m.n.r.s(子网掩码)或者NET a.b.c.d/num,也可以这样给定a.b,a.b.c
(5)端口
  PORT[比较符号]num
(6)接口号
[inout] IF NUM,[inout]只能选择IN或者OUT
  等等。。。。举个例子:
Examples:
       nfdump -r /and/dir/nfcapd.200407110845 -c 100 'tcp and ( src ip 172.16.17.18 or dst ip 172.16.17.19 )'

nfdump -r /and/dir/nfcapd.200407110845 -A srcip,dstport 'in if 5 and net 10.0.0.0/24 and not host 10.0.0.1 and bps > 10k and duration < 100 and dst port 1433'

9、TOP N统计:[-n <num>]-s type[/orderby]
根据type排行,行数为n(默认为十),根据orderby从小到大来排,其中-s type 可以有多个
type可以为:
record Statistic about aggregated netflow records.
srcip Statistic about source IP addresses
dstip Statistic about destination IP addresses
ip Statistic about any (source or destination) IP addresses
srcport Statistic about source ports
dstport Statistic about destination ports
port Statistic about any (source or destination) ports
srcas Statistic about source AS numbers
dstas Statistic about destination AS numbers
as Statistic about any (source or destination) AS numbers
inif Statistic about input interface numbers
outif Statistic about output interface numbers
if Statistic about any ( input or output ) interface numbers
proto Statistic about protocol number

orderby可以为:flows, packets, bytes, pps, bps or bpp.
举例:nfdump -r nfcapd.200508300700 -o extended -s srcip -s ip/flows -s dstport/pps/packets/bytes -s record/bytes

10、匿名FLOWS:-K <key>
通过这个可以屏蔽ip地址在它输出到屏幕之前或者输出到文件,它采用的是Crypto-PAn模型。key可以是以0x开头的32位或64位字符串

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值