netflowでネットワークフロー解析(FlowViewer、FlowGrapher、FlowTracker)

投稿者: | 2011年9月12日
Pocket

目次

  1. これまでの記事について
  2. ネットワーク構成
  3. はじめに
  4. 事前準備
  5. FlowViewerの設定
  6. FlowViewerのダウンロードと設置
  7. 設定ファイルの修正
  8. ディレクトリ作成と権限付与
  9. FlowTrackerの追加設定

対象サーバについて

製品名 OpenBlockS 600/R
CPU 600MHz(AMCC PowerPC 405EX)
メモリ 1GB(DDR2 SDRAM)
ストレージ 8GB(Compact Flash)

これまでの記事について

netflowの記事も4つ目なので、これまでの記事を整理します。

「netflowでネットワークフロー解析(softflowdでサーバをセンサにする)」では、Openblocks600にsoftflowdを導入し、netflowのセンサにしました。

「netflowでネットワークフロー解析(flow-toolsでフローデータ受信)」では、Openblocks600にflow-toolsを導入し、netflowのコレクタにしました。

「netflowでネットワークフロー解析(FlowScanとCUFlowでグラフ化)」では、コレクタにしたOpenblocks600にFlowScanとCUFlowを導入し、アプリ単位でトラフィックがどのぐらい流れているかWebインタフェースで簡単にグラフ化できるようにします。

参考書はネットワークフロー解析入門 flow-toolsによるトラブルシューティングです。この本ではP167~187に手動インストール方法が載っていますが、権限周りの修正はこの本の通りには行かないので、エラーを潰していく必要があります。

 

ネットワーク構成

ネットワーク構成は前回と同様です。作業対象はOBS-SBY側です。

    internet
       |
       |
       |
       | fa0/1
  +-----------+                +-------------+
  |           |----------------|             |
  |           |fa0/5      eth0 |   OBS-ACT   |
  |           |----------------|  (センサ)   |
  |           |fa0/3      eth1 +-------------+
  |  cat2940  |
  |           |                +-------------+
  |           |----------------|             |
  |           |fa0/8      eth0 |   OBS-SBY   |
  |           |                |  (コレクタ) |
  +-----------+                +-------------+
       |fa0/6
       |
       |
       |
      LAN

はじめに

今回導入するFlowViewerには、FlowViewer、FlowGrapher、FlowTrackerが含まれています。 FlowViewerは、flow-printとflow-nfilterのWebインタフェースです。ある条件で絞り込んだフローの詳細をブラウザで確認することができます。 FlowGrapherはある条件で絞り込んだフローをグラフ化することができます。 FlowTrackerはある条件で絞り込んだフローをグラフ化して追跡することができます。

FlowGrapherとFlowTrackerの違いは分かりにくいですが、FlowGrapherはグラフ化したいフローの条件を指定した際にグラフを生成しますが、FlowTrackerは予めグラフ化したいフローの条件を登録しておいてその条件にマッチしたフローを定期的に取得し続けます(MRTGやRRDToolと同じイメージです)。 また、FlowTrackerはRRDToolを使用しており、現在から過去24時間、過去1週間、過去1ヶ月、過去1年、過去3年前までの計5種類のグラフを自動的に作成します。

どちらも一長一短ありますが、基本的にはFlowTrackerを使いつつ、FlowTrackerで追跡していないフローをグラフ化したい際にはFlowGrapherを使用するというのがツール作成者の意図だと思われます。

FlowViewerとFlowGrapherは比較的簡単に導入できますが、FlowTrackerは権限周りが少し難しい仕様になっています。

事前準備

FlowViewerはaptには無いため、手動インストールします。

ソフトはFlowViewer Web Siteからダウンロードします。

このサイトに、FlowViewerインストールに必要となる前提条件が以下の通り挙げられていますのですでに導入されているかを確認します。

Requirements

1. Web Server w/ CGI
2. Perl v5.0 or later
3a. flow-tools v 0.68 (new fork)
3b. flow-tools v 0.67 (original)
4. gd (for FlowGrapher)
5. GD (for FlowGrapher)
6. GD::Graph (for FlowGrapher)
7. RRDtool (for FlowTracker) 

