VagrantとAnsibleを用いたフロー情報の可視化環境作成 (2019/12/19)

FUJITSU Advent Calendar 2019 の19日目の記事です。
(注意)この記事は個人の見解であり、所属する会社、組織を代表するものではありません。

昨年の記事「VagrantとAnsibleを用いたフロー情報の可視化環境作成」のアップデートです。
https://qiita.com/t_umeno/items/b1c887782522450bad9d

# 昨年からの変更点
## 設定
ansible/ELK6/playbooks/settings/config.yml
を編集することで、以下を設定できます。

- VMのdisksize (デフォルト 100GB)
- ElasticStackの種類
    - 6.x (デフォルト)
    - 7.x
    - opendistro for Elasticsearch 1.3.0 (docker)
    - opendistro for Elasticsearch 1.3.0 (apt)
- Elasticsearch, Kibanaが動作するVM数
    - 1 (デフォルト)
    - 3
    - 5
- opendistro for Elasticsearchが動作するdockerコンテナ数
    - 1 (デフォルト)
    - 3
    - 5
- snortの使用有無 (デフォルト 使用しない)
- ntpサーバのIPアドレス (イントラネットなどインターネット上のntpサーバに到達しない場合に設定する)

詳細は下記URLを参照してください。
https://github.com/t-umeno/visualize_network_traffic/blob/master/README.ja.md
## 発表
JANOG44 meeting 初心者歓迎! Light Lightning Talk大会で発表しました。

## ダッシュボード
ダッシュボードを追加しました。
例:

- bar3 nDPIによってプロトコル種別(http, SSL等)や通信サービス(Google, Amazon, WindowsUpdate等)を表示します。
- bar2_silkAppLabel silkAppLabelによるプロトコル種別表示(SSL/TLS, DNS, SSH等)を表示します。

# はじめに
Wiresharkで1GB以上のPCAPファイルを追うのは困難です。

# 課題
ネットワークのフロー情報から有用な情報を得たい。一方で、netflowやIPFIXのフロー情報の可視化環境構築は手間がかかります。

# 解決方法
VagrantやAnsibleを用いてElasticStackやGrafanaを使ったフロー情報の可視化するVM(Ubuntu 18.04ベース)を作成しました。 

## VagrantとAnsibleで作成するVMの構成
1. ネットワークインタフェースで受信したパケットをYAFでIPFIX形式のフロー情報に変換
2. super_mediatorでIPFIXをJSON形式のファイルに変換
3. JSON形式のファイルをLogstashを経由してElasticsearchに入力
4. Elasticsearchでフロー情報検索
5. Elasticsearchの検索結果をKibana および Grafanaで可視化

## 動作環境
- メモリ8GB以上のWindows,Mac,Linux 
- 対象となるネットワークに接続可能なNIC 
- git
    - Git for Widnows https://gitforwindows.org/ を使用する場合は、改行コードを一切変更しない設定(Checkout as-is, commit as-is)でインストールしてください。 
- VirtualBox
- Vagrant
- vagrant-disksize plugin
- vagrant-proxyconf plugin (http proxy使用環境)
- vagrant-vbguest (オプション)
- firefox or chrome (IE, edge不可)

# リポジトリ
https://github.com/t-umeno/visualize_network_traffic

# インストール方法等の詳細
https://github.com/t-umeno/visualize_network_traffic/blob/master/README.ja.md

# 発表資料

## JANOG44 meeting 初心者歓迎! Light Lightning Talk大会
https://www.janog.gr.jp/meeting/janog44/program/llt
### 資料
https://www.janog.gr.jp/meeting/janog44/application/files/5015/6351/3420/visualizenetworktraffic.pdf

## 2018/06/16のセキュリティマイスター道場(SecDojo) ~夏場所~ のLT枠の発表資料(2018/11/08 修正)
https://www.slideshare.net/TakashiUmeno/visualizenetworktraffic-20181108-122136601

## Ansible Night in Osaka 2018.11 LT
https://www.slideshare.net/TakashiUmeno/visualizenetworktraffic-20181126

# Kibana 表示例
##ダッシュボード(bar2)
- フロー数推移(当日、1日前、1週間前)
- DNS問い合わせ名
- オクテット数推移
- フロー数(IP,Port,MAC,TCPフラグ,プロトコル番号で分類)
- http Host
- http Referer
- http Get
- http UserAgent 
- http ServerString 
<img width="960" alt="2018-11-27 (1).png" src="https://qiita-image-store.s3.amazonaws.com/0/102457/41dd032f-4678-9b94-8623-e02dd3441c47.png">

##JSONファイルに含まれる情報は追加表示可能
例

- SSL証明書有効期限
- SIPの電話番号

# Grafana 表示例
- フロー数
- オクテット数(順方向、逆方向)
- パケット数(順方向、逆方向)
- フロー数、オクテット数、パケット数でアラートを送信する際に使用

<img width="960" alt="2018-11-27 (8).png" src="https://qiita-image-store.s3.amazonaws.com/0/102457/fb117d4b-3ea3-610d-72b0-0a93d7b5cf15.png">

# URL
## CERT NetSA Security Suite
https://tools.netsa.cert.org/index.html
### YAF
https://tools.netsa.cert.org/yaf/
### super_mediator
https://tools.netsa.cert.org/super_mediator/index.html