ElastiFlow試してみる ~インストール~

サーバー

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)

GitHub - robcowart/elastiflow: Network flow analytics (Netflow, sFlow and IPFIX) with the Elastic Stack
Network flow analytics (Netflow, sFlow and IPFIX) with the Elastic Stack - GitHub - robcowart/elastiflow: Network flow a...

上記ページのinstall.mdを見ると必要スペックやバージョンが記載されており、
最新版のV4.0.1を利用するにはELK Stackは7.8+となっていた。
また、V3.x系からV4.0.x系ではデータモデルが大きく変更されたためアップグレードは最初からインストールする必要があるらしい。
当然触ったこともないため問題ないので4.0.x系をインストールすることにする。

要件
実稼働環境では多くのNetFlowによりデータ量も多くなる。
推奨スペックも半端ない…用意できない(自宅環境つよつよの人は除く)

flows/sec(v)CPUsMemoryDisk(30day)ES JVM HeapLS JVM Heap
250432GB512GB12GB4GB
500648GB1TB16GB4GB
1000864GB2TB24GB6GB
15001296GB3TB31GB6GB
https://github.com/robcowart/elastiflow/blob/master/INSTALL.mdより

常識的に考えて無理(自宅ラック勢を除く)
なので低スペック状態から様子見。

インストール手順

環境
・OS:CentOS7(VM)
・CPU:2vCPU(2core)
・Memory:8GB
・Disk:50GB

ELK Stackのインストール

まずはELK Stackのインストール。要件となっているバージョンには注意。
また、ELKの各コンポーネントのバージョンは揃える必要がある。

Installing the Elastic Stack | Elastic Installation and Upgrade Guide [8.12] | Elastic

ドキュメントを確認しつつインストール。

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を酷使すると部屋がファンの音でうるさくなるので嫌だ。

それにしても統計は非常に見やすくなっており、これが無料でできるのだから素晴らしい。

タイトルとURLをコピーしました