目次
- はじめに
- flow-toolsのインストール
- flow-captureの設定
- flow-captureの実行とコレクタのログファイルについて
- flow-printを使用したコレクタのログファイル確認方法
- flow-reportでフロー解析
サーバ環境
製品名 | OpenBlockS 600/R |
CPU | 600MHz(AMCC PowerPC 405EX) |
メモリ | 1GB(DDR2 SDRAM) |
ストレージ | 8GB(Compact Flash) |
はじめに
前回の記事「netflowでネットワークフロー解析(softflowdでサーバをセンサにする)」で作成したセンサ(Openblocks600にインストールしたsoftflowd)から送信されるフローデータを受信できるよう、コレクタとなるためのflow-toolsを導入します。
参考書はネットワークフロー解析入門 flow-toolsによるトラブルシューティングです。コレクタにはこの本でお勧めのflow-toolsを、グラフ化にはFlowScanとCUFlowを使用します。
FlowScanとCUFlowについては次の記事でまとめます。
ネットワーク構成は前回と同様です。作業対象はOBS-SBY側です。
internet | | | | fa0/1 +-----------+ +-------------+ | |----------------| | | |fa0/5 eth0 | OBS-ACT | | |----------------| (センサ) | | |fa0/3 eth1 +-------------+ | cat2940 | | | +-------------+ | |----------------| | | |fa0/8 eth0 | OBS-SBY | | | | (コレクタ) | +-----------+ +-------------+ |fa0/6 | | | LAN
flow-toolsのインストール
OBS-SBYにコレクタとなるflow-toolsをインストールします。flowscan-cuflowをaptitude installすると、次の記事でまとめるFlowScan、CUFlow(グラフ化で使用)も全てインストールされます。
root@OBS-SBY:~# aptitude install flowscan-cuflow 以下の新規パッケージがインストールされます: defoma{a} file{a} flow-tools{a} flowscan{a} flowscan-cuflow flowscan-cugrapher{a} fontconfig{a} fontconfig-config{a} ksh{a} libboulder-perl{a} libcairo2{a} libcflow-perl{a} libconfigreader-perl{a} libdatrie1{a} libdbi0{a} libexpat1{a} libfont-afm-perl{a} libfont-freetype-perl{a} libfontconfig1{a} libfontenc1{a} libfreetype6{a} libgcrypt11{a} libglib2.0-0{a} libglib2.0-data{a} libgnutls26{a} libgpg-error0{a} libhtml-format-perl{a} libhtml-parser-perl{a} libhtml-table-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a} libldap-2.4-2{a} libmagic1{a} libmailtools-perl{a} libmysqlclient16{a} libnet-patricia-perl{a} libpango1.0-0{a} libpango1.0-common{a} libpcre3{a} libpixman-1-0{a} libpng12-0{a} libpq5{a} librrd4{a} librrds-perl{a} libsasl2-2{a} libsasl2-modules{a} libsocket6-perl{a} libtasn1-3{a} libthai-data{a} libthai0{a} libtimedate-perl{a} liburi-perl{a} libwww-perl{a} libx11-6{a} libx11-data{a} libxau6{a} libxcb-render-util0{a} libxcb-render0{a} libxcb1{a} libxdmcp6{a} libxfont1{a} libxft2{a} libxml-parser-perl{a} libxml2{a} libxrender1{a} mime-support{a} mysql-common{a} python{a} python-minimal{a} python2.6{a} python2.6-minimal{a} rrdtool{a} sgml-base{a} shared-mime-info{a} ttf-dejavu{a} ttf-dejavu-core{a} ttf-dejavu-extra{a} ucf{a} x-ttcidfont-conf{a} x11-common{a} xfonts-encodings{a} xfonts-utils{a} xml-core{a} 更新: 0 個、新規インストール: 83 個、削除: 0 個、保留: 0 個。 27.7 MB のアーカイブを取得する必要があります。展開後に 81.1 MB のディスク領域が新たに消費されます。 先に進みますか? [Y/n/?] Y 取得:1 http://ftp.jp.debian.org/debian/ squeeze/main libmagic1 powerpc 5.04-5 [241 kB] 取得:2 http://ftp.jp.debian.org/debian/ squeeze/main file powerpc 5.04-5 [49.9 kB] 取得:3 http://ftp.jp.debian.org/debian/ squeeze/main libgpg-error0 powerpc 1.6-1 [45.9 kB] ... root@OBS-SBY:~# aptitude show flow-tools パッケージ: flow-tools 新規: yes 状態: インストール済み 自動的にインストールされた: yes バージョン: 1:0.68-12+b1
flowtoolsも依存関係でインストールされましたが、この方法だとflow-tools 0.68-12+b1がインストールされます。
参考書p.39には本バージョンの問題が以下のように指摘されています。
flow-toolsのバージョン0.68は使わないこと。このバージョンには小さな問題がいくつもあり、
64ビットシステムでは正常に動作しない。新しいバージョンを確認し、それをインストールすること。
本書に従うのであれば、http://code.google.com/p/flow-tools/に最新のflow-tools-0.68.5.1.tar.bz2が置いてありますので、以下のようにしてからPATH環境変数とMANPATH環境変数を書き換えて利用しても良いですが、自宅利用ということもあり面倒なのでaptitudeで入れた方で試験してみます。
以下、参考まで(本環境では未実施)。
tar -xf flow-tools-0.68.5.1.tar.bz2 ./configure --prefix=/usr/local/flow make make install
flow-captureの設定
flow-toolsをインストールすると、flow-captureが利用できるようになります。flow-captureには起動シェルが用意されていますので、設定ファイルを修正して起動シェルから起動させるようにします。
flow-captureを起動すると、softflowdから送信されてくるフローデータが受信できます。具体的には、指定されたUDPポートでフローエクスポートを待ち受け、パケットが到着したらフローレコードをディスクに書き込みます。
以下の設定ファイル(flow-capture.conf)に、ファイルを書き出す場所、新しいファイルを作成する頻度、フロー情報のエクスポートが認められている送信元などを指定します。
もともと設定されている定義は全てコメントアウトして以下の設定のみを残しました。
root@OBS-SBY:~# vi /etc/flow-tools/flow-capture.conf -w /var/db/flows -n 287 -S 5 192.168.0.131/192.168.0.113/9995
上記設定で指定しているオプションの意味を以下にまとめます。
-w | ファイルを書き出す場所を指定します。参考書通り/var/db/flowsにします。 |
-n | ログファイルを切り替えるタイミングの指定。1日/287=5分のため、上記287を指定すると5分ごとに新しいログを作成する。 |
-S | このオプションを指定すると、処理したフロー数、受信したパケット数、ドロップしたとみなされるパケット数をsyslogに書き出す。引数(ここでは5のこと)はログメッセージを記録する間隔(分単位)。 |
192.168.0.131/192.168.0.113/9995 | 受信するIPアドレス/送信元IPアドレス/ポート番号を表している。受信するIPアドレスを0とすると、ローカルマシン上の全てのIPアドレスで受信する。送信元IPアドレスを0とすると、あらゆるIPアドレスからのフローデータを受け入れるようになる。 |
-wで指定したファイルを保存するディレクトリを作成します。
root@OBS-SBY:~# mkdir -p /var/db/flows
flow-captureの実行とコレクタのログファイルについて
flow-capture.confの設定が完了したら起動シェルを実行してflow-captureを開始します。
root@OBS-SBY:~# /etc/init.d/flow-capture start Starting flow-capture: flow-capture. root@OBS-SBY:~# ps aux | grep flow root 7531 0.0 0.0 2952 620 ? SNs 16:52 0:00 /usr/bin/flow-capture -w /var/db/flows -n 287 -S 5 192.168.0.131/192.168.0.113/9995 root 7534 0.0 0.0 3452 920 pts/1 SN+ 16:52 0:00 grep flow
flow-captureが起動し、フローエクスポートパケットが届き始めると、本環境の場合は5分ごとに以下のようにコレクタのログファイルが作成されます。
root@OBS-SBY:~# ls -al /var/db/flows/2011/2011-08/2011-08-21/ 合計 20 drwxr-xr-x 1 root root 4096 2011-08-21 17:05 . drwxr-xr-x 1 root root 4096 2011-08-21 17:01 .. -rw-r--r-- 1 root root 5839 2011-08-21 17:05 ft-v05.2011-08-21.170000+0900 -rw-r--r-- 1 root root 84 2011-08-21 17:05 tmp-v05.2011-08-21.170500+0900
tmpが頭に付いているのは一時ファイルであることを表していて、5分後にft-で始まるものに変更し、新しい一時ファイルが作成されます。
ファイル名の後ろの部分はフローファイルが作成された年月日と24時間形式のタイムスタンプで、例えば170000とあった場合は17:00~17:05のフローデータが収容されています。
flow-printを使用したコレクタのログファイル確認方法
上記のft-から始まるファイルはバイナリのため、flow-printを使用して中身を確認します。
root@OBS-SBY:~# cd /var/db/flows/2011/2011-08/2011-08-21/ root@OBS-SBY:/var/db/flows/2011/2011-08/2011-08-21# flow-print < ft-v05.2011-08-21.170500+0900 | less srcIP dstIP prot srcPort dstPort octets packets 49.212.10.53 192.168.0.7 6 80 53156 166070 159 192.168.0.7 49.212.10.53 6 53156 80 12136 81 192.168.0.7 202.224.32.1 17 55877 53 66 1 202.224.32.1 192.168.0.7 17 53 55877 479 1 192.168.0.7 202.224.32.1 17 58755 53 75 1 202.224.32.1 192.168.0.7 17 53 58755 257 1 192.168.0.7 202.224.32.1 17 64507 53 58 1 202.224.32.1 192.168.0.7 17 53 64507 172 1 ...
複数のフローファイルを指定して確認したい場合は、以下のようにflow-catを使用します。
root@OBS-SBY:/var/db/flows/2011/2011-08/2011-08-21# flow-cat ft-v05.2011-08-21.172000+0900 tmp-v05.2011-08-21.172500+0900 | flow-print | less srcIP dstIP prot srcPort dstPort octets packets 192.168.0.1 192.168.0.7 6 2869 54273 686 5 192.168.0.7 192.168.0.1 6 54273 2869 1695 6 192.168.0.1 192.168.0.7 6 2869 54274 1259 5 192.168.0.7 192.168.0.1 6 54274 2869 1212 6 192.168.0.1 192.168.0.7 6 2432 2869 879 5 192.168.0.7 192.168.0.1 6 2869 2432 289 3 ...
フローレコードのヘッダー情報を表示させたい場合は-pフラグを使用します。
root@OBS-SBY:/var/db/flows/2011/2011-08/2011-08-21# flow-print -p < ft-v05.2011-08-21.172000+0900 | less # # mode: normal # capture hostname: OBS-SBY # capture start: Sun Aug 21 17:20:00 2011 # capture end: Sun Aug 21 17:25:00 2011 # capture period: 300 seconds # compress: on # byte order: big # stream version: 3 # export version: 5 # lost flows: 0 # corrupt packets: 0 # sequencer resets: 0 # capture flows: 151 # srcIP dstIP prot srcPort dstPort octets packets 192.168.0.1 192.168.0.7 6 2869 54273 686 5 192.168.0.7 192.168.0.1 6 54273 2869 1695 6 ...
フィルタを使用して特定のトラフィックのみを確認してみます。
root@OBS-SBY:/var/db/flows/2011/2011-08/2011-08-21# vi /etc/flow-tools/cfg/filter.cfg ... filter-primitive TCP type ip-protocol permit tcp ... filter-primitive port80 type ip-port permit 80 fliter-definition TCPport80 match ip-protocol TCP match ip-destination-port port80 ...
filter.cfgには初めから何種類ものfilter-primitiveとfilter-definitionが定義されています。
ここでは、もともとあったfilter-primitive TCPと新たに作成したfilter-primitive port80からfliter-definition TCPport80を作成し、protocol=TCP、source/dest port=80のフローを絞り込みます。
フィルタを適用して絞り込んだトラフィックデータを確認するには以下のように指定します。
root@OBS-SBY:/var/db/flows/2011/2011-08/2011-08-21# flow-cat ft-v05.2011-08-21.173500+0900 | flow-nfilter -F TCPport80 | flow-print | less srcIP dstIP prot srcPort dstPort octets packets 192.168.0.7 124.83.171.139 6 54368 80 819 10 192.168.0.7 216.223.0.209 6 54403 80 523 4 192.168.0.7 216.223.0.211 6 54425 80 533 4 192.168.0.7 124.83.229.235 6 54453 80 190 4 192.168.0.7 216.223.0.211 6 54553 80 747 5 192.168.0.7 43.253.229.172 6 54395 80 13606 40 192.168.0.7 216.223.0.211 6 54578 80 725 4 ...
flow-reportでフロー解析
flow-reportを使用すると、最も多くのトラフィックを送信しているのがどの端末か、といったような統計解析を行うことができます。
例えば以下のコマンドでは、最も送信したoctetsが多い端末の順にソートしています。
他にも色々と解析可能ですが、詳細は参考書をご覧下さい。
root@OBS-SBY:/var/db/flows/2011/2011-08/2011-08-21# flow-cat ft-v05.2011-08-21.173500+0900 | flow-report -v TYPE=ip-source-address -v SORT=+octets # --- ---- ---- Report Information --- --- --- # build-version: flow-tools 0.68 # name: default # type: ip-source-address # options: +header,+xheader,+totals # ip-src-addr-type: address # sort_field: +octets # fields: +key,+flows,+octets,+packets,+duration,+other # records: 32 # first-flow: 1313915701 Sun Aug 21 17:35:01 2011 # last-flow: 1313915941 Sun Aug 21 17:39:01 2011 # now: 1313916171 Sun Aug 21 17:42:51 2011 # # mode: streaming # compress: off # byte order: big # stream version: 3 # export version: 5 # # ['/usr/bin/flow-rptfmt', '-f', 'ascii'] ip-source-address flows octets packets duration 74.125.235.149 1 633659 511 14073 124.83.230.247 1 285258 200 44579 192.168.0.7 128 203788 1265 724826 202.93.71.249 6 133000 130 272494 74.125.153.104 3 80033 76 8313 43.253.229.172 2 75750 109 122038 124.83.203.139 10 38443 60 970 192.168.0.1 32 29350 160 583 124.83.229.235 2 23373 25 49784 ...
以上でflow-toolsの説明は終了です。
次は、取得したデータをグラフ化するため、FlowScanとCUFlowの設定を行います。