介绍
Netflow v5 / v9 / v10(IPFIX),支持大部分网络厂商及VMware的分布式交换机。
NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。当汇集起来时,它更加易于管理和易读。Netflow由Cisco创造。而IPFIX是Netflow v9的开放标准实现。
同NetFlow一样,sFlow是一种向采集器发送报告的推送技术。所不同的是,NetFlow是一种基于软件的技术,而sFlow则采用内置在硬件中的专用芯片,这种做法消除了路由器或交换机的CPU和内存的负担,但也牺牲了灵活性。
本教程修改了ElasticFlow 4版本,以支持 Elasticsearch 8 ,还更新了Logstash 7到最新版本,Geo IP/AS地址库到最新版本。
已在Elasticsearch 8.13上测试过
单机部署教程:https://songxwn.com/elk/
ELK系列文章:https://songxwn.com/categories/linux/ELK/
注:多谢袖子Seven 大佬提供的Kibana 模板和帮助。
各种Flow 类型
| Flow名称 | 代表厂商 | 主要版本 | 备注 | 
| NetFlow | Cisco | V1、V5、V7、V8、V9 | 应用最广 | 
| sFlow | Foundry、HP、Alcatel、NEC、Extreme等 | V4、V5 | 实时性较强,具备突出的第二~七层信息描述能力。对设备性能开销低。 | 
| NetStream | 华为、华三 | V5、V8、V9 | 与NetFlow较为类似 | 
| IPFIX | IETF标准规范 | RFC 3917 | 以NetFlow V9为蓝本,公共标准协议 | 
| CFlowd | Juniper | V5、V8 | 厂商跟进力度不高 | 
ElasticFlow
ElasticFlow 是基于Logstash 7的修改版本,支持Netflow、IPfix、Sflow,自带模板。但目前已闭源。
注意事项
- Docker网络使用主机模式,占用 2055、6343、4739端口。
- 本文章适用于接入现有的ES 8数据库。
使用Docker-compose部署
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | cd /optgit clone https://github.com/Songxwn/elastiflow.git
 # 下载配置文件
 cd /opt/elastiflow
 vim docker-compose.yml
 # 修改配置文件,更改ES地址,账号、密码。
 docker-compose pull
 # 加载镜像
 docker-compose up -d
 # 启动镜像,静等几分钟。
 ss -an | grep 2055
 ss -an | grep 6343
 ss -an | grep 4739
 # 确认服务已启动。
 
 | 
配置文件示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 
 | version: '3'services:
 elastiflow-logstash:
 image: songxwn/elastiflow-logstash:4.8.12
 container_name: elastiflow-logstash
 restart: 'unless-stopped'
 network_mode: host
 environment:
 
 LS_JAVA_OPTS: '-Xms4g -Xmx4g'
 
 ELASTIFLOW_AGENT_ID: elastiflow
 ELASTIFLOW_GEOIP_CACHE_SIZE: 16384
 ELASTIFLOW_GEOIP_LOOKUP: 'true'
 ELASTIFLOW_ASN_LOOKUP: 'true'
 ELASTIFLOW_OUI_LOOKUP: 'false'
 ELASTIFLOW_POPULATE_LOGS: 'true'
 ELASTIFLOW_KEEP_ORIG_DATA: 'true'
 ELASTIFLOW_DEFAULT_APPID_SRCTYPE: '__UNKNOWN'
 
 ELASTIFLOW_RESOLVE_IP2HOST: 'false'
 ELASTIFLOW_NAMESERVER: '127.0.0.1'
 ELASTIFLOW_DNS_HIT_CACHE_SIZE: 25000
 ELASTIFLOW_DNS_HIT_CACHE_TTL: 900
 ELASTIFLOW_DNS_FAILED_CACHE_SIZE: 75000
 ELASTIFLOW_DNS_FAILED_CACHE_TTL: 3600
 ELASTIFLOW_ES_HOST: 'http://127.0.0.1:9200'
 
 
 ELASTIFLOW_NETFLOW_IPV4_PORT: 2055
 ELASTIFLOW_NETFLOW_UDP_WORKERS: 2
 ELASTIFLOW_NETFLOW_UDP_QUEUE_SIZE: 4096
 ELASTIFLOW_NETFLOW_UDP_RCV_BUFF: 33554432
 ELASTIFLOW_SFLOW_IPV4_PORT: 6343
 ELASTIFLOW_SFLOW_UDP_WORKERS: 2
 ELASTIFLOW_SFLOW_UDP_QUEUE_SIZE: 4096
 ELASTIFLOW_SFLOW_UDP_RCV_BUFF: 33554432
 ELASTIFLOW_IPFIX_UDP_IPV4_PORT: 4739
 ELASTIFLOW_IPFIX_UDP_WORKERS: 2
 ELASTIFLOW_IPFIX_UDP_QUEUE_SIZE: 4096
 ELASTIFLOW_IPFIX_UDP_RCV_BUFF: 33554432
 
 | 
- ELASTIFLOW_ES_HOST 需要修改。
- ELASTIFLOW_ES_USER 需要修改,如果无认证,则不需要取消注释。
- ELASTIFLOW_ES_PASSWD 需要修改,如果无认证,则不需要取消注释。
索引模板创建
需要打开Kibana Web,在主菜单-Stack Management -开发工具执行。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | PUT _index_template/template_{
 "template": {
 "mappings": {
 "properties": {
 "client": {
 "type": "object",
 "properties": {
 "geo": {
 "type": "object",
 "properties": {
 "location": {
 "type": "geo_point"
 }
 }
 }
 }
 },
 "server": {
 "type": "object",
 "properties": {
 "geo": {
 "type": "object",
 "properties": {
 "location": {
 "type": "geo_point"
 }
 }
 }
 }
 }
 }
 }
 },
 "index_patterns": [
 "elastiflow-*"
 ],
 "allow_auto_create": true
 }
 
 | 

Kibana 模板导入
模板下载:https://songxwn.com/file/elastiflow4.kibana.8.x.ndjson
需要打开Kibana Web,在主菜单-Stack Management -已保存对象导入。

交换机Sflow配置实例
Juniper
| 12
 3
 4
 5
 6
 
 | protocols sflow {polling-interval 20;
 sample-rate 1000;
 collector 10.204.32.46;
 interfaces ge-0/0/0.0;
 }
 
 | 
MikroTik ROS 配置IPFIX
| 12
 3
 4
 
 | /ip traffic-flowset cache-entries=1M enabled=yes interfaces=ether2
 /ip traffic-flow target
 add dst-address=2.2.2.2 src-address=1.1.1.1 v9-template-refresh=15 version=ipfix
 
 | 
ELK 自带插件-可不看
Logstash 自带配置示例
| 12
 3
 4
 5
 6
 
 | input {udp {
 port => 2055
 codec => netflow
 }
 }
 
 | 
Filebeat 配置示例
| 12
 3
 4
 5
 6
 
 | - module: netflowlog:
 enabled: true
 var:
 netflow_host: 0.0.0.0
 netflow_port: 2055
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 
 | [root@cncs ~]Enabled netflow
 [root@cncs ~]
 Enabled:
 netflow
 Disabled:
 activemq
 ......
 
 | 
参考
https://www.elastic.co/guide/en/logstash/current/plugins-codecs-netflow.html
https://www.elastic.co/guide/en/beats/filebeat/8.7/filebeat-module-netflow.html
https://www.eflytop.com/post/elk-netflow/