💡

ネットワークを可視化してみた

に公開

はじめに

こんにちは!フォーセシステムの入社1年目社員です。

今回は、NetFlowとElasticsearch+Logstash+Kibana(以下ELK Stack)を利用して、ネットワークの可視化を行いました。

今回の設定を適用する簡易的なネットワーク構成は以下のようになっています。

使用する各PCが有線でつながっており、ルーターを通じて外部ネットワークへ接続しています。
無線通信も利用できるのですが、速度が遅いため有線通信を利用しています。
そのため、ルーターの通信を取得すれば、ネット利用時間や帯域の状態などがわかるようになります。

コレクターサーバー構築

コレクターとしてELK Stackを利用する場合、利用するバージョンを合わせる必要があるため、バージョン管理が容易なDocker composeを利用しました。

サーバー構築の大まかな手順は以下の通りです。

  1. ESXiにUbuntuで仮想サーバー作成
  2. Docker関連パッケージのインストール
  3. docker-compose設定ファイルにELK Stackの情報を入力
  4. NetFlowコレクターとして稼働するための設定
  5. Docker-composeの実行

コレクター構築において、手順5の部分で以下の事象が発生しました。

  • Docker-composeを起動してもElasticsearchがすぐに停止してしまう
  • Webページを開くとEnrollment tokenを入力画面が表示される(本来この手順で表示されない)

ログを確認したところ、ホストマシンのディレクトリとコンテナ内のディレクトリをマッピングする際に使用するファイルの権限が足りない、というのが原因でした。
#chmod -R 770 をファイルに適用し、解決しました。
以前テストで構築した際はディスク容量がない、という原因で同様の事象が発生しました。
今回も同じような原因だろうと思い、ログをしっかり確認していなかったため、解決に時間がかかってしまいました。
発生した事象が同じようなものでも原因は違う可能性があるとわかり、ログ確認の重要性を感じました。

NetFlowの設定

NetFlowはより高度な監視ができるFlexible NetFlowを利用しました。

通信の送信元/宛先アドレスのほかに、通信プロトコル、バイト数、カウント数なども確認できるよう設定をしました。
NetFlowはスイッチングポートには設定できず、ルーティングポートかVlanに設定することができるので、今回はVlanに設定を入れています。
NetFlowの設定は特につまずいたところはなく、スムーズに完了しました。

こちらは今回作成したKibanaのダッシュボードです。

時間、バイト数、送信元/宛先IPアドレスが一目でわかるようグラフを作成しました。
このグラフを見ると、8時前頃から、通信を利用している人がいるようです。

社内通信で帯域を圧迫する例として、「大容量ファイルのダウンロード」があります。
帯域が圧迫されたときのグラフがどうなるのかを見てみるため、利用PCからUbuntuのisoファイルをダウンロードしてみました。容量は2.6GBです。

少し見えにくいですが、右のほうに数値が増加している箇所があり、そこがダウンロード時の記録です。
このグラフは1つ前のグラフと同日のものですが、ファイルダウンロード時の通信バイト数が大きいためほかの通信が見えにくくなっています。
この通信の送信元IPアドレスをnslookupで確認すると、「banjo.canonical.com」 と表示されます。Ubuntu開発元関連サーバーであり、isoファイルダウンロードによるものであることがわかります。

おわりに

今回は、入社1年目が挑戦ということで、ネットワークの可視化を行いました。
サーバー構築時など問題解決に時間がかかった部分もありましたが、目的を達成できました。
kibanaのダッシュボードの見やすさや分析方法など、トラフィック可視化についてまだ改善の余地があると考えているので、運用精度の向上も目指したいと思います。
実際に手を動かし、自分で設定をすることで理解がより深められるため、今回の取り組みはよい学びの機会になりました。

最後までご覧いただきありがとうございました!

Discussion