本サイトの対象サーバには上記の4,5以外は入っていますので、GD関連のみ以下の通り、新規インストールします。

root@OBS-SBY:~# aptitude install libgd2-xpm-dev
以下の新規パッケージがインストールされます:
  libexpat1-dev{a} libfontconfig1-dev{a} libfreetype6-dev{a} libgd2-xpm{a} libgd2-xpm-dev libjpeg62{a}
  libjpeg62-dev{a} libpng12-dev{a} libpthread-stubs0{a} libpthread-stubs0-dev{a} libx11-dev{a}
  libxau-dev{a} libxcb1-dev{a} libxdmcp-dev{a} libxpm-dev{a} libxpm4{a} pkg-config{a}
  x11proto-core-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a} xtrans-dev{a} zlib1g-dev{a}
更新: 0 個、新規インストール: 22 個、削除: 0 個、保留: 0 個。
7,274 kB のアーカイブを取得する必要があります。展開後に 19.1 MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y

...

libgd-gd2-noxpm-perlとどちらか迷いましたが、以下のlibgd-gd2-perlと競合していたのでxpmにしておきました。libgd-gd2-perlとlibgd-graph-perlはどちらかでよいかもしれませんが、分からなかったので両方入れておきました。

root@OBS-SBY:~# aptitude install libgd-gd2-perl
以下の新規パッケージがインストールされます:
  libgd-gd2-perl
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。

root@OBS-SBY:~# aptitude install libgd-graph-perl
以下の新規パッケージがインストールされます:
  libgd-graph-perl libgd-text-perl{a}
更新: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
432 kB のアーカイブを取得する必要があります。展開後に 1,024 kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y

FlowViewerの設定

FlowViewerのダウンロードと設置

flowviewerをダウンロードします。

root@OBS-SBY:~# wget http://ensight.eos.nasa.gov/FlowViewer/FlowViewer_3.4.tar
--2011-09-04 20:31:04--  http://ensight.eos.nasa.gov/FlowViewer/FlowViewer_3.4.tar
ensight.eos.nasa.gov をDNSに問いあわせています... 198.119.22.10, 2001:4d0:c000:1::3
ensight.eos.nasa.gov|198.119.22.10|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 552960 (540K) [application/x-tar]
`FlowViewer_3.4.tar' に保存中

100%[==================================================================>] 552,960      146K/s 時間 3.7s

2011-09-04 20:31:11 (146 KB/s) - `FlowViewer_3.4.tar' へ保存完了 [552960/552960]

解凍して中身を確認します。

root@OBS-SBY:~# tar vxf FlowViewer_3.4.tar
FlowViewer_3.4/
FlowViewer_3.4/FlowGrapher_Relay.cgi

...

root@OBS-SBY:~# cd FlowViewer_3.4
root@OBS-SBY:~/FlowViewer_3.4# ls
FlowGrapher.cgi        FlowTracker_Collector   FlowViewer_CleanASCache      NamedInterfaces_Devices
FlowGrapherM.png       FlowTracker_Dumper.cgi  FlowViewer_CleanFiles        NamedInterfaces_Exporters
FlowGrapherS.png       FlowTracker_Grapher     FlowViewer_CleanHostCache    README
FlowGrapher_Colors     FlowTracker_Group.cgi   FlowViewer_Configuration.pm  flowcapture_restart
FlowGrapher_Main.cgi   FlowTracker_Main.cgi    FlowViewer_Main.cgi          flowtracker_restart
FlowGrapher_Relay.cgi  FlowTracker_Relay.cgi   FlowViewer_Relay.cgi         performance_check
FlowGrapher_Sort.cgi   FlowViewer.cgi          FlowViewer_Save.cgi          rsync_flows
FlowTracker.cgi        FlowViewerM.png         FlowViewer_Utilities.pm      rsync_trackings
FlowTrackerM.png       FlowViewerS.png         Generic_Logo.jpg

FlowViewer_3.4をcgi-binディレクトリへ移動します。

