Help us understand the problem. What is going on with this article?

ntopng + ELK + raspberry pi3 でなんちゃってSIEM環境をつくる

More than 1 year has passed since last update.

用意するもの

1.raspberry pi3(Raspbian環境) Amazonでこれにしました
2.USB-LAN変換アダプタ(キャプチャ用NICとして利用)

構成図

適当な構成図ですみません・・・。
L2には色々PCやらWifiAPやらがつながっています。
image.png

環境構築

Raspberry Pi3設定

SSHでログインできるように、管理用固定IPを付与してください。
USB-LAN変換アダプタは接続すれば自動的に認識するはずなので、そのままでOK

nDPIインストール

nDPIをインストールする前に、ntopngをインストールしようとすると下記メッセージが表示されてしまうので、先にnDPIをインストールします。

Please do cd ..; git clone https://github.com/ntop/nDPI.git; cd nDPI; ./autogen.sh; make; cd ../ntopng
and try again

nDPI

git clone https://github.com/ntop/nDPI.git
./autogen.sh
PCAPない!
apt-get install libpcap-dev
Permission Deniedのエラーがでる
chmod 755 configure
./autogen.sh
./configure
make
cd tests/
./do.sh
OK表示がずらずらと

ntopngインストール

apt-get install build-essential git bison flex libxml2-dev libpcap-dev libtool libtool-bin rrdtool librrd-dev autoconf automake autogen redis-server wget libsqlite3-dev libhiredis-dev libgeoip-dev libcurl4-openssl-dev libpango1.0-dev libcairo2-dev libnetfilter-queue-dev zlib1g-dev libssl-dev libcap-dev libnetfilter-conntrack-dev
apt-get install libpng-dev libzmq5-dev default-libmysqlclient-dev
git clone https://github.com/ntop/ntopng.git
cd ntopng
./autogen.sh
./configure
make geoip
もう一度
./configure
make
make install

javaインストール

$ sudo apt-get install oracle-java8-jdk
$ sudo apt-get update

elasticsearchインストール

リポジトリ追加で6.xをインストールしようとしたのですが、CPUアーキテクチャがARMのため
うまくインストールできませんでした。
そのため、5.x系で構築しています。

$ cd /usr/local/src
$ sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.deb
$ sudo dpkg -i elasticsearch-5.5.2.deb

標準だとメモリが、1G?2G?設定になっているため起動できません。
(ラズパイメモリ1GBしかないので・・・)
そのため、jvm.optionsを編集します。

$ sudo vi /etc/elasticsearch/jvm.options
下記のように変更します。
-Xms256M
-Xmx256M

elasticsearch起動

$ sudo service elasticsearch start

kibanaインストール

$ sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.2-linux-x86.tar.gz
$ sudo tar –xzf kibana-5.5.2-linux-x86.tar.gz
$ sudo mkdir /opt/kibana/
$ sudo mv kibana-5.5.2-linux-x86/ /opt/kibana/
$ sudo wget https://nodejs.org/download/release/v6.10.2/node-v6.10.2-linux-armv6l.tar.gz
$ tar -xzf node-v6.10.2-linux-armv6l.tar.gz
$ sudo cp node-v6.10.2-linux-armv6l/bin/node /usr/local/bin/node
$ sudo cp node-v6.10.2-linux-armv6l/bin/npm /usr/local/bin/npm
$ sudo mv /opt/kibana/node/bin/node /opt/kibana/node/bin/node.orig
$ sudo mv /opt/kibana/node/bin/npm /opt/kibana/node/bin/npm.orig 
$ sudo ln -s /usr/local/bin/node /opt/kibana/node/bin/node 
$ sudo ln -s /usr/local/bin/npm /opt/kibana/node/bin/npm
$ sudo vi /opt/kibana/config/kibana.yml

リモートからkibanaにアクセス可能にするため、kibana.ymlを変更します。
今回はどこからでもアクセス可能としています。

$sudo vi /opt/kibana/config/kibana.
server.host: "0.0.0.0"

