netflowでネットワークフロー解析(flow-toolsでフローデータ受信)

投稿者: | 2011年8月28日
Pocket

目次

  1. はじめに
  2. flow-toolsのインストール
  3. flow-captureの設定
  4. flow-captureの実行とコレクタのログファイルについて
  5. flow-printを使用したコレクタのログファイル確認方法
  6. 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の設定を行います。

Pocket

コメントを残す

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