介绍
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部署
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
# 确认服务已启动。
配置文件示例
version: '3'
services:elastiflow-logstash:image: songxwn/elastiflow-logstash:4.8.12container_name: elastiflow-logstashrestart: 'unless-stopped'network_mode: hostenvironment:# JVM Heap size - this MUST be at least 3GB (4GB preferred)LS_JAVA_OPTS: '-Xms4g -Xmx4g'# ElastiFlow global configurationELASTIFLOW_AGENT_ID: elastiflowELASTIFLOW_GEOIP_CACHE_SIZE: 16384ELASTIFLOW_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'# Name resolution optionELASTIFLOW_RESOLVE_IP2HOST: 'false'ELASTIFLOW_NAMESERVER: '127.0.0.1'ELASTIFLOW_DNS_HIT_CACHE_SIZE: 25000ELASTIFLOW_DNS_HIT_CACHE_TTL: 900ELASTIFLOW_DNS_FAILED_CACHE_SIZE: 75000ELASTIFLOW_DNS_FAILED_CACHE_TTL: 3600ELASTIFLOW_ES_HOST: 'http://127.0.0.1:9200'#ELASTIFLOW_ES_USER: 'elastic'#ELASTIFLOW_ES_PASSWD: 'changeme'ELASTIFLOW_NETFLOW_IPV4_PORT: 2055ELASTIFLOW_NETFLOW_UDP_WORKERS: 2ELASTIFLOW_NETFLOW_UDP_QUEUE_SIZE: 4096ELASTIFLOW_NETFLOW_UDP_RCV_BUFF: 33554432ELASTIFLOW_SFLOW_IPV4_PORT: 6343ELASTIFLOW_SFLOW_UDP_WORKERS: 2ELASTIFLOW_SFLOW_UDP_QUEUE_SIZE: 4096ELASTIFLOW_SFLOW_UDP_RCV_BUFF: 33554432ELASTIFLOW_IPFIX_UDP_IPV4_PORT: 4739ELASTIFLOW_IPFIX_UDP_WORKERS: 2ELASTIFLOW_IPFIX_UDP_QUEUE_SIZE: 4096ELASTIFLOW_IPFIX_UDP_RCV_BUFF: 33554432
-
ELASTIFLOW_ES_HOST 需要修改。
-
ELASTIFLOW_ES_USER 需要修改,如果无认证,则不需要取消注释。
-
ELASTIFLOW_ES_PASSWD 需要修改,如果无认证,则不需要取消注释。
索引模板创建
需要打开Kibana Web,在主菜单-Stack Management -开发工具执行。
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
protocols sflow {polling-interval 20;sample-rate 1000;collector 10.204.32.46;interfaces ge-0/0/0.0;
}
MikroTik ROS 配置IPFIX
/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 自带配置示例
input {udp {port => 2055codec => netflow}
}
Filebeat 配置示例
- module: netflowlog:enabled: truevar:netflow_host: 0.0.0.0netflow_port: 2055
[root@cncs ~]# filebeat modules enable netflow
Enabled netflow
[root@cncs ~]# filebeat modules list
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/