root@OBS-SBY:~/FlowViewer_3.4# cd ..
root@OBS-SBY:~# mv FlowViewer_3.4 /usr/lib/cgi-bin/
root@OBS-SBY:~# cd /usr/lib/cgi-bin/
root@OBS-SBY:/usr/lib/cgi-bin# ls
CUGrapher.cgi  CUGrapher.pl  CUGrapher.pl.original  FlowViewer_3.4  gd_test.pl

設定ファイルの修正

root@OBS-SBY:/usr/lib/cgi-bin# cd FlowViewer_3.4/
root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4# cp FlowViewer_Configuration.pm FlowViewer_Configuration.pm.original
root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4# diff -y --suppress-common-lines -W 170 FlowViewer_Configuration.pm FlowViewer_Configuration.pm.original
$FlowViewer_server       = "192.168.0.131";     # (IP address or hostname)         |   $FlowViewer_server       = "www.yourcompany.com";     # (IP address or hostname)
$FlowViewer_service      = "http";                   # (http, or https)             |   $FlowViewer_service      = "https";                   # (http, or https)
$reports_directory       = "/var/www/flowviewer";                                   |   $reports_directory       = "/var/www/FlowViewer_3.4";
$reports_short           = "/flowviewer";                                           |   $reports_short           = "/FlowViewer_3.4";
$graphs_directory        = "/var/www/flowgrapher";                                  |   $graphs_directory        = "/var/www/FlowGrapher_3.4";
$graphs_short            = "/flowgrapher";                                          |   $graphs_short            = "/FlowGrapher_3.4";
$tracker_directory       = "/var/www/flowtracker";                                  |   $tracker_directory       = "/var/www/FlowTracker_3.4";
$tracker_short           = "/flowtracker";                                          |   $tracker_short           = "/FlowTracker_3.4";
$work_directory          = "/var/www/Flow_Working";                                 |   $work_directory          = "/usr/lib/cgi-bin/FlowViewer_3.4/Flow_Working";
$work_short              = "/Flow_Working";                                         |   $work_short              = "/cgi-bin/FlowViewer_3.4/Flow_Working";
$save_directory          = "/var/www/flowviewer_saves";                             |   $save_directory          = "/var/www/FlowViewer_Saves";
$save_short              = "/flowviewer_saves";                                     |   $save_short              = "/FlowViewer_Saves";
$filter_directory        = "/var/www/FlowTracker_Files/FlowTracker_Filters";        |   $filter_directory        = "/usr/lib/cgi-bin/FlowTracker_Files/FlowTracker_Filters
$rrdtool_directory       = "/var/www/FlowTracker_Files/FlowTracker_RRDtool";        |   $rrdtool_directory       = "/usr/lib/cgi-bin/FlowTracker_Files/FlowTracker_RRDtool
#$flow_data_directory     = "/var/db/flows";                                        |   $flow_data_directory     = "/var/flows";
$exporter_directory      = "/var/db/flows";                                         |   $exporter_directory      = "/var/flows/all_routers";
$flow_bin_directory      = "/usr/bin";                                              |   $flow_bin_directory      = "/usr/local/flow-tools/bin";
$rrdtool_bin_directory   = "/usr/bin";                                              |   $rrdtool_bin_directory   = "/usr/local/rrdtool-1.2.12/bin";
$trackings_title         = "Jitaku";                                                |   $trackings_title         = "Your Company Name";
$user_hyperlink          = "http://192.168.0.131/";                                |   $user_hyperlink          = "http://www.yourcompany.com/";
#@devices                 = ("router_1","router_2","router_3");                     |   @devices                 = ("router_1","router_2","router_3");
@exporters               = ("192.168.0.113:OBS-ACT");                              |   #@exporters               = ("192.168.100.1:New York Router","192.168.100.2:Prague

ディレクトリ作成と権限付与

FlowViewer_Configuration.pmで指定したディレクトリを作成して権限を付与します。

root@OBS-SBY:/usr/lib/cgi-bin# cd /var/www
root@OBS-SBY:/var/www# mkdir flowviewer flowgrapher flowtracker flowviewer_saves
root@OBS-SBY:/var/www# chown www-data:www-data flowviewer flowgrapher flowtracker flowviewer_saves

