無料でできる自宅ネットワーク監視環境の構築

Index

  1. 話さないこと
  2. 背景
  3. 監視する必要はあるの?
  4. なぜ ELK を選択したか
  5. ELKでできること
  6. 我が家の監視環境の動作概要と構成
  7. Logstach の設定例
  8. 実際に作ったダッシュボード例
  9. その他気付けたこと
  10. 参考

なぜか2015年に書いたこの記事だけ検索による流入が毎日ぽつぽつあります。その補足というか顛末を書いておきたいと思います。
(書いていて改めて思いますが、当時やっていた設定は本当に面倒だなと思います。前記事で紹介したalpinephotonのような存在を活用できる現在が有難いです。)

自宅ネットワークにおいて、NetFlow や Syslog を無料で手軽に可視化してみたく、Elasticsearch / Logstash / Kibana (a.k.a ELK Stack)を使って Netflow コレクタ兼 Syslog サーバを自作しました(2015年〜)。
GUI や気付けたことを振り返ってご紹介します。

話さないこと

ELK とは何か?とか、ELK のセットアップ方法などは割愛します。
後述の参考リンクやこちらをご参照ください。

背景

いままでは家のブロードバンドルータには高度な機能がまったくなく、ただインターネットに繋ぐだけでしたが、機会があってハイエンドなルータを入手することができたため、高度な機能を試しに使ってみました。
もともときれいな GUI が用意されていますが、見える情報は NetFlow や Syslog を有効にすることで格段に増えます。

監視する必要はあるの?

2016年の調査で一人あたりのスマートデバイス数は平均3台との調査もあります。
家の中に目を向けると、思いつくだけでネットワークカメラ、 IRKit 、スマートロック、ラズパイ的な自作物などなど、どんな OS で、どんなネットワーク/セキュリティ特性を持つのかよくわからないけどとりあえず便利!というようなデバイスがどんどん増えていきます。

Fire TV Stick は、実体は Android ですが、そういうことを気にせず過ごしてしまうことって結構あると思います。

昨年で記憶に残っているニュースとして、中国製 Android 端末にバックドアが仕掛けられていたというものがありました。

Android端末のファームウェアに隠し機能、ユーザー情報を中国に送信

インターネットの出入口の情報が可視化できれば、変な通信を見つけやすくなるはずです。

なぜ ELK を選択したか

  • Open Source で無償
  • 機能追加が精力的に行われている
  • ユーザも多くメジャーな機器のログのパーサであればたいてい Github に落ちている
  • etc…

ELKでできること

+ログ収集、管理、検索システム
+イベントのリアルタイムな分析およびフォレンジックな分析を実現できる
+機器を横断した分析ができる

我が家の監視環境の動作概要と構成

+Logstash で NetFlow や Syslog を受け取り、各種処理(パースしたり、情報を追加したり、切り出したり)をする
+Elasticsearch に渡してインデックス化する
+Kibana 経由でインデックスにアクセスし、グラフを作ったり、検索したりする

Monitoring Environment

Logstach の設定例

grokやフィルタの設定を書くことでもっと作り込むことはできますが NetFlow を受け取って Elasticsearch に渡すための最小設定は以下だと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
input {   
     udp{  
       port => 9995  // NetFlow を受け取るポート
       codec => netflow{  
         definitions => "/etc/logstash/conf.d/codec/netflow.yaml"   // NetFlow を理解するための設定(参考で後述)
         versions => [9]  
       }  
     }  
   }  
 output {  // Elasticsearch に渡すための設定
     stdout { codec => rubydebug}  
    elasticsearch  
    index => “logstash-netflow-%{+YYYY.MM.dd}"                                     
    host => 'localhost'                                                              
       }  
    }

実際に作ったダッシュボード例

NetFlow DstIP Count
アウトバウンドのトラフィックのうち宛先 IPv4 アドレスを時系列でカウントした棒グラフです。
ルータが、Google DNS(8.8.8.8) に対してポーリングしていることがわかります。

Syslog Dashboard
左上から時計回りに、
+[data table]Inbound でドロップしたトラフィックの宛先ポート、プロトコル、国名
+[pie chart]Deny トラフィックのプロコトルおよび宛先ポート割合
+[metric]Inbound で Drop した回数
+[pie chart]Allow と Deny の割合
+[pie chart]Deny トラフィックの国-地域名割合
+[histogram]Deny トラフィックの宛先ポート別推移

その他気付けたこと

インバウンド(インターネットー>家)でスキャニングされている形跡がありました。23, 80, 3389, 8080 といったwell-known port 以外に53413/udp などが観測されました。
調べてみたところ同時期にこのようなレポートが JPCERT より発行されていました。
JPCERT TSUBAME インターネット定点観測レポート 2015年10-12月

上記のような気付きが得られた以外にも、久しぶりに新規で勢いのある OSS を触ることができて非常に勉強になりました。

また、Syslog を含めると結構なログ量になり Java のプロセスがもっさりしてきましたので、定期的に cron + curator で削除する運用にしました。

参考

Step-by-Step Setup of ELK for NetFlow Analytics
Netflow.yam - Github