目次
- これまでの記事について
- ネットワーク構成
- はじめに
- 事前準備
- FlowViewerの設定
- FlowViewerのダウンロードと設置
- 設定ファイルの修正
- ディレクトリ作成と権限付与
- 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にアクセスすると、以下のような画面が表示されます。
適当に条件を指定して「Generate Report」をクリックすると、以下のようにフローの詳細が表示されます(実際はモザイク箇所にIPアドレスが表示されています)
次にFlowGrapherの例を紹介します。FlowViewerからFlowGrapherへの切替は、先ほどの画面の上の方にある黄色い画像の「FlowGrapher」の箇所をクリックします。
上記の画像の例では、6:00~7:00の53番ポート宛のフローで絞込みを行っています。「Generate Graph」をクリックすると以下のようにグラフとフローの一部が表示されます(先ほどと同じく、実際はモザイク部分にIPアドレスが記載されています)。
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.4user=www-data RRDTOOL_PATH=/usr/binRETVAL=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 fiPERL5LIB=/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; doif ! /usr/bin/killall -2 $i; thenif ! /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」ボタンで保存することにより作成できます。
以下の画像は特定のSource-IPで絞ってグラフ化したものです。
以下の画像はGroup Trackingの機能で別々に定義したInboundとOutboundを重ね合わせたグラフです。
他にも色々と柔軟にグラフ化できますが、本記事は以上で終了とします。