ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

OpenWRTでsoftflowd(netflow exporter)を動かす

[technology]softflowd on OpenWRT

さて、昨日のブログに書いたとおり、OpenWRTにsoftflowdをインストールしてまずはnetflow collector無しで軽くテスト。

OpenWRTマシンはBuffaloのBHR-4GRVにOpenWRT 15.05.1 chaos calmerを焼いたものです。
このマシンは普段使いで、proxyサーバー兼DNSキャッシュとして使っています。なので、Webアクセスするとトラフィックがこのマシンを通っていきます。
インストールはopkgで簡単。

# opkg update
# opkg install softflowd

これで終わりです。

そして/etc/config/softflowdを下記の様に設定。
netflow collectorが無いのでexport先を示すhost_portは空のままです。
sampling_rateをデフォルトの100→1に変更
あとtimeoutを60secに設定。(まだ意味は良く判らない)

root@OpenWrt:~# 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      ''
	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'

この状態で、下記でsoftflowdを起動。

/etc/init.d/softflowd start

別のPCのブラウザから適当にWebサイトをアクセスします。(とりあえずimpress watchを)
そして以下のコマンドを打ちます。

# softflowctl dump-flows

これで過去60秒分?のフロー情報がバラバラと表示されます。
DNSアクセス(1.1.1.1)とimpressのサイト(202.218.128.2xx)へのアクセスのフロー情報が表示されます。
192.168.11.254はsoftflowdを動かしているOpenWRTマシンです。(Proxy)

ACTIVE seq:406 [1.1.1.1]:53 <> [192.168.11.254]:29416 proto:17 octets>:87 packets>:1 octets<:71 packets<:1 start:2019-01-30T13:37:41.361 finish:2019-01-30T13:37:41.364 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000 
EXPIRY EVENT for flow 406 in 38 seconds

ACTIVE seq:407 [1.0.0.1]:53 <> [192.168.11.254]:29416 proto:17 octets>:87 packets>:1 octets<:71 packets<:1 start:2019-01-30T13:37:41.362 finish:2019-01-30T13:37:41.365 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000 
EXPIRY EVENT for flow 407 in 38 seconds

ACTIVE seq:408 [192.168.11.254]:45049 <> [202.218.128.212]:443 proto:6 octets>:2059 packets>:15 octets<:19261 packets<:19 start:2019-01-30T13:37:41.367 finish:2019-01-30T13:37:41.432 tcp>:1a tcp<:1a flowlabel>:00000000 flowlabel<:00000000 
EXPIRY EVENT for flow 408 in 38 seconds

ACTIVE seq:409 [192.168.11.254]:45917 <> [202.218.128.210]:443 proto:6 octets>:2423 packets>:22 octets<:21307 packets<:20 start:2019-01-30T13:37:41.377 finish:2019-01-30T13:37:41.507 tcp>:1a tcp<:1a flowlabel>:00000000 flowlabel<:00000000 
EXPIRY EVENT for flow 409 in 38 seconds

ACTIVE seq:410 [1.1.1.1]:53 <> [192.168.11.254]:15716 proto:17 octets>:85 packets>:1 octets<:69 packets<:1 start:2019-01-30T13:37:41.380 finish:2019-01-30T13:37:41.384 tcp>:00 tcp<:00 flowlabel>:00000000 flowlabel<:00000000 
EXPIRY EVENT for flow 410 in 38 seconds

ACTIVE seq:411 [192.168.11.254]:54502 <> [202.218.128.203]:443 proto:6 octets>:2265 packets>:19 octets<:29351 packets<:25 start:2019-01-30T13:37:41.387 finish:2019-01-30T13:37:41.415 tcp>:1a tcp<:1a flowlabel>:00000000 flowlabel<:00000000 
EXPIRY EVENT for flow 411 in 38 seconds

この抜粋には出ていませんが、このOpenWRT機(Proxy)にアクセスするPCとのフローも表示されます。

次に先ほどの/etc/config/softflowdのhost_portに'192.168.11.13:9999'を書き込んでsoftflowdをrestartさせます。
192.168.11.13はUbuntu入れたPCです。192.168.11.13上でtcpdumpを動かしてみると下記の様にOpenWRT機からnetflowパケットが飛んできているのが確認できました。

toy@DELL-0001:~$ sudo tcpdump dst port 9999 -v
[sudo] toy のパスワード: 
tcpdump: listening on xenbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:59:34.421961 IP (tos 0x0, ttl 64, id 17692, offset 0, flags [DF], proto UDP (17), length 1444)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1416
22:59:34.422055 IP (tos 0x0, ttl 64, id 17693, offset 0, flags [DF], proto UDP (17), length 1444)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1416
22:59:34.422077 IP (tos 0x0, ttl 64, id 17694, offset 0, flags [DF], proto UDP (17), length 916)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 888
22:59:39.661507 IP (tos 0x0, ttl 64, id 17803, offset 0, flags [DF], proto UDP (17), length 1492)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1464
22:59:39.661585 IP (tos 0x0, ttl 64, id 17804, offset 0, flags [DF], proto UDP (17), length 1492)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1464
22:59:39.661603 IP (tos 0x0, ttl 64, id 17805, offset 0, flags [DF], proto UDP (17), length 1492)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1464
22:59:39.661687 IP (tos 0x0, ttl 64, id 17806, offset 0, flags [DF], proto UDP (17), length 1492)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1464
22:59:39.662287 IP (tos 0x0, ttl 64, id 17807, offset 0, flags [DF], proto UDP (17), length 1492)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1464
22:59:39.662346 IP (tos 0x0, ttl 64, id 17808, offset 0, flags [DF], proto UDP (17), length 1396)
    OpenWrt.lan.35165 > 192.168.11.13.9999: UDP, length 1368
^C
9 packets captured
9 packets received by filter
0 packets dropped by kernel

次はnetflow collectorを設置して実験してみたいと思います。

ところでこんなのがあるんですね。このサイズでOpenWRTプリインでRAM128MBはちょっと魅力的だな。
値段も安いし。(って、既にOpenWRT機3台あるのにどーする俺w)

以下の記事に続きます。
rc30-popo.hatenablog.com