0x01 前言
我喜欢使用NetFlow和sFlow对一些网络设备的流量进行采样分析和监控,以前常用ManageEngine NetFlow Analyzer,过去一段时间使用VMware vRealize Network Insight。
但很不幸,他们都是商业软件,在使用上要考量很多因素,所以我决定转而使用发展神速的Elastic套件。
0x02 准备
在继续之前需要了解NetFlow是什么,它来自思科,可以在思科的网络设备中见到它,诸如H3C或华为等产品则是sFlow。笼统来说,他们的功能是一样的:都是在设定的时间间隔对网络流量进行取样并发送至收集器。
在这篇文章里的收集器由filebeat实现,然后输出至elasticsearch,最终交由kibana呈现可视化界面和实现告警等功能。而数据则来自测试的虚拟机,分别有一台Windows和一台centos,另外还有我的pfsense,大致架构如下:
其中一些组件的安装配置在本文不再赘述,有需要的朋友可以自行搜索本站。Exporter我使用flowtraq的二进制安装包,可以尝试使用以下地址下载:
正如上图中所描述的,这需要消耗一些CPU和内存资源,而且只支持NetFlow v5和v9的Collector,这一般来说是没问题的,还需要注意页面底部的License Agreement,必要的时候可以使用softflowd作为exporter。
另外,Windows操作系统还需要安装winpcap:
最重要的,需要有一个elasticsearch集群或一个实例,一个kibana实例,并且它们都工作正常。另外需要准备一台虚拟机用于安装各种beat,当然,我们也可以使用docker,相关文档地址如下:
0x03 部署
0x03.1 filebeat
部署及其简单,连配置文件都不需要,只需要准备elasticsearch地址和kibana地址即可,如果开启了x-pack的认证功能,还需要准备这些信息。以下是相关文档:
- module: netflow log: enabled: true var: netflow_host: 0.0.0.0 netflow_port: 2055
配置文件也是简单得不得了,只是启用netflow模块,然后配置监听的IP和端口。还有一些配置项需要根据实际情况进行调整,具体可参考上述的链接。使用以下命令即可完成filebeat的安装:
[root@filebeat-netflow ~]# yum install filebeat -y
然后来到以下文件夹,可以发现内置的诸多模块:
# 进入模块配置文件目录 [root@filebeat-netflow ~]# cd /etc/filebeat/modules.d/ # 列出所有配置文件 [root@filebeat-netflow modules.d]# ll -h 总用量 160K -rw-r--r-- 1 root root 483 5月 12 08:53 activemq.yml.disabled -rw-r--r-- 1 root root 475 5月 12 08:53 apache.yml.disabled -rw-r--r-- 1 root root 280 5月 12 08:53 auditd.yml.disabled -rw-r--r-- 1 root root 6.2K 5月 12 08:53 aws.yml.disabled -rw-r--r-- 1 root root 1.4K 5月 12 08:53 azure.yml.disabled -rw-r--r-- 1 root root 200 5月 12 08:53 cef.yml.disabled -rw-r--r-- 1 root root 2.0K 5月 12 08:53 cisco.yml.disabled -rw-r--r-- 1 root root 318 5月 12 08:53 coredns.yml.disabled -rw-r--r-- 1 root root 964 5月 12 08:53 elasticsearch.yml.disabled -rw-r--r-- 1 root root 327 5月 12 08:53 envoyproxy.yml.disabled -rw-r--r-- 1 root root 2.0K 5月 12 08:53 googlecloud.yml.disabled -rw-r--r-- 1 root root 376 5月 12 08:53 haproxy.yml.disabled -rw-r--r-- 1 root root 295 5月 12 08:53 ibmmq.yml.disabled -rw-r--r-- 1 root root 651 5月 12 08:53 icinga.yml.disabled -rw-r--r-- 1 root root 470 5月 12 08:53 iis.yml.disabled -rw-r--r-- 1 root root 366 5月 12 08:53 iptables.yml.disabled -rw-r--r-- 1 root root 398 5月 12 08:53 kafka.yml.disabled -rw-r--r-- 1 root root 293 5月 12 08:53 kibana.yml.disabled -rw-r--r-- 1 root root 471 5月 12 08:53 logstash.yml.disabled -rw-r--r-- 1 root root 422 5月 12 08:53 misp.yml.disabled -rw-r--r-- 1 root root 296 5月 12 08:53 mongodb.yml.disabled -rw-r--r-- 1 root root 311 5月 12 08:53 mssql.yml.disabled -rw-r--r-- 1 root root 471 5月 12 08:53 mysql.yml.disabled -rw-r--r-- 1 root root 287 5月 12 08:53 nats.yml.disabled -rw-r--r-- 1 root root 212 5月 17 14:07 netflow.yml -rw-r--r-- 1 root root 214 5月 12 08:53 netflow.yml.disabled -rw-r--r-- 1 root root 783 5月 12 08:53 nginx.yml.disabled -rw-r--r-- 1 root root 1.5K 5月 12 08:53 o365.yml.disabled -rw-r--r-- 1 root root 340 5月 12 08:53 okta.yml.disabled -rw-r--r-- 1 root root 495 5月 12 08:53 osquery.yml.disabled -rw-r--r-- 1 root root 356 5月 12 08:53 panw.yml.disabled -rw-r--r-- 1 root root 305 5月 12 08:53 postgresql.yml.disabled -rw-r--r-- 1 root root 343 5月 12 08:53 rabbitmq.yml.disabled -rw-r--r-- 1 root root 566 5月 12 08:53 redis.yml.disabled -rw-r--r-- 1 root root 266 5月 12 08:53 santa.yml.disabled -rw-r--r-- 1 root root 299 5月 12 08:53 suricata.yml.disabled -rw-r--r-- 1 root root 477 5月 12 08:53 system.yml.disabled -rw-r--r-- 1 root root 302 5月 12 08:53 traefik.yml.disabled -rw-r--r-- 1 root root 1.3K 5月 12 08:53 zeek.yml.disabled
如果需要启用某个模块,只需要将”.disable”后缀移除即可,比如:netflow.yml,而这个文件的内容正如本章开头那样,无需任何修改。
紧接着回到上一级目录,编辑filebeat.yml:
#============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "kibana.dev.enginx.net:443" protocol: "https" # Kibana Space ID # ID of the Kibana Space into which the dashboards should be loaded. By default, # the Default Space will be used. #space.id: #================================ Outputs ===================================== # Configure what output to use when sending the data collected by the beat. #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["es6-node1.t.com:9200", "es6-node2.t.com:9200", "es6-node3.t.com:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" #username: "elastic" #password: "changeme"
请根据实际情况修改以上代码中高亮的部分,最后启动filebeat即可:
systemctl enable filebeat && systemctl restart filebeat.service
如果一切正常,那么可以发现filebeat正监听着UDP 2055端口:
[root@filebeat-netflow filebeat]# netstat -anp | grep 2055 udp6 0 0 :::2055 :::* 13116/filebeat
0x03.2 kibana
filebeat其实内置着一些dashboard配置,如果想偷懒,可以导入预设的配置。在这里也建议使用预设的配置,可以以此为基础进行扩展。首先确认kibana运行正常并且已在上一步中正确填写kibana的IP地址、端口与协议,然后在filebeat机器中执行以下命令:
[root@filebeat-netflow ~]# /usr/bin/filebeat setup
稍等片刻,如果一切正常,返回的信息如下:
[root@filebeat-netflow filebeat]# filebeat setup Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html Loaded machine learning job configurations Loaded Ingest pipelines
最后来到kibana的仪表盘可以发现多了许多条目,搜索后可以发现诸多与netflow有关的仪表盘:
使用开发工具查询模版可以发现有一个与filebeat相关的模版:
感兴趣的朋友可以使用以下命令查看:
GET _template/filebeat-7.7.0
此时来到SIEM页面应该是无数据的:
0x03.3 pfSense
在一个优质网络的环境中安装softflowd:
然后进入配置界面:
选择需要采样的interface、配置采集器的IP、端口、采样率等信息后单击页面底部的Save即可保存。稍等十几秒后即可回到kibana查看分析结果:
0x03.4 Centos
首先将二进制文件上传到系统中,然后将其赋予可执行权限并放置在适当的位置:
chmod +x flowexport_linux_x86_64.bin \ && cp flowexport_linux_x86_64.bin /usr/local/sbin/flowexport
然后查看使用手册:
[root@b6b102 ~]# flowexport -h Usage: flowexport [OPTIONS]... Monitor traffic on interface and export NetFlow v5/v9 datagrams. -i IFACE capture interface IFACE for monitoring (default: tries best match) -nf5 COLCTR [prt] export NetFlow v5 datagrams to COLLECTOR host [optional port] -nf9 COLCTR [prt] export NetFlow v9 datagrams to COLLECTOR host [optional port] up to 16 total collector destinations may be specified. -t COUNT create COUNT entries in the conntrack table (default: 8192) -T THREADS spawn THREAD threads, each with COUNT/THREADS conntrack entries -s scan and display all interfaces and addresses on this host (exists) -d don't daemonize (REQUIRED for Windows command-line use!) -c FILE.conf use specified configuration file -I FILE.conf use ifindex file (format: "CIDR ifindex", not found defaults to ifindex=1) -f FILE.pcap use pcap file instead of interface (Unix&Mac only!) -p don't put the sniff interface in promiscuous mode -a minimum age in seconds for a flow to be exportered (default: 30s) -e maximum number of seconds to wait before exporting anything (default: 120s) -FTHP enable FlowTraq high precision extensions (only with NF9!) -guid XXXX-XX... tag flows with GUID/CID (only for NF9!) -h this help Version: 1.7 (build 871) This software uses libpcap 1.0.0 (Unix) or NetworkManager 3.2 (Windows) for packet capture. (Note: NetworkManager 3.2 MUST be installed before running on Windows!) Copyright (c) 2004-2017 by FlowTraq, Inc. All rights reserved.
如果不知道系统中的网卡名字,可以使用以下命令列出:
[root@b6b102 ~]# flowexport -s Interfaces found (ifName, ifIndex, addresses): lo (1) 127.0.0.1 ::1 ens192 (2) 10.1.3.54 fe80::250:56ff:feb6:b102 docker0 (3) 172.17.0.1 fe80::42:88ff:fe5c:4989
可以使用 -i 指定网卡,也可以让它自行选择。准备好后执行命令即可:
[root@b6b102 ~]# flowexport -i ens192 -nf9 10.1.1.20 2055 [root@b6b102 ~]# 05/17/2020 18:38:01.253096 Using interface for sniffing: ens192 05/17/2020 18:38:01.297530 Exporting to 10.1.1.20 2055/UDP (slot 0)
默认以守护模式在后台运行,可以使用 -d 参数禁用守护模式。最后检查运行情况:
[root@b6b102 ~]# ps -aux | grep flow root 32062 1.3 2.6 103728 55144 ? Ssl 18:38 0:00 flowexport -i ens192 -nf9 10.1.1.20 2055
如果有必要,还可以将它放在自动启动文件中:
echo "flowexport -i ens192 -nf9 10.1.1.20 2055" >> /etc/rc.local \ && chmod +x /etc/rc.d/rc.local
0x03.5 windows
windows的安装较为简单,可以使用CMD安装,也可以使用GUI安装。在安装FlowExport前需要安装WinPcap,两者都安装后还需要重启系统:
FlowExport的配置文件在以下文件夹内:
C:\Program Files (x86)\ProQueSys\Exporter
必要的时候可以进行修改,最后到任务管理器内确认服务处于正常运行状态即可:
0x04 结语
至此,所有安装配置的工作均已完成,到这里已经迈出了第一步,接下来要建立适用于自身情况的仪表盘和告警项。