Elastic Stack環境構築

製品紹介

本検証では、Elastic社のログ可視化製品であるElastic Stackを使用します。
Elastic Stackは、同社の以下4製品を組み合わせた呼び方です。
Beats:Java不要のログ転送エージェント(パケット、インフラメトリック、ファイル、Windowsログのエージェントが存在)
Logstash:ログのフィルタ・整形および転送ツール
ElasticSearch:独自DBへのログ格納と全文検索ツール
Kibana:データのグラフィック化ツール

 

公式ホームページ

https://www.elastic.co/jp/

 

検証内容

上記4製品をインストールします。
クライアントからログを収集し、整形して可視化する方法を検証します。

 

構成

仮想Webサーバ2台
ログ管理サーバ
IP:192.168.91.133
コンポーネント:Logstash、ElasticSearch、Kibana

クライアント
IP:192.168.91.134
コンポーネント:Beats(filebeat)、Apache、MariaDB

 

検証シナリオ

SSHのみでアクセス可能なDBサーバに対して、不正アクセスされた可能性が浮上し、調査を行う必要がある。
Elastic Stackで一元管理しているログを基に、いつ、どこから、どのユーザで、何をされたかを割り出す。

 

事前作業

SELinux一時無効化
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive

恒久的に無効化する場合は以下を修正して保存します。
vi /etc/selinux/config
~
SELINUX=disable
~
入力が完了したらwqで保存します。
javaバージョン確認
# java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)
バージョン8未満の場合は8以降へのバージョンアップが必要です。
minimal install PKGには上記の通り最初から8が入っています。

もし入っていない場合は下記コマンドでインストールしてください。
# yum -y install java-1.8.0-openjdk-devel.x86_64
beatsが稼働するクライアントにはJava不要です。
chronyのインストール
解説ページ参照
時刻同期のため、ログ管理サーバとクライアント両方にインストールします。

 

導入手順

2016/11/29現在の最新バージョン
ElasticSearch:5.0.2
Kibana:5.0.2
filebeat:5.0.2
Logstash:5.0.2
公式インストールマニュアル
今回はホームページに記載されているyumインストール手順で導入しました。

 

目次

1.ログ管理サーバの構築

 ElasticSearchのインストール

 Kibanaのインストール

 Logstashのインストール

2.クライアントサーバの構築

 filebeatのインストール

 


1.ログ管理サーバの構築

ElasticSearchのインストール

公式マニュアル

リポジトリの追加
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/elastic.repo
[elasticsearch-5.x] name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
入力が完了したらwqで保存します。

インストール
# yum install elasticsearch

インストール確認
# rpm -qa |grep elasticsearch
elasticsearch-5.0.2-1.noarch

サービス自動起動設定
# systemctl daemon-reload
# systemctl enable elasticsearch.service

Configファイルの修正
# cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.org
# vi /etc/elasticsearch/elasticsearch.yml
~
# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true  コメントイン
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
network.host: 192.168.91.133 (ログ管理サーバのIPを入力)
~
http.port: 9200  コメントイン
~
入力が完了したらwqで保存します。

JVM Heap Sizeの設定
# vi /etc/elasticsearch/jvm.options
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms2g  必要に応じてHeapの最小値を変更(初期値は2GB)
-Xmx2g  必要に応じてHeapの最大値を変更(初期値は2GB)

サービス起動
# systemctl start elasticsearch.service
# systemctl status elasticsearch.service
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running)

 

 

Kibanaのインストール

公式マニュアル

リポジトリの追加
#vi /etc/yum.repos.d/kibana.repo
[kibana-5.x] name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
入力が完了したらwqで保存します。

yumインストール
# yum install kibana

インストール確認
# rpm -qa |grep kibana
kibana-5.0.2-1.x86_64

自動起動設定
# systemctl daemon-reload
# systemctl enable kibana.service

Configファイルの修正
# cp -p /etc/kibana/kibana.yml /etc/kibana/kibana.yml.org
# vi /etc/kibana/kibana.yml
~
server.host: "192.168.91.133" (ログ管理サーバのIPを入力)
~
elasticsearch.url: "http://192.168.91.133:9200" ログ管理サーバのIPを入力
~
入力が完了したらwqで保存します。

サービス起動
# systemctl start kibana.service
# systemctl status kibana.service
● kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: disabled)
Active: active (running)

Logstashのインストール

公式マニュアル

リポジトリ追加
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/logstash.repo
[logstash-5.x] name=Elastic repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/
yum gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
入力が完了したらwqで保存します。

インストール
# yum install logstash

インストール確認
# rpm -qa |grep logstash
logstash-5.0.2-1.noarch

サービス自動起動設定
# systemctl start logstash.service
Configファイルの修正
# vi /etc/logstash/conf.d/beat.conf
input {
beats {
port => 5044
}
}

output {
elasticsearch {
hosts => "192.168.91.133:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
ファイル名は任意の名前を入力してください。
入力が完了したらwqで保存します。

※/etc/logstash/conf.d/直下のファイルは以下の設定により、自動的にすべてロードされます。
/etc/logstash/logstash.yml内のpath.config: /etc/logstash/conf.d
ファイルのバックアップを取得する場合には、同一ディレクトリに配置しないよう注意してください。

サービス起動
# systemctl start logstash.service
# systemctl status logstash.service
● logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
Active: active (running)

 

 

2.クライアントサーバの構築

filebeatのインストール

公式マニュアル

リポジトリの追加
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
# vi /etc/yum.repos.d/elastic.repo
[beat-5.x] name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
入力が完了したらwqで保存します。

インストール
#yum install filebeat

インストール確認
# rpm -qa |grep filebeat
filebeat-5.0.2-1.x86_64

サービス自動起動設定
# systemctl enable filebeat

Configファイルの修正
# cp -p /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.org
# vi /etc/filebeat/filebeat.yml
~
filebeat.prospectors:
~
- input_type: log
- /var/log/secure (sshdのログを転送対象として追記)
- /var/lib/mysql/queries.log (MariaDBのクエリログを転送対象として追記)
- /var/lib/mysql/server_audit.log 
(MariaDBのaudit pluginログを転送対象として追記)
~
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch: (コメントアウト)
# Array of hosts to connect to.
#hosts: ["localhost:9200"] (コメントアウト)
#----------------------------- Logstash output --------------------------------
output.logstash: (コメントイン)
~
#hosts: ["localhost:5044"] hosts: ["192.168.91.133:5044"] (ログ管理サーバのIPを追記)
入力が完了したらwqで保存します。

サービス起動
# systemctl start filebeat
# systemctl status filebeat
● filebeat.service - filebeat
Loaded: loaded (/usr/lib/systemd/system/filebeat.service; enabled; vendor preset: disabled)
Active: active (running)
~
ログ管理サーバとの通信確認コマンド実行
# curl 192.168.91.133:9200/_cat/indices

以下のような出力があれば転送は成功しています。
yellow open .kibana               D_LguS-fQWqNLunmK6rRDw 1 1      6 1  48.4kb  48.4kb
yellow open filebeat-2016.11.29   UiriUrUGTQK1NCWywmUs9w 5 1     53 0 186.1kb 186.1kb

該当出力がない場合や、Connection Refusedによるエラーの場合は設定や通信制御を見直してください。

確認対象ログ
クライアント
filebeatログ:/var/log/filebeat/filebeat
ログ管理サーバ
logstash:/var/log/logstash/logstash-plain.log

以上でクライアントサーバの構築は完了です。
ElasticSerch検証ページへ