Flow Collector編では、NFDUMPおよびNfSenを用いたNetFlow collectorのセットアップ手順を説明しました。NetFlowシリーズ最終回の本記事では、flow collectorが収集・蓄積したデータを可視化するNetFlow visualizerのインストールと設定について見ていきます(下図青色部分)。

FreeBSD - NetFlow - Flow Visualizer

「インストール」と書きましたが、flow visualizerとしては、Flow Collector編ですでに導入済みのNfSenを使用します。ただし、NfSenの可視化機能はPHPで記述されたWebフロントエンドになっていますので、可視化データを表示するためにはPHPをサポートするWebサーバをインストールする必要があります。

オープンソースのWebサーバといえば、ApacheNginxが現在の双璧ですね。

NFDUMP/NfSenを設定したマシンにたまたまApacheがインストール済みでしたので、本記事ではWebサーバにApacheを使うことにします。(すでに、Webサーバがインストール済みでPHPとの連携も設定済みの場合は、すぐにNfSenの動作確認に進めると思います。)

WebサーバにNginxを使用する場合は、以下のガイド記事に詳しい説明がありますのでご参照ください。

では、NfSenを使ったflow visualizerの設定手順について説明していきます。

注: 以下、本記事ではApache, PHPともに、NfSenを動作させるために必要な最低限の設定のみを行ないます。FreeBSD, Apache, およびPHPを組み合わせた一般的なサーバ設定についてはさまざまなサイトで解説されていますが、代表的と思われる記事を二つ挙げておきます。ご参考まで。

インストール

まず、必要なパッケージのインストールからです。Apache Webサーバ、PHP、およびApache用のPHP連携モジュールをインストールします。「PHPのバージョンが5.6なのは今さら感が強いよね」と思われる場合は、お好みに合うバージョンのPHPを代わりにインストールしてみてください(PHP 5.6以外での動作は未確認)。

pkg install apache24 php56 php56-extensions mod_php56

注: PHPスクリプトがUnixドメインソケットを用いてNfSenプロセスと通信を行ないます。したがって、上記パッケージをインストールするのはNfSenが動作するのと同一マシンである必要があります。

PHPの設定

パッケージのインストールが終わったら、必要な設定を順番に行なっていきましょう。まず、PHPの設定です。設定ファイルのサンプルが/usr/local/etc以下に配置されていますので、プロダクション環境用の設定サンプルをコピーしてphp.iniファイルを作成します。

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

NfSenが正常動作するための最低限の設定として、ここではタイムゾーンの設定だけを行ないます。以下の例では日本標準時に設定していますが、ここはお住まいの地域に合わせて適宜読み替えをお願いします。

自動起動の設定

FreeBSD起動時にWebサーバが自動的に起動されるよう設定をしておきましょう。

sysrc apache24_enable=YES

最後に、以下のコマンドを実行するか、FreeBSDマシンを再起動してWebサーバを起動します。

service apache24 start

動作確認

では、簡単に動作確認をしておきましょう。Webブラウザを起動して以下のURLにアクセスしてください。

このURLにアクセスすると、まずデータの一覧画面(Home)が表示されます(下図)。

本画面は、すべてのソースからのNetFlowデータを一覧するオーバービュー画面になっています。(下図の例ではソースが一つだけですが、複数のソースがある場合はそれぞれが指定した色で表示されます。) 表示されるデータは、フロー毎秒、パケット毎秒、ビット毎秒というトラフィックデータで、これらが日、週、月、および年単位のスケールでそれぞれ表示されます。

FreeBSD - NfSen - Overview

上図のいずれかのグラフをクリックすると詳細画面(Details)に遷移します。

詳細画面はおおまかにいって、上部、下部に分かれます。まず、上部(下図)では、プロトコル(TCP, UDP, ICMP, およびその他)ごとのフロー数の推移が小グラフで表示され、これらを合算したものが大きなグラフで表示されています。また、グラフの下の表は、グラフ上で選択したタイムスロット(5分間)、あるいは複数のタイムスロットにわたる期間におけるフロー数などの統計情報が表示されます。

FreeBSD - NfSen - Details - Top

次に、詳細画面の下部(下図)では、GUI経由でデータソース、フィルタ、およびオプションを指定してnfdumpコマンドを実行できます。下図の例では、上部のグラフで選択した期間における宛先(DST)IPアドレスのトップ10をフロー数が多い順に表示しています。

FreeBSD - NfSen - Details - Bottom - 1

また、トップ10の表示においてIPアドレスの部分をクリック(下図)すると、そのIPアドレスに対するDNSの逆引き情報、およびWHOIS情報が表示されます。

FreeBSD - NfSen - Details - Bottom - 2

以上、動作確認をかねてNfSenのGUIを簡単に説明しました。

いかがでしたでしょうか? 正直なところ、今回の記事ではデータソースがFreeBSDマシン一台だけでしたので、可視化結果について少々もの足りない、といったところでしょうか。家庭内ネットワークよりは、やはりもう少し規模の大きいネットワークに適用してみたいところですね。

参考文献

  1. The Apache HTTP Server Project, https://httpd.apache.org/
  2. Nginx, https://nginx.org/
  3. CONFIGURE NGINX WEB SERVER TO DISPLAY NFSEN, https://forums.freebsd.org/threads/howto-monitor-network-traffic-with-netflow-nfdump-nfsen-on-freebsd.49724/#post-277775