CentOS8 + ElasticSearch + Kibana + Logstash + ElastiflowによるNetFlowコレクタ環境の構築

# 概要

#環境及びヴァージョン
CentOS 8
ElasticSearch 7.5.2
kibana 7.5.2
Logstash 7.5.2
ElastiFlow 3.4.0

### インストール済グループ
インストール済グループは以下の通りです。

```
# yum grouplist
CentOS-8 - AppStream                                                                 6.8 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                                                      5.4 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                                                    4.3 kB/s | 1.5 kB     00:00
利用可能な環境グループ:
   サーバー (GUI 使用)
   最小限のインストール
   ワークステーション
   仮想化ホスト
   カスタムオペレーティングシステム
インストール済みの環境グループ:
   サーバー
インストール済みのグループ:
   コンテナー管理
   ヘッドレス管理
利用可能なグループ:
   .NET Core 開発
   RPM 開発ツール
   開発ツール
   グラフィカル管理ツール
   レガシーな UNIX 互換性
   ネットワークサーバー
   科学的サポート
   セキュリティーツール
   スマートカードサポート
   システムツール
```

### yum updateの実行
yum updateおよびyum clean allを実行します。

```
# yum update
メタデータの期限切れの最終確認: 0:44:37 時間前の 2020年02月04日 13時35分33秒 に実施しました。
依存関係が解決しました。
（中略）
完了しました!
# yum clean all
22 ファイルが削除されました
```


### OSヴァージョン
yum update後のOSヴァージョンは以下の通りです。

```
# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
```

### selinux
selinuxをpermissiveに設定します。
※恒久設定とするためには再起動が必要です。

```
# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing # ← コメントアウト
SELINUX=permissive # ← 追記
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

# shutdown -r now
（再起動）

# getenforce
Permissive
```

### ファイアウォールへのポリシー追加
firewall-cmdで必要となるポートを開放します

```
ElasticSearchの為の設定
# firewall-cmd --add-port=9200/tcp --zone=public
# firewall-cmd --add-port=9200/tcp --zone=public --permanent

Kibanaの為の設定
# firewall-cmd --add-port=5601/tcp --zone=public
# firewall-cmd --add-port=5601/tcp --zone=public --permanent

Logstashの為の設定
# firewall-cmd --add-port=2055/tcp --zone=public
# firewall-cmd --add-port=2055/tcp --zone=public --permanent
```

### OpenJDKのインストール
OpenJDKをインストールします。

```
# yum install java-1.8.0-openjdk-devel

インストール:
 java-1.8.0-openjdk-devel           x86_64        1:1.8.0.232.b09-2.el8_1                 AppStream        9.8 M
依存関係のインストール:
（中略）
 java-1.8.0-openjdk                 x86_64        1:1.8.0.232.b09-2.el8_1                 AppStream        317 k
 java-1.8.0-openjdk-headless        x86_64        1:1.8.0.232.b09-2.el8_1                 AppStream         33 M
（以降略）
これでよろしいですか? [y/N]: y
（中略）
完了しました!
```

### GPG KEYのインポート
[本家マニュアル](https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html)を参考にGPG KEYをインストールします。

```
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
```

### 各種リポジトリファイルの作成
[本家マニュアル](https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html)を参考にElasticSearch、Kibana、Logstashのリポジトリファイルを作成し、インストールを行います。

```:/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
```

```:/etc/yum.repos.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
```

```:/etc/yum.repos.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 --enablerepo=elasticsearch elasticsearch
yum install --enablerepo=kibana kibana
yum install --enablerepo=logstash logstash
```

### 各種設定変更

ElasticSearchはクラスタの設定を変更しないと起動しないため
/etc/elasticsearch/elasticsearch.yml を以下のように修正します。

```:/etc/elasticsearch/elasticsearch.yml
# --------------------------------- Discovery ----------------------------------
（中略）
#discovery.seed_hosts: ["host1", "host2"]
discovery.type: single-node # ← 追記
```

Kibanaの設定より待ち受けIPアドレスを変更します。
また7からデフォルトで日本語化可能の為設定を変更しておきます。

```:/etc/kibana/kibana.yml
#server.host: "localhost"
server.host: "0.0.0.0" # ← 追記

#i18n.locale: "en"
i18n.locale: "ja-JP" # ← 追記
```



### サービス登録、自動起動及び起動の設定
ElasticSearch、Kibana、Logstashのサービスの登録、自動起動及び起動設定を行います。

```
# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service
# systemctl status elasticsearch.service
```

```
# systemctl daemon-reload
# systemctl enable kibana.service
# systemctl start kibana.service
# systemctl status kibana.service
```

```
# systemctl daemon-reload
# systemctl enable logstash.service
# systemctl start logstash.service
# systemctl status logstash.service
```

systemctl status サービス名 を実行した際正常起動されていることを確認します。

### ElastiFlowのインストール

[こちら](https://qiita.com/ConnieWild/items/83a2c00972934ff3f0e6)のサイトを参考にElastiFlowをインストールします。

```
# /usr/share/logstash/bin/logstash-plugin install logstash-codec-sflow
# /usr/share/logstash/bin/logstash-plugin update
# yum install git
# git clone https://github.com/robcowart/elastiflow.git
# cp -r ./elastiflow/logstash/elastiflow/ /etc/logstash/
# cd /etc/logstash/elastiflow/conf.d
```

使用しない機能を無効化します。

```
# 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
# 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
```

パラメータ設定するファイルをコピーします。

```
# cp -r ./elastiflow/sysctl.d/* /etc/sysctl.d/
# cp -r ./elastiflow/logstash.service.d/ /etc/systemd/system/
```

フローを出力する機器を登録します。

```:/etc/logstash/elastiflow/dictionaries/app_id.srctype.yml
#"192.0.2.1": "cisco_nbar2" # ← コメントアウト
#"192.0.2.2": "fortinet" # ← コメントアウト
"192.168.1.1": "gateway1" # ← 追記
```

logstashにelastiflowの設定を記載します。

```:/etc/logstash/pipelines.yml
- pipeline.id: main
#  path.config: "/etc/logstash/conf.d/*.conf" # ← コメントアウト
  path.config: "/etc/logstash/elastiflow/conf.d/*.conf" # ← 追記
```

logstashを再起動します。

```
# systemctl daemon-reload
# systemctl restart logstash
```

logstashのログを確認し以下のように起動を示すログが表示されていることを確認します。

```:/var/log/logstash/logstash-plain.log
[2020-02-04T16:37:17,295][INFO ][logstash.runner  ] Starting Logstash {"logstash.version"=>"7.5.2"}
```