FlowScan + CUFlow on Debian
Debian squeeze で flow-tools + FlowScan + CUFlow を動かしてみるメモ。以前(id:stereocat:20100617:1276786276) ntop 入れていたのだけどオプション細かめに設定してしばらく放置していたら /var 食いつぶしてそれ以来使っていないので。解析をやるのであれば ntop よりは flow-tools でデータ残しておいた方がいろいろやれそうだなあと思っていたところで良い本が出たので。参考書はこれ。
ネットワークフロー解析入門 flow-toolsによるトラブルシューティング
- 作者: Michael W. Lucas,株式会社クイープ
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2011/02/28
- メディア: 大型本
- クリック: 21回
- この商品を含むブログ (3件) を見る
Device Setup
機器のセットアップは前に書いた(id:stereocat:20100617:1276786276)ので省略。
Install
本だと原則ソースから手動で入れるやり方になっているけどそれはそれでやっぱり面倒なので(ぉ package install してしまう。
$ aptitude search flowscan p flowscan - flow-based IP traffic analysis and visualization tool p flowscan-cuflow - Flowscan module combining CampusIO and SubNetIO p flowscan-cugrapher - A CGI interface for flowscan-cuflow
aptitude install flowscan-cuflow で全部まとめて入れる。このとき、flow-tools も一緒にはいるのだけど、上の本(p.39)によれば
flow-tools 0.68 は使わないこと。このバージョンには小さな問題がいくつもあり、64ビットシステムでは正常に動作しない(64ビットシステムで動作するように見えるが、実際にはデータを破壊する。これならまったく動作しない方がましである。
とのこと。今回 debian squeeze だと p.40 の脚注にあるとおり flow-tools/0.68-12 (正確には Version: 1:0.68-12+b1) でした。気になるなら以下のサイトからソースを落としてインストールする。インストールは例によって ./confugre && make && make install で普通にコンパイルできた。デフォルトだと /usr/local/flow-tools 下にインストールされる。
flow-tools/flow-capture setup
まずはデータを集めておかないと何もできない。package install しておけば起動スクリプトとか設定ファイルが入っているので flow collector である flow-capture を起動する。
- /etc/flow-tools/flow-capture.conf
- まあオプション並べておくだけなのだけど。
-w /var/flow/router -S 5 -n 287 0/192.168.0.1/2055
詳しくは参考書参照…なんだけどまあ一応書いておくと -w はデータの保存先。/var/flow/router/YYYY/YYYY-MM/YYYY-MM-DD/ft-v05.YYYY-MM-DD.HHMMSS+0900 みたいな形で5分おきに flow data が集められる。v05 は netflow ver.5 だから。-n 287 は per day rotate (1day/5min = 288) を、"0/IP/PORT" は "すべてのインタフェースでListenする/IPからのflowを/Portで" を意味する。
chkconfig --list | grep flow して*1自動起動するかどうかを確認。あとは service flow-capture start して *2 起動する。指定したディレクトリにファイルが置かれること/Syslog にメッセージが出力されることを確認。
flowscan
デーモン起動するので flowscan user/group を用意しておく。
ディレクトリの用意
flowscan 用ディレクトリ(ディレクトリはいずれも chown -R flowscan しておく
- /var/lib/flowscan
- /reports/scoreboard: flowscan が出力するレポート用のデータ置き場
- /rrd: flowscan が出力するグラフデータ置き場
- /scandata: flowscan に読ませるフローデータ置き場
後述するけど flowscan はフローデータを呼んでレポートを出力する。HTMLで出力するレポートは http daemon が読める場所を指定する必要がある。今回はレポート用ディレクトリを以下に設定する。このディレクトリも user:flowscan が書き込みできるようになっている必要がある。
- /var/www/flowscan
アクセス権については本にも書いてあるけど、フローデータを httpd の読めるようなところに置くのは危険なので注意。
flowscan setup
- /etc/flowscan.cf
FlowFileGlob /var/lib/flowscan/scandata/ft-v*[0-9] ReportClasses CUFlow WaitSeconds 300
FlowFileGlob にはフローデータを指定する。フローデータはすなわち flow-capture で集めたデータなのだけど、flow-capture ではホスト名/日付ベースのディレクトリにおいてあるので、これを flowscan/scandata ディレクトリに持ってきてあげなければいけないの。そのために flow-capture 側でスクリプトを仕込む (-R option)。
- /etc/flow-tools/flow-capture.conf
-w /var/flow/router -R /usr/local/bin/flow-rotate.sh -S 5 -n 287 0/192.168.0.1/2055
- /usr/local/bin/flow-rotate.sh
#!/bin/sh cp $1 /var/lib/flowscan/scandata/
見たままだけど、-R オプションで flow-capture がファイルを作るときにファイル名を引数としてスクリプトが実行される。単純にコピーしておくだけ。
CUFlow setup
次は CUFlow の設定。
- /etc/flowscan/CUFlow.cf
- 内部ネットワーク指定: flowscan は 内部 <=> 外部 でのやりとりを想定するそうなので内部とはどこか、というのを指定する。宅内は当然プライベートアドレス全域。
Subnet 10.0.0.0/8 Subnet 172.16.0.0/12 Subnet 192.168.0.0/16
-
- サブネットとかホストアドレスとかの指定。フィルタリング条件として使用する。
Network 192.168.1.0/24 internal-seg Network 192.168.1.1 router1 (略)
-
- flowscan RRD ファイル出力先の指定
OutputDir /var/lib/flowscan/rrd
-
- Scoreboard Report の指定、Top10/データディレクトリ/レポート(HTML)ファイルの出力先。
Scoreboard 10 /var/lib/flowscan/reports/scoreboard /var/www/flowscan/topten.html
-
- Aggregate Score Report の指定。Top10/データファイル/レポート(HTML)ファイルの出力先。
AggregateScore 10 /var/lib/flowscan/reports/scoreboard/agg.dat /var/www/flowscan/overall.html
-
- Netflow を出力するホストの指定(複数の機器(センサ)がひとつのコレクタにデータを出力している場合、ホストごとのデータを解析)
Router 192.168.0.1 router1
Exec flowscan
flowscan/scandata にフローデータがコピーされていることを確認して flowscan を起動する。起動スクリプトは /usr/share/doc/flowscan-cuflow/example/flowscan.rc にあるのでこれを /etc/init.d において chkconfig flowscan on しておけば良いだろう。
service flowscan start してログを確認する。……と
Use of uninitialized value in numeric gt (>) at /usr/share/perl5/HTML/Table.pm line 2685.
って出るんだけど、どうやら HTML Report を出すときに HTML::Table が出しているらしい。HTML::Table の問題と思われる。
こういうログが出てれば処理はされてる。
2011/05/02 14:27:20 flowscan-1.020 CUFlow: report took 0 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) 2011/05/02 14:27:20 working on file /var/lib/flowscan/scandata/ft-v05.2011-05-02.094501+0900... 2011/05/02 14:27:20 flowscan-1.020 CUFlow: Cflow::find took 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) for 416 flow file bytes, flow hit ratio: 10/12
flowscan は一度フローデータを呼んで処理すると 300秒(5分) 待機する。待機後にまたフローデータを読み込んでデータを更新する。
CUGrapher setup
RRD Tools でグラフを表示するフロントエンド CGI を動かす。といっても、パッケージインストールした時点で apache のデフォルト CGI ディレクトリ /usr/lib/cgi-bin に CUGrapher.pl が設置されているので、データディレクトリの設定をするとすぐ動く。
--- CUGrapher.pl.orig 2011-05-02 14:33:23.000000000 +0900 +++ CUGrapher.pl 2011-05-02 15:55:53.000000000 +0900 @@ -19,13 +19,13 @@ my $aggregateScoreFile; my $scoreboardFile; # directory with rrd files -my $rrddir; +my $rrddir = "/var/lib/flowscan/rrd/"; # default number of hours to go back my $hours = 48; # duration of graph, starting from $hours ago my $duration; # organization name -my $organization = ""; +my $organization = "my network"; # default graph width my $width = 640; # default graph height @@ -236,7 +236,12 @@ -values => [sort keys %reportName], -default => defParam('report', 'bin') ) ); - my %hours = ( 12 => '12 hours', + my %hours = ( + 1 => '1 hours', + 2 => '2 hours', + 4 => '4 hours', + 6 => '6 hours', + 12 => '12 hours', 24 => '24 hours', 36 => '36 hours', 48 => '48 hours',
rrddir は flowscan が出力している rrd file の場所。organization は CGI のタイトル。hours のところは最短12時間だったので直近分を確認できるように水増ししている。
これであとは http://localhost/cgi-bin/CUGrapher.pl とかで CGI にアクセスすれば良い。