OpenWRT:softflowd + Ubuntu:nfdumpでnetflowの実験
[technology] Ubuntu上でnfdump(nfcapd)を動かし、netflow情報を収集する
下記の記事の続きです。
rc30-popo.hatenablog.com
rc30-popo.hatenablog.com
さて、Ubuntu 18.04 LTS上でnfdumpをビルドし動かせる様になったのでOpenWRT上で起動させたsoftflowd(netflow exporter)が吐き出すフロー情報をUbuntu上のnfdumpに拾わせてみます。
以下の説明でIPアドレスは以下の通りです。
IPアドレス | ノード | netflowソフトウェア |
---|---|---|
192.168.11.254 | OpenWRT機 | softflowd(netflow exporter) |
192.168.11.252 | Ubuntu 18.04 LTS: netflow collector | nfdump,nfcapd(netflow collector) |
- OpenWRT側でsoftflowdを起動
まず/etc/config/softflowdを下記の様に設定します。
host_portに書かれた9995はUbuntu側で動かすnfcapd(netflow collector)のデフォルト受信ポートです。
(nfcapd側のオプションで変更可能)# cat /etc/config/softflowd config softflowd option enabled '1' option interface 'br-lan' option pcap_file '' option timeout 'maxlife=60' option max_flows '8192' option host_port '192.168.11.252:9995' option pid_file '/var/run/softflowd.pid' option control_socket '/var/run/softflowd.ctl' option export_version '5' option hoplimit '' option tracking_level 'full' option track_ipv6 '0' option sampling_rate '1'
設定ファイルを作成したら
# /etc/init.d/softflowd start
で起動します。
- Ubuntu側でnfcapd起動
下記の通り、収集したフロー情報をファイルに書くためのディレクトリを作成し、そのディレクトリ名を指定してnfcapdを起動します。$ mkdir netflow $ nfcapd -w -D -l ~/netflow -t 600
- w: ファイルに書き出す
- D: デーモンモードで起動
- l: 書き込み先のディレクトリを指定
- t: 書き込み先のファイルをローテートする時間(デフォルト300sec)
上記設定では10分毎に~/netflow下にnfcapd.yyyymmddHHMMといった感じのファイルが増えていきます。
$ ls ~/netflow nfcapd.201902241240 nfcapd.201902241300 nfcapd.current.27001 nfcapd.201902241250 nfcapd.201902241310
- 収集したフロー情報をダンプ
nfcapdで収集されたデータはバイナリフォーマットで、そのままでは人間には読めないため、nfdumpコマンドを使います。
とりあえず1ファイルをヒューマンリーダブルなデータにするには-rオプションで対象ファイルを指定します。$ nfdump -r ~/netflow/nfcapd.201902241300 Date first seen Duration Proto Src IP Addr:Port Dst IP Addr:Port Packets Bytes Flows 2019-02-24 13:08:15.760 63.357 TCP 192.168.11.13:43802 -> 192.168.11.254:22 70 4576 1 2019-02-24 13:08:15.760 63.357 TCP 192.168.11.254:22 -> 192.168.11.13:43802 51 5480 1 2019-02-24 13:08:52.549 64.810 TCP 107.23.96.251:443 -> 192.168.11.254:40740 6 990 1 2019-02-24 13:08:52.549 64.810 TCP 192.168.11.254:40740 -> 107.23.96.251:443 7 2307 1 2019-02-24 13:08:52.706 64.652 TCP 192.168.11.13:43466 -> 192.168.11.254:8118 7 925 1 2019-02-24 13:08:52.706 64.652 TCP 192.168.11.254:8118 -> 192.168.11.13:43466 7 1180 1 2019-02-24 13:08:29.728 11.328 TCP 192.168.11.13:44086 -> 192.168.11.254:22 1129 1.6 M 1 2019-02-24 13:08:29.728 11.328 TCP 192.168.11.254:22 -> 192.168.11.13:44086 166 12758 1 Summary: total flows: 8, total bytes: 1.6 M, total packets: 1443, avg bps: 126920, avg pps: 14, avg bpp: 1117 Time window: 2019-02-24 13:08:15 - 2019-02-24 13:09:57 Total flows processed: 8, Blocks skipped: 0, Bytes read: 568 Sys: 0.003s flows/second: 2392.3 Wall: 0.003s flows/second: 2535.7
ほとんどプライベートセグメント上のやり取りですが、proxyからのamazonawsへのアクセスが見えています。
複数ファイル纏めて見たい場合は-Rオプションを使います。$ nfdump -R netflow/nfcapd.201902241240:nfcapd.201902241310 > nfdata.txt
こんな感じにすると、nfcapd.201902241240〜nfcpad.201902241310までを纏めてテキスト表示に変換してくれます。
出力フォーマットを変えてみます。デフォルトだと情報量が少ないので、下記の様に-o extendedを付けてみます。
TCPセッションだとTCPのflag情報が出てきます。Tosマーキングについても情報が出てきます。$ nfdump -r ~/netflow/nfcapd.201902241300 -o extended Date first seen Duration Proto Src IP Addr:Port Dst IP Addr:Port Flags Tos Packets Bytes pps bps Bpp Flows 2019-02-24 13:08:15.760 63.357 TCP 192.168.11.13:43802 -> 192.168.11.254:22 ...AP... 0 70 4576 1 577 65 1 2019-02-24 13:08:15.760 63.357 TCP 192.168.11.254:22 -> 192.168.11.13:43802 ...AP... 0 51 5480 0 691 107 1 2019-02-24 13:08:52.549 64.810 TCP 107.23.96.251:443 -> 192.168.11.254:40740 ...AP... 0 6 990 0 122 165 1 2019-02-24 13:08:52.549 64.810 TCP 192.168.11.254:40740 -> 107.23.96.251:443 ...AP... 0 7 2307 0 284 329 1 2019-02-24 13:08:52.706 64.652 TCP 192.168.11.13:43466 -> 192.168.11.254:8118 ...AP... 0 7 925 0 114 132 1 2019-02-24 13:08:52.706 64.652 TCP 192.168.11.254:8118 -> 192.168.11.13:43466 ...AP... 0 7 1180 0 146 168 1 2019-02-24 13:08:29.728 11.328 TCP 192.168.11.13:44086 -> 192.168.11.254:22 ...AP..F 0 1129 1.6 M 99 1.1 M 1402 1 2019-02-24 13:08:29.728 11.328 TCP 192.168.11.254:22 -> 192.168.11.13:44086 ...AP..F 0 166 12758 14 9009 76 1 Summary: total flows: 8, total bytes: 1.6 M, total packets: 1443, avg bps: 126920, avg pps: 14, avg bpp: 1117 Time window: 2019-02-24 13:08:15 - 2019-02-24 13:09:57 Total flows processed: 8, Blocks skipped: 0, Bytes read: 568 Sys: 0.004s flows/second: 1847.6 Wall: 0.003s flows/second: 2452.5
さて、これでOpenWRTベースのProxyサーバーに仕掛けたnetflow exporterからフロー情報を収集可能になりました。
1時間くらいフロー収集してみたので、このデータをjubatusに放り込んでアノマリ検知出来るか?とか試してみたいと思います。一応普通のWebアクセスやスマフォアプリに混ぜてnmapでのOpenWRTに対するポートスキャンを掛けてみたのですが...果たして(続け...)
nfdump/nfcapdの使い方については下記を参照。
github.com
softflowdに関しては下記。
github.com