Flow Exporter編では、FreeBSDのカーネルモジュールを活用して、NetFlow exporterをセットアップする手順を説明しました。本記事では、flow exporterからの統計データを受信し蓄積する、NetFlow collectorのインストールおよび設定について見ていきます(下図青色部分)。

FreeBSD - NetFlow - Flow Collector

NetFlowはもともとCisco System社が開発した、ルータ向けのトラフィック統計技術です。したがって、本技術のターゲットとなるユーザはおもにネットワークサービス事業者、あるいは一般企業の基幹ネットワークの管理者であると思われます。このせいか、NetFlow collector/visualizerには商用製品が多く、一般消費者がフリーで使用できるものは少ないという印象を持ちました。

「無料かつオープンソース」という条件をつけて調査した結果、flow collector/visualizerをオープンソース・ソフトウェアで実現するには、以下の二つのパターンがありそうです。

わたし自身がNetFlowに関してまったくの初心者であること、また以下のガイド記事で詳しく設定手順が解説されていることから、今回はNetFlow専用のNFDUMP/NfSenを用いてNetFlow collector/visualizerを実現することにしました。

汎用プラットフォームを用いるほうが可視化の際の柔軟性は高いかもしれませんが、設定はより複雑になりそうな気がします。

では、上記記事を参考にしながらNFDUMP/NfSenのインストール、および設定を行なっていきます。(というか上記記事が詳しいので、ほぼなぞることになります。)

インストール

まずは、必要なパッケージのインストールからです。nfsenおよびnfdumpパッケージをインストールします。(nfdumpパッケージはnfsenパッケージの依存関係としてインストールされますので、あえて指定しなくてもOKです。)

pkg install nfsen nfdump

NfSenの設定(必須)

nfsenパッケージをインストールすると、設定ファイル(nfsen.conf)が/usr/local/etc以下に配置されます。ほとんど設定変更の必要はないのですが、一か所(NetFlowデータソース)だけは必ず環境に合わせた設定を行なう必要があります。

NfSenの設定(オプション)

NfSenデータのディレクトリ構成をFreeBSDの標準的な構成に合わせたい場合に、本項の設定を行なってください。デフォルト設定で問題ない場合は、本項をとばしてサービス起動へ進みます。

注: FreeBSDの標準的なルールでは、アプリケーションデータを格納するのは/var以下です。いっぽう、NfSenのデフォルト設定では/usr/local/var以下を使うようになっています。

自動起動の設定

FreeBSDの起動時にNfSenが自動的に起動されるよう設定します。

sysrc nfsen_enable=YES

サービス起動

ようやくNfSenの設定が終わりましたね。では、以下のコマンドを実行して起動してみましょう。

# service nfsen start
Configured sources do not match existing sources. Run 'nfsen reconfig' first!

一回目の起動時には、設定したデータソースに対応するNetFlowデータを保存するディレクトリが存在しないため、再コンフィグを行なうよう促されます。メッセージに従って、以下のコマンドを実行します。

# nfsen reconfig
New sources to configure : example    # sourceで指定した識別名が表示される
Continue? [y/n] y                     # ここでyを入力

Add source 'example'

Reconfig done!

設定したデータソースの識別名が表示され、本ソースをコンフィグして良いか確認されますのでyを入力します。その後、再度以下のコマンドを実行するとNfSenが起動します。

service nfsen start

以上で、NfSenが起動し、NetFlowデータの受信、蓄積が始まりました。

動作確認

ガイド記事にそっていくつか動作確認を行なっておきましょう。

まず、必要なプロセス(nfcapd, nfsend, およびnfsend-comm)が起動しているかを確認します。

$ ps auxww | grep /usr/local/bin/nf | grep -v grep
www           63858   0.0  0.0    27360    3332  -  S    15:11       0:00.00 /usr/local/bin/nfcapd -w -D -p 4444 -u www -g www -B 200000 -S 1 -P /var/run/nfsen/p4444.pid -z -I example -l /var/nfsen/profiles-data/live/example
www           63860   0.0  0.2    42832   31868  -  Is   15:11       0:00.24 /usr/local/bin/perl /usr/local/bin/nfsend
www           63861   0.0  0.2    38296   27512  -  Is   15:11       0:00.01 /usr/local/bin/nfsend-comm (perl)

NetFlowデータがファイルに書き出されるまでにはしばらく時間がかかりますが、10分くらい待てば確実にファイルが作成されているはずです。以下のコマンドを実行して、ファイルが作成されていることを確認します。

