Netflow/IPFIX 流量收集与分析
目录
文章目录
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 的主机上的数据。

Netflow/IPFIX 流量收集与分析的更多相关文章
- 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言
基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...
- 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志. kibana ...
- 信息收集->DNS分析->dnsdict6
如何获取域名的IPV4/IPV6地址之dnsdict6的使用 dnsdict6是一个用于获取网站信息的工具.dnsdict6可以扫描网站并显示有多少域或者子域,也可以扫描ipv6/ipv4地址.dns ...
- Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具
Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. mysqlreport是mysql性能监测时最常用的工具,对了解mysql运行状态和配置调整都有很大 ...
- [转]Rapidly detecting large flows, sFlow vs. NetFlow/IPFIX
Figure 1: Low latency software defined networking control loop The articles SDN and delay and Delay ...
- 日志收集以及分析:Splunk
转自:http://blog.163.com/guaiguai_family/blog/static/20078414520132181010189/ 写代码的人都知道日志很重要,机器不多的时候,查看 ...
- Linux下单机部署ELK日志收集、分析环境
一.ELK简介 ELK是elastic 公司旗下三款产品ElasticSearch .Logstash .Kibana的首字母组合,主要用于日志收集.分析与报表展示. ELK Stack包含:Elas ...
- 如何用 Python 和 API 收集与分析网络数据?
摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...
- Linux-某电商网站流量劫持案例分析与思考
[前言] 自腾讯与京东建立了战略合作关系之后,笔者网上购物就首选京东了.某天在家里访问京东首页的时候突然吃惊地发现浏览器突然跳到了第三方网站再回到京东,心里第一个反应就是中木马了. 竟然有这样的事,一 ...
- Linux网络流量监控与分析工具Ntopng
Ntopng工具 Ntopng是一个功能强大的流量监控.端口监控.服务监控管理系统 能够实现高效地监控多台服务器网络 Ntopng功能介绍 Ntop提供了命令行界面和web界面两种工作方式,通过web ...
随机推荐
- [易语言软件开源] [分享源码] 易语言D2D实现彩虹跑马灯
注意使用了D2D1.1,部分win7用户可能用不了(win7以下也用不了) 不是单纯的一个彩虹条,是可以变幻的 其实也可以封装成GDI+的,但是GDI+占用比较大,就没有用 点击下载点击下载
- C++ STL 容器和算法:详解和实例演示
C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序.本文将介绍STL中的一些常用容器和算法. 容器 vector vector是一个动态数组,可以在运行时调整大小 ...
- Go 编程语言详解:用途、特性、与 Python 和 C++ 的比较
什么是Go? Go是一个跨平台.开源的编程语言 Go可用于创建高性能应用程序 Go是一种快速.静态类型.编译型语言,感觉上像动态类型.解释型语言 Go由Robert Griesemer.Rob Pik ...
- python读取ini配置文件-configparser使用方法
我们在操作 ini 配置文件的时候 可以使用 Python 的 configparser 库 具体使用方法如下: from configparser import ConfigParser # 初始化 ...
- IntelliJ IDEA Community 无法启动 Spring Boot 项目的解决方案
菜单中依次选择 Run >Edit Configuration 在弹出窗口中,点击左上角的 +,选择 Maven 在 Name 中自定义一个名称,一般与项目名称相同 在 Run 下方的文本框中输 ...
- CentOS SSH安装和配置
CentOS SSH安装和配置 赞 0 CentOS SSH 安装 配置 OpenSSH SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Worki ...
- 算是不常用的东西,java中的ResultSet转List
import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import j ...
- vscode设置语法错误时在文件名显示报错
- 当服务器间通讯出现No route to host(Host unreachable)
服务器间通讯出现No route to host(Host unreachable) 背景:因为某些原因,主机房服务器集体重启,其中部署的系统也需要重启,负责的系统是五台服务器,两台用来作为应用的应用 ...
- 【笔记】go语言--字符与字符串处理
[笔记]go语言--字符与字符串处理 rune相当于go的char 使用range遍历pos,rune对(遍历出来是不连续的) 使用utf8.RuneCountInString获得字符数量 使用len ...