kibana起動ファイル作成

$ sudo vi /etc/systemd/system/kibana.service
下記内容で保存します。
[Unit]
Description=Kibana

[Service]
ExecStart=/opt/kibana/bin/kibana
StandardOutput=null

[Install]
WantedBy=multi-user.target

kibana起動

$ sudo service kibana start
$ sudo service kibana status

logstashインストール

$ sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.2.deb
$ sudo dpkg -i logstash-5.5.2.deb
$ sudo apt-get install ant
$ sudo git clone https://github.com/jnr/jffi.git
$ cd jffi
$ sudo ant jar
$ cp build/jni/libjffi-1.2.so /usr/share/logstash/vendor/jruby/lib/jni/arm-Linux
(when the .so file is not generated, delete the complete jffi folder and reinstall again)
$ cd /usr/share/logstash/vendor/jruby/lib
$ sudo zip -g jruby-complete-1.7.11.jar jni/arm-Linux/libjffi-1.2.so

elasticsearchと同様jvm.optionsを変更します。

$ sudo vi /etc/logstash/jvm.options
下記のように変更します。
-Xms256m
-Xmx256m

logstash起動

$ sudo service logstash start
$ sudo service logstash status

logstash設定

ntopngからのログを、logstashで受け取りelasticsearchに飛ばします。

$ sudo /etc/logstash/conf.d/ntopng.conf

下記内容で保存します。
input {
  tcp {
    port => 5000
    codec => json
    type => "ntopng"
  }
}

## Add your filters / logstash plugins configuration here

output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "ntopng-%{+YYYY.MM.dd}"
  }
}

logstash起動

$ sudo service logstash start
$ sudo service logstash status

ntopng起動

$sudo ntopng -i eth1 -F "logstash;localhost;tcp;5000"

ntopngへWebUIからログイン

デフォルトだと3000番ポートで起動します。
ブラウザを起動して、http://ホスト:3000/ へアクセスします。

下記画面が表示されれば起動しています。
デフォルトは、admin/admin でログインできるので入力しログインします。
パスワード変更画面が表示されるので、自身が利用するパスワードを設定しておいてください。
image.png

TOP画面が表示されます。
ntopGUI001.PNG

ここまで確認できればひとまずntopngはOKです。

elasticsearchにindexが作成されているか確認する

ntopngを起動してから、数分間(10分くらい)おいてから下記コマンドを実行しindexが作成されているか確認します。

$ curl http://localhost:9200/_cat/indices
yellow open .kibana           V4sLU9SfTOGEXBXVksubDQ 1 1     11 0 23.9kb 23.9kb
red    open ntopng-2018.03.05 2UdzLd0CSnCD5gW7IYiU_g 5 1  80500 0 34.7mb 34.7mb
red    open ntopng-2018.03.04 gxIJvo5tRaydYheruLDQ3A 5 1 231043 0 98.9mb 98.9mb

ntopng-YYYY.MM.DDという表示があればOKです。

kibanaで可視化する

1.ブラウザを利用して、http://ホスト:5601/ にアクセスします。
2.左ペインからManagementをクリック
3.Create Index Patternをクリック
4.Time-field name ドロップダウンから@timestampフィールドを選択
5.Createをクリック

このあとVisualizeからグラフ等を作成することで、下記のようななんちゃってSIEMができあがります。
SIEM.PNG

異常なトラフィックを出しているプロトコルとかがあれば気づけそうですね。

少し試す分にはラズパイで十分かと思いますが、実際に本格運用する場合には、
きちんとしたサーバを用意することをオススメします!
オフィス等のトラフィックなんかを監視したら、SDカードなんかすぐにいっぱいになりますしね。

SIEMとはいわないかな・・・

ken_hikita
スタートアップの一人情シス。 何でも屋になりがち。
http://blog.intracker.net/
vis-its
独自技術ideagramを用いて、人々の「創造性」や「目利き力」の定量化を行い、イノベーター人材の発掘/育成、科学的イノベーション創発支援を行っています。
https://visits.world
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away