本文最后更新于 2024年5月2日 中午
介绍
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-compose部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cd /opt git 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 # 确认服务已启动。
|
配置文件示例
1 2 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
|
索引模板创建
需要打开Kibana Web,在主菜单-Stack Management -开发工具执行。
1 2 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
1 2 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
1 2 3 4
| /ip traffic-flow set 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 自带配置示例
1 2 3 4 5 6
| input { udp { port => 2055 codec => netflow } }
|
Filebeat 配置示例
1 2 3 4 5 6
| - module: netflow log: enabled: true var: netflow_host: 0.0.0.0 netflow_port: 2055
|
1 2 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/