Netflow/IPFIX 流量收集与分析
2020-03-17 13:25 云物互联 阅读(5895) 评论(0) 编辑 收藏 举报目录
文章目录
Netflow(网络数据流检测协议)
随着软件系统升级以及漏洞修补方案的成熟,直接入侵主机进行破坏的病毒攻击方式逐渐减少,继而转为恶意消耗有限的网络资源,造成网络阻塞,以此破坏系统对外提供服务的能力。针对此类攻击,业界提出了通过检测网络数据流(Flow)的方法来判断网络异常和攻击,借助实时的检测网络数据流信息,通过与历史记录模式匹配(判断是否正常)、或者与异常模式匹配(判断是否被攻击),让网络管理人员可以实时查看全网的状态,检测网络性能可能出现的瓶颈,并进行自动处理或告警显示,以保证网络高效、可靠地运转。
Netflow 技术最早于 1996 年由思科公司的 Darren Kerr 和 Barry Bruins 发明,并于同年 5 月注册为美国专利。Netflow 技术首先被用于网络设备对数据交换进行加速,并可实现对高速转发的 IP 数据流进行测量和统计。经过多年的技术演进,Netflow 原来用于数据交换加速的功能已经逐步由网络设备中的专用 ASIC 芯片替代,而对流经网络设备的 IP 数据流进行测量和统计的功能依旧保留着,并成为了当今互联网领域公认的最主要的 IP/MPLS 流量分析、统计和计费行业标准。Netflow 技术能对 IP/MPLS 网络的通信流量进行详细的行为模式分析和计量,并提供网络运行的详细统计数据。
Netflow 系统包括三个主要部分:探测器(Exporter),采集器(Collector),分析报告系统(Analysis)。
- Exporter:用于监听网络数据
- Collector:用于收集从 Exporter 输出的网络数据
- Analysis:用于分析从 Collector 收集到的网络数据,并产生报告
经分析由 Netflow 收集到的信息,网络管理人员可以知道报文的来源、目的地、网络服务类型,以及造成网络拥塞的原因。也许它不能像 tcpdump 那样提供网络流量的完整记录,但是当汇集起来时,它更加易于管理和易读。
从路由器和交换机输出的 NetFlow 网络数据由过期的数据流及详细的流量统计数据组成。其中,这些数据流包含报文的来源和目的地相关的 IP 地址,以及端到端会话使用的 Protocol 和 Port;而流量统计数据包含了数据流时戳、源 IP 地址和目的 IP 地址、源端口号和目的端口号、输入接口号和输出接口号、下一跳 IP 地址、信息流中的总字节数、信息流中的数据包数量、信息流中的第一个和最后一个数据包时戳 源 AS 和目的 AS,及前置掩码、数据包序号等。
目前,最新的 Netflow V9 是一种全新的灵活且可扩展的 Netflow 数据输出格式,采用基于模板(Template)的统计数据输出。方便添加需要输出的数据域和支持多种新功能,如:Multicase Netflow、MPLS Aware Netflow、BGP Next Hop V9、Netflow for IPv6 等。
在 2003 年,Netflow V9 还被 IETF 组织从 5 个候选方案中确定为 IPFIX(IP Flow Information Export,IP 数据流信息输出)标准。
IPFIX(网络流量监测)
基于流的技术被越来越广泛地应用于网络领域,它在设置 QoS 策略、部署应用和进行容量规划上都有着巨大的价值。但是,网络管理员却缺少一种输出数据流的标准格式。IPFIX(IP Flow Information Export,IP 数据流信息输出)就是为了满足这一需求,由 IETF 公布的用于网络中的流信息测量的标准协议。
IPFIX 定义的格式以 Cisco Netflow V9 数据输出格式作为基础,标准化了 IP 数据流的统计、输出标准。是一种针对数据流特征分析、基于模板的格式输出的协议,因此具有很强的可扩展性,因此如果流量监控的要求发生改变,网络管理员也可通过修改相应配置来实现,不必升级网络设备软件或管理工具。网络管理员得以容易地提取和查看存储在这些网络设备中的重要流量统计信息。
为了较完整的输出数据,IPFIX 缺省使用网络设备的七个关键域来表示每股网络流量:
- 源 IP 地址
- 目的IP 地址
- TCP/UDP 源端口
- TCP/UDP 目的端口
- 三层协议类型
- 服务类型(Type-of-service)字节
- 输入逻辑接口
如果不同的 IP 报文中所有的七个关键域都匹配,那么这些 IP 报文都将被视为属于同一股流量。通过记录网络中这些流量的特征,如流量持续时间、流量中报文平均长度等, 我们可以了解到当前网络的应用情况,并根据这些信息对网络进行优化,安全检测,流量计费。
IPFIX 组网架构
综上,IPFIX 基于 Flow 的概念,一个 Flow 指:来自相同的子接口,具有相同的源和目的 IP 地址,协议类型,相同的源和目的协议端口号,以及相同 ToS 的报文,通常为 5 元组。IPFIX 会记录这个流的统计信息,包括:时间戳,报文数,总的字节数。IPFIX 主要包括三个设备 Exporter、Collector、Analyzer,三个设备之间的关系如下:
- Export 对网络流进行分析处理,提取符合条件的流统计信息,并将统计信息输出 Collector。
- Collector 负责解析 Export 的数据报文,把统计数据收集到数据库中,可供 Analyser 进行解析。
- Analyser 从 Collector 中提取统计数据,进行后续处理,为各种业务提供依据,以图形界面的形式显示出来。
IPFIX 应用场景
Usage-based Accounting(基于使用流量的计费)
在网络运营商中的流量计费一般只是简单的基于每用户的上传、下载流量。由于 IPFIX 可以精确到目的 IP、协议端口等字段,今后的流量计费就可以基于应用服务的特点来分段收费。当然,协议中也说明了,IPFIX 的报文统计是 “采样” 的,在许多应用场合(如骨干层),数据流统计并不是越精细越好,出于网络设备的性能考虑,采样率不能过小,因此并不需要提供完全精确可靠的流量计费。但在网络运营商级别,计费单位一般都是百兆以上,IPFIX 的采样精度能满足相关需求。
Traffic Profiling、Traffic Engineering(流量概图、流量工程)
IPFIX Exporter 的记录输出,IPFIX Collector 可以以各种图表形式输出非常丰富的流量记录信息,这就是 Traffic Profiling 的概念。
然而,只是信息的记录,还无法利用 IPFIX 的强大功能,IETF 同时推出了 Traffic Engineering 的概念:在实际运营网络中,经常规划了负载均衡和冗余备份,但各种协议一般都是按网络规划时预定的路线、或协议原理进行调整。而如果采用 IPFIX 监控网络中的流量,发现某段时间某些数据流较大,可以汇报给网络管理员进行流量调整,以分配、调整更多的网络带宽供给相关应用服务使用,减少负载不均的情况发生。甚至于,可以更智能把路由调整、带宽分配、安全策略等设置规则直接绑定到 IPFIX Collector 上的操作上,自动完成网络流量调整。
Attack/Intrusion Detection(攻击/入侵检测)
IPFIX 可以根据流量特点,进行网络攻击的检测。例如:典型的 IP 扫描、端口扫描、DDOS攻击。而采样标准的 IPFIX 协议,还可以像一般主机端病毒防护一样,采用 “特征库” 升级来阻止最新的网络攻击。
QoS Monitoring(网络服务质量的监控)
典型的 QoS 参数有:
- 丢包情况:loss [RFC2680]
- 单向延时:one-way delay [RFC2679]
- 往返延时:round-trip delay [RFC2681]
- 延时变化:delay variation [RFC3393]
以往的技术很难实时地监控上述信息,而通过 IPFIX 的各种自定义字段、监控时间间隔就可以很容易的监控各种报文的上述数值。
Flowalyzer Netflow & sFlow Tool Set(Netflow 模拟工具)
goflow(Netflow/IPFIX Collector)
- CentOS7
- Golang1.12.5
安装:
go get github.com/cloudflare/goflow/cmd/goflow
cd ~/go/src/github.com/cloudflare/goflow/cmd/goflow
go install
检查:
goflow -h
运行:
goflow -kafka=false -nf -nf.addr 192.168.1.8 -nf.port 5678
结果:
Type:IPFIX
TimeReceived:1584370187
SequenceNum:2823
SamplingRate:0
SamplerAddress:172.16.1.107
TimeFlowStart:0
TimeFlowEnd:0
Bytes:64
Packets:1
SrcAddr:1.1.1.16
DstAddr:1.1.1.19
Etype:2048 Proto:17
SrcPort:4242
DstPort:80
InIf:3
OutIf:5
SrcMac:00:00:00:00:00:00
DstMac:00:00:00:00:00:00
SrcVlan:0
DstVlan:0
VlanId:0
IngressVrfID:0
EgressVrfID:0
IPTos:1
ForwardingStatus:0
IPTTL:0
TCPFlags:0
IcmpType:0
IcmpCode:0
IPv6FlowLabel:0
FragmentId:0
FragmentOffset:0
BiFlowDirection:0
SrcAS:2
DstAS:3
NextHop:0.0.0.0
NextHopAS:0
SrcNet:32
DstNet:31
HasEncap:false
SrcAddrEncap:<nil>
DstAddrEncap:<nil>
ProtoEncap:0
EtypeEncap:0
IPTosEncap:0
IPTTLEncap:0
IPv6FlowLabelEncap:0
FragmentIdEncap:0
FragmentOffsetEncap:0
HasMPLS:false
MPLSCount:0
MPLS1TTL:0
MPLS1Label:0
MPLS2TTL:0,
MPLS2Label: 0,
MPLS3TTL:0
MPLS3Label:0
MPLSLastTTL:0
MPLSLastLabel:0
HasPPP:false
PPPAddressControl:0
cflowd
CAIDA(Cooperative Association for Internet Data Analysis,互联网数据分析合作协会)发布了一款免费软件,使互联网服务提供商(ISP)能够更有效地监控流量操作,为其网络进行容量规划,并分析数据流量趋势,这就是 cflowd v2.0。
cflowd 是为了收集和分析思科路由器的流量输出数据而开发的。收集、分析、统计数据流量是 ISP 设计以及运营网络的基础,cflowd 和相关的 CAIDA 工具集提供了网络工程师设计网络连接、记帐、故障排除和跟踪攻击和安全漏洞所需的统计信息。
cflowd 支持 Netflow/IPFIX 协议。TCP 客户端程序 cfdcollect 可以用于收集数据并将其转换为 ART++ 格式,ART++ 是 C++ 的类库。除了新的表格格式,cflowd 2.0 还可以显示 packets 和 bits/s,以及 byte 计数器。同时,用户可以使用不同的方式存储流信息和查看数据。
cflowd 具有四大组件:
- cflowdmux:这个程序充当一个或多个 Cisco 路由器的流数据接收器。它将原始数据包写入共享内存,并允许客户端访问原始流数据。包含了一个示例客户机(flowwatch)。
- cflowd:从原始流(由 cflowdmux 收集)获取数据,并创建流量数据的表格摘要(如:矩阵、网络矩阵、端口矩阵、接口矩阵、nexthop 表和协议表)。它还充当 cfdcollect 的表格数据服务器。
- cfdcollect:这是一个从 cflowd 收集数据的中央数据库。它用于定期存档表格数据,为每种表格数据类型生成时间序列数据。存档的数据可以用 ART++ 进行处理。
- utilities:包含一些实用程序,可用于检查运行 cflowd 的主机上的数据。