$ ls -lah /var/nfsen/profiles-data/live/example/2018/08/05    # "2018/08/05"の部分は実際の日付に合わせてください
total 2001
drwxr-xr-x  2 www  www   225B  8月  5 18:35 ./
drwxr-xr-x  5 www  www     5B  8月  5 00:05 ../
-rw-r--r--  1 www  www   6.6K  8月  5 00:05 nfcapd.201808050000
-rw-r--r--  1 www  www   6.4K  8月  5 00:10 nfcapd.201808050005
(snip)

また、nfdumpコマンドを用いて、蓄積されたフローデータの解析結果を確認してみましょう。(以下の例では、プライバシー保護のためIPv6アドレスの一部を伏せ字にしています。)

$ nfdump -R /var/nfsen/profiles-data/live/example -o extended -s record/bytes
Aggregated flows 100402
Top 10 flows ordered by bytes:
Date first seen          Duration Proto      Src IP Addr:Port          Dst IP Addr:Port   Flags Tos  Packets    Bytes      pps      bps    Bpp Flows
2018-08-05 00:01:58.000  1770.000 TCP       192.168.1.34:35527 ->    192.168.1.247:9103  .AP.SF   0   83.3 M  124.9 G    47089  564.6 M   1498    31
2018-08-03 15:12:00.000 256907.000 TCP   XXXX:11..00::252.2049  -> XXXX:11..900::34.714   .AP...   0    3.4 M    4.8 G       13   148942   1420  3934
2018-08-05 00:01:59.000  1769.000 TCP      192.168.1.247:9103  ->     192.168.1.34:35527 .AP.SF   0   41.9 M    2.2 G    23680    9.9 M     52     1
2018-08-05 23:27:01.000    21.000 TCP       192.168.1.34:43870 ->    192.168.1.247:9103  .AP.SF   0   628920  941.6 M    29948  358.7 M   1497     2
2018-08-04 02:43:26.000  1094.000 TCP   XXXX:11..900::34.22    -> XXXX:11..00::247.56045 .AP.SF   0   445328  622.6 M      407    4.6 M   1398     1
2018-08-06 02:45:15.000  1201.000 TCP   XXXX:11..900::34.22    -> XXXX:11..00::247.47412 .AP.SF   0   444010  620.8 M      369    4.1 M   1398     1
2018-08-05 02:42:22.000   954.000 TCP   XXXX:11..900::34.22    -> XXXX:11..00::247.58530 .AP.SF   0   399392  554.4 M      418    4.6 M   1388     1
2018-08-03 23:17:43.000    18.000 TCP       192.168.1.34:17388 ->    192.168.1.247:9103  .AP.SF   0   353185  529.4 M    19621  235.3 M   1498     2
2018-08-03 15:11:00.000 256967.000 TCP   XXXX:11..900::34.714   -> XXXX:11..00::252.2049  .AP...   0    1.9 M  163.7 M        7     5095     88  3818
2018-08-03 15:11:12.000 255916.000 TCP   XXXX:11..900::34.9100  -> XXXX:11..900::35.58740 .AP...   0    68264   89.6 M        0     2801   1312   141
Summary: total flows: 310540, total bytes: 136945671247, total packets: 137522957, avg bps: 4233578, avg pps: 531, avg bpp: 995
Time window: 2018-08-03 14:41:28 - 2018-08-06 14:34:28
Total flows processed: 310540, Blocks skipped: 0, Bytes read: 26988128
Sys: 0.187s flows/second: 1659585.6  Wall: 3.183s flows/second: 97531.8   

以上で、NetFlow collectorの設定と動作確認は完了です。

次回の記事では、蓄積したNetFlowデータを可視化するNetFlow visualizerについて説明します。

参考文献

  1. The Elastic Stack, https://www.elastic.co/products
  2. Open Source Time Series Platform, https://www.influxdata.com/time-series-platform/
  3. ELKではじめるお手軽Flowコレクター, http://enog.jp/archives/1337
  4. GrafanaによるNetFlow v9トラフィック分析, https://qiita.com/ishizaghi/items/b0ecd9fa50e503362165
  5. NFDUMP, https://github.com/phaag/nfdump
  6. NfSen, http://nfsen.sourceforge.net/
  7. CONFIGURE NETFLOW STORAGE AND DISPLAY WITH NFDUMP AND NfSen, https://forums.freebsd.org/threads/howto-monitor-network-traffic-with-netflow-nfdump-nfsen-on-freebsd.49724/#post-277774