まえがき
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] から
リポジトリのテンプレートをインポートしてください。

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

前の手順で導入したテンプレートにはプロトコルごとの通信量や通信先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理解できていないやん...と実感しました...以上...