ElastiFlow試してみる
ElastiFlowとは
ElastiFlowとはルーター等のFlow情報を集めたものを可視化するツールの一つ。
可視化するツールは様々で無料のものから有料のものまで存在する。
ElastiFlowは、ELK Stackと呼ばれる3つのOSSで構成されており無料で使用可能。
具体的なOSSは Elasticsearch, Logstash, Kibana で構成されている。
それぞれの動作としては、
Logstash
Netflowを受け取り、整形してElasticsearchに渡す
Elasticsearch
受け取ったデータをJSONで保存
Kibana
グラフ化
ElastiFlowは現在も更新が続けられており、現時点ではV4.0.1(2021/02/08)
上記ページのinstall.mdを見ると必要スペックやバージョンが記載されており、
最新版のV4.0.1を利用するにはELK Stackは7.8+となっていた。
また、V3.x系からV4.0.x系ではデータモデルが大きく変更されたためアップグレードは最初からインストールする必要があるらしい。
当然触ったこともないため問題ないので4.0.x系をインストールすることにする。
要件
実稼働環境では多くのNetFlowによりデータ量も多くなる。
推奨スペックも半端ない…用意できない(自宅環境つよつよの人は除く)
flows/sec | (v)CPUs | Memory | Disk(30day) | ES JVM Heap | LS JVM Heap |
---|---|---|---|---|---|
250 | 4 | 32GB | 512GB | 12GB | 4GB |
500 | 6 | 48GB | 1TB | 16GB | 4GB |
1000 | 8 | 64GB | 2TB | 24GB | 6GB |
1500 | 12 | 96GB | 3TB | 31GB | 6GB |
常識的に考えて無理(自宅ラック勢を除く)
なので低スペック状態から様子見。
インストール手順
環境
・OS:CentOS7(VM)
・CPU:2vCPU(2core)
・Memory:8GB
・Disk:50GB
ELK Stackのインストール
まずはELK Stackのインストール。要件となっているバージョンには注意。
また、ELKの各コンポーネントのバージョンは揃える必要がある。
ドキュメントを確認しつつインストール。
Elasticsearchのインストール
インストールにはリポジトリからインストールする方法とRPMで手動インストールする方法がある。
今回はリポジトリを追加する方法。
まずはElasticsearchのGPG Keyをインポートする。
#rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
続いて、リポジトリを追加する。
#vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
インストール
#yum install --enablerepo=elasticsearch elasticsearch
=======================================================
elasticsearch x86_64 7.10.2-1 elasticsearch
=======================================================
コンフィグの一部変更
#vim /etc/elasticserach/elasticsearch.yml
+ network.host: 0.0.0.0
+ discovery.type: single-node
+ indices.query.bool.max_clause_count: 8192
+ search.max_buckets: 250000
Kibanaのインストール
リポジトリの追加
#vim /etc/yum.repo.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
インストール
#yum install kibana
=======================================================
kibana x86_64 7.10.2-1 kibana-7.x
=======================================================
コンフィグの一部変更
#vim /etc/kibana/kibana.yml
+ server.host: "0.0.0.0"
Logstashのインストール
リポジトリの追加
#vim /etc/yum.repo.d/logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
インストール
#yum install logstash
=======================================================
logstash x86_64 1:7.10.2-1 logstash-7.x
=======================================================
ファイアウォールの設定
#firewall-cmd --add-port=5601/tcp --permanent
#firewall-cmd --add-port=2055/udp --permanent
#firewall-cmd --reload
全て起動
#systemctl enable kibana logstash staticsearch --now
ここまで来ればブラウザから「http://<IP>:5601」でアクセスが可能。
自分の環境ではこんな画面
ElastiFlowのインストール
INSTALL.mdに沿ってすすめる。
まずはwgetで持ってくる。(このときmasterリポジトリではなく、リリースから持ってくる)
#cd /home/user
#wget https://github.com/robcowart/elastiflow/archive/v4.0.1.tar.gz
#tar -xvzf v4.0.1.tar.gz
#cd elastiflow-4.0.1
UDPスループット向上のためのチューニング設定を入れる。
#cp sysctl.d/87-elastiflow.conf /etc/sysctl.d
次にLogstashのプライオリティを変更する。
#vim /etc/systemd/system/logstash.service
- Nice=19
+ Nice=0
次にJVM Heap sizeを変更する。
#vim /etc/logstash/jvm.options
- -Xms1g
- -Xmx1g
+ -Xms4g
+ -Xmx4g
次にLogstashのプラグインを追加・アップデートする。
// インストールされている場所を確認する必要がある。
// /etc/systemd/system/logstash.serviceにバイナリの場所が書いてある。
#/usr/share/logstash/bin/logstash-plugin install logstash-codec-sflow
#/usr/share/logstash/bin/logstash-plugin update logstash-codec-netflow
#/usr/share/logstash/bin/logstash-plugin update logstash-input-udp
#/usr/share/logstash/bin/logstash-plugin update logstash-input-tcp
#/usr/share/logstash/bin/logstash-plugin update logstash-filter-dns
#/usr/share/logstash/bin/logstash-plugin update logstash-filter-geoip
#/usr/share/logstash/bin/logstash-plugin update logstash-filter-translate
logstash/elastiflowをコピーする。
#cp -R logstash/elastiflow /etc/logstash/
elastiflow.confをコピーする。
#cp -R logstash.service.d /etc/systemd/system/
#systemctl daemon-reload
pipelines.ymlを編集する。
#vim /etc/logstash/pipelines.yml
+ - pipeline.id: elastiflow
+ path.config: "/etc/logstash/elastiflow/conf.d/*.conf"
必要のないものを無効化
#cd /etc/logstash/elastiflow/conf.d/
#mv 20_filter_30_ipfix.logstash.conf 20_filter_30_ipfix.logstash.conf.disabled
#mv 20_filter_40_sflow.logstash.conf 20_filter_40_sflow.logstash.conf.disabled
#mv 10_input_ipfix_ipv4.logstash.conf 10_input_ipfix_ipv4.logstash.conf.disabled
#mv 10_input_sflow_ipv4.logstash.conf 10_input_sflow_ipv4.logstash.conf.disabled
すべて再起動
#systemctl daemon-reload
#systemctl restart logstash kibana elasticsearch
ブラウザからアクセス
http://ip:5601にアクセス。
Stack ObjectからImport Dataを選択
GitからDLしたディレクトリの中のndjsonを読み込む
(elastiflow/kibana/elastiflow.kibana.7.8.x.ndjson)
たくさん読み込まれる。
これでグラフ化ができるはずだが、まだNetflowの設定を行っていないため、
データが存在しない。次はCiscoのルータにNetflow設定を行う。
Cisco NetFlow設定
ciscoにNetFlowの設定を行う
(config)#int g8
(config-if)#ip flow ingress
(config-if)#ip flow egress
(config-if)#exit
(config)# ip flow-export version 9
(config)# ip flow-export destination <ip> 2055 //2055はUDPポート
(config)# ip flow-export source loopback 0 //送信元アドレス
可視化されたデータを見てみる。
可視化されたデータ:Overview
右下のBruteforceって…? (゚д゚)
とりあえず可視化させるところまでは成功した。
あとはチューニング関連。
正直スペック低いPCを酷使すると部屋がファンの音でうるさくなるので嫌だ。
それにしても統計は非常に見やすくなっており、これが無料でできるのだから素晴らしい。