出不精の雑書きブログ

個人メモを公開したりしてる、ほんとに雑なやつ

💻IX UNIVERGE の通信を ElastiFlow可視化してみよう!

まえがき

ITRC Advent Calendar 2021の15日目です。
←前の人 : JetbrainsのIDEをCLIで起動する

本来であればDCネットワークのあれこれについて話す予定でしたが、執筆が間に合いそうになかったので急遽変更しました...

概要

ElastiFlowを利用して家のルータがどのような通信をしているのかを調べてみようと思います。

使用するプロトコルは sFlowというもので Ciscoとかでよく使われるNetflowみたいなやつです。

(一応参考にしたもの: wiki)

使用するもの
  • Ubuntu 20.04
  • Docker & Docker Compose
  • IX3110(IX UNIVERGEシリーズなら多分どれでも良い)

コンテナを使わずに構築するとなかなか工数が膨れるので今回はDockerでやります。

構築
Docker周りをインストール

公式ドキュメントに書いてある通りです。

Docker

参考: 公式ドキュメント

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Docker Compose

参考: 公式ドキュメント

sudo curl -L <https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname> -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
コンテナ立ち上げ
コンテナのマウント先を作成
sudo mkdir /var/lib/elastiflow_es
sudo chown -R 1000:1000 /var/lib/elastiflow_es
docker-composeをclone
cd ~
git clone git@github.com:robcowart/elastiflow.git
compose up
cd ~/elastiflow
docker-compose up -d

これで立ち上がるはずです。

router 側の設定
sflow agent ip {sflowの送信元IPアドレス}
sflow collector ip {今回構築しているサーバのIPアドレス}
Kibanaの設定

ここまできたら
http://{構築したサーバのIPアドレス}:5601 でKibanaにアクセスできるはずです。
そしたら [Stack Management] → [Saved objects] → [import] から
リポジトリのテンプレートをインポートしてください。

image block

その後 [kibana] → [Dashboards] → [ElastiFlow: Geo Location (src/dst)]を選択するとこんな画面になります。どこと通信しているかが正常に見れれば成功です。

image block

前の手順で導入したテンプレートにはプロトコルごとの通信量や通信先ASなどを見れるdashboardがあるので、色々試してみてください!

余談
dockerのポートマッピングについて。

docker psコマンドを入力した際にPORTSの欄に何も記載がありませんでした。

possive@elastic:~$ docker ps -a
CONTAINER ID   IMAGE                                                 COMMAND                  CREATED       STATUS       PORTS     NAMES
45cde2e8d4b3   docker.elastic.co/kibana/kibana:7.8.1                 "/usr/local/bin/dumb…"   4 hours ago   Up 4 hours             elastiflow-kibana
42ea1900ef8b   robcowart/elastiflow-logstash:4.0.1                   "/usr/local/bin/dock…"   4 hours ago   Up 4 hours             elastiflow-logstash
27e25d4884ab   docker.elastic.co/elasticsearch/elasticsearch:7.8.1   "/tini -- /usr/local…"   4 hours ago   Up 4 hours             elastiflow-elasticsearch

この状態でなぜkibanaにアクセスできるのかわからなかったのでdocker-compose.ymlを調べてみると。

network_mode: host

という記載がありました。
調べてみるとホストのポートをバインディングせずに、ホストのネットワークをそのまま使用しているようです。
(詳しくはドキュメントを読んでください)

自分全然Docker理解できていないやん...と実感しました...以上...