root@OBS-SBY:/var/www# mkdir Flow_Working
root@OBS-SBY:/var/www# chown www-data:www-data Flow_Working/
root@OBS-SBY:/var/www# chmod 777 Flow_Working/

root@OBS-SBY:/var/www# mkdir FlowTracker_Files
root@OBS-SBY:/var/www# chown www-data:www-data FlowTracker_Files
root@OBS-SBY:/var/www# chmod 777 FlowTracker_Files/

以上でFlowViewerとFlowGrapherの設定は終了です。

本記事のネットワーク構成の場合はhttp://192.168.0.131/cgi-bin/FlowViewer_3.4/FlowViewer.cgiにアクセスすると、以下のような画面が表示されます。

flowviewer-1

適当に条件を指定して「Generate Report」をクリックすると、以下のようにフローの詳細が表示されます(実際はモザイク箇所にIPアドレスが表示されています)

flowviewer-2

次にFlowGrapherの例を紹介します。FlowViewerからFlowGrapherへの切替は、先ほどの画面の上の方にある黄色い画像の「FlowGrapher」の箇所をクリックします。

flowgrapher-1

上記の画像の例では、6:00~7:00の53番ポート宛のフローで絞込みを行っています。「Generate Graph」をクリックすると以下のようにグラフとフローの一部が表示されます(先ほどと同じく、実際はモザイク部分にIPアドレスが記載されています)。

flowgrapher-2

FlowTrackerについては現時点ではまだ使用できないことに注意して下さい。

FlowTrackerの追加設定

FlowViewerとFlowGrapherはflow-dataから条件にマッチしたフローを検索するだけですが、FlowTrackerはflow-dataを元に5分間隔でグラフを生成するため、専用のスクリプトをバックグラウンドで動かし続ける必要があります。

具体的には、FlowViewer_3.4ディレクトリにあるFlowTracker_CollectorとFlowTracker_Grapherというスクリプトを動かす必要がありますが、同じくFlowViewer_3.4ディレクトリに、前述の二つのスクリプトの起動を行ってくれるflowtracker_restartスクリプトがあるので、このスクリプトを使用します。

試しに実行してみると、以下のようになりました。

root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4# ./flowtracker_restart start
$Starting FlowViewer processes: Starting FlowTracker_Collector:
Starting FlowTracker_Grapher:
Done.
sh: cannot create /var/www/Flow_Working/FlowTracker_Collector_info: Permission denied
sh: cannot create /var/www/Flow_Working/CONCAT_exporter: Permission denied

エラーが出たので上記のファイルに権限を与えます。

root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4# chmod 777 /var/www/Flow_Working/CONCAT_exporter 
root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4# chmod 777 /var/www/Flow_Working/FlowTracker_Collector_info
root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4# ./flowtracker_restart start
$Starting FlowViewer processes: Starting FlowTracker_Collector:
Starting FlowTracker_Grapher:
Done.
root@OBS-SBY:/usr/lib/cgi-bin/FlowViewer_3.4#

正常に起動するようになりましたが、このままではシステム起動時に自動で立ち上がりませんので、/etc/init.d/flowtrackerを作成してupdate-rc.dで登録します。

root@OBS-SBY:~# cp /usr/lib/cgi-bin/FlowViewer_3.4/flowtracker_restart /etc/init.d/flowtracker
root@OBS-SBY:~# update-rc.d flowtracker defaults
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'flowtracker' missing LSB tags and overrides

エラーが出たのでアクセラと+αな生活中村研究室を参考にさせて頂き、/etc/init.d/flowtrackerにBEGIN INIT INFO ~ END INIT INFO(中身は/etc/init.d/flow-captureの記述を流用)を追加しました。

root@OBS-SBY:~# vi /etc/init.d/flowtracker

...

### BEGIN INIT INFO
# Provides:          flowtracker
# Required-Start:    $local_fs $remote_fs $syslog $network $time
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Tracking Netflow Data
### END INIT INFO

root@OBS-SBY:~# update-rc.d flowtracker defaults
update-rc.d: using dependency based boot sequencing
root@OBS-SBY:~#
root@OBS-SBY:~# ls /etc/rc*.d/* | grep flowtracker
/etc/rc0.d/K01flowtracker
/etc/rc1.d/K01flowtracker
/etc/rc2.d/S03flowtracker
/etc/rc3.d/S03flowtracker
/etc/rc4.d/S03flowtracker
/etc/rc5.d/S03flowtracker
/etc/rc6.d/K01flowtracker

上記修正を行っただけでは/etc/init.d/flowtrackerがうまく動きませんでした。色々と試してみましたが、権限周りの修正が面倒なので、www-dataではなくrootで動かすように修正したところうまく動きました

参考までに以下にスクリプトを載せておきます。

root@OBS-SBY:~# vi /etc/init.d/flowtracker

#!/bin/sh
#
# flowview:     Starts all processes concerning flowview
#
# description:  This script starts up the the flowview daemons.
#
# processname:  There is not a single process associated with these
#               actions, rather there are multiple processes. This
#               script takes care of all of them.
#
# can be restarted using the following command:
# sudo /etc/init.d/flowview restart

### BEGIN INIT INFO
# Provides:          flowtracker
# Required-Start:    $local_fs $remote_fs $syslog $network $time
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Tracking Netflow Data
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
FlowViewer=/usr/lib/cgi-bin/FlowViewer_3.4
user=www-data
RRDTOOL_PATH=/usr/bin
RETVAL=0

start() {
    echo -n $"Starting FlowViewer processes: "

    # start FlowTracker_Collector and FlowTracker_Grapher
    for i in /usr/lib/cgi-bin/FlowViewer_3.4/FlowTracker_Collector /usr/lib/cgi-bin/FlowViewer_3.4/FlowTracker_Grapher; do
        echo Starting $i:
        if ! /bin/su --shell=/bin/sh $user \
                -c "cd $FlowViewer &&
                PERL5LIB=$FlowViewer &&
                nice -20 env PATH=$PATH:$RRDTOOL_PATH ./$i&"; then
                        echo Problem starting $i >&2
                        RETVAL=1
        fi
        PERL5LIB=/usr/lib/cgi-bin/FlowViewer_3.4/ $i > /usr/lib/cgi-bin/FlowViewer_3.4/log.txt 2>&1 &
    done

    echo Done.
}

stop() {
    echo -n $"Stopping FlowViewer processes: "

    for i in FlowTracker_Collector FlowTracker_Grapher; do
        if ! /usr/bin/killall -2 $i; then
        if ! /usr/bin/killall $i; then
                RETVAL=1
                echo Problem stopping $i >&2
        fi
    done

    echo Done.
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        ;;
esac
exit $RETVAL

横線の部分を強調文字のように書き換えました。

再起動後にFlowTracker_CollectorとFlowTracker_Grapherが起動していることを確認します。

root@OBS-SBY:~# shutdown -r now

...

root@OBS-SBY:~# ps aux | grep perl
www-data  1619  1.1  0.4   7920  4340 pts/0    SN   00:38   0:04 /usr/bin/perl /usr/lib/cgi-bin/FlowViewer_3.4/FlowTracker_Collector
www-data  1622  0.5  0.4   7764  4240 pts/0    SN   00:38   0:01 /usr/bin/perl /usr/lib/cgi-bin/FlowViewer_3.4/FlowTracker_Grapher

FlowTrackerのトップページは以下のようになっています。

画面下にあるallやDNS queryなどは自分で定義したフロー条件で、クリックするとグラフが表示されます。画面の上半分で定義して「Establish Tracking」ボタンで保存することにより作成できます。

flowtracker-1

以下の画像は特定のSource-IPで絞ってグラフ化したものです。

flowtracker-2

以下の画像はGroup Trackingの機能で別々に定義したInboundとOutboundを重ね合わせたグラフです。

flowtracker-3

他にも色々と柔軟にグラフ化できますが、本記事は以上で終了とします。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です