VyOS+fluent-plugin-netflowでNetFlowを取得する
NetFlowまわりの諸々を触りたいとき,VyOSだとハードウェアを別途用意しなくても手軽に色々試せて便利.
VyOSの設定
PlixerとManageEngineの記事を見つつ,下の設定さえあればとりあえず動く.Timeout値まわりは環境に合わせて要調整.バージョンはVyOS 1.0.4.
set system flow-accounting netflow version 5 set system flow-accounting interface eth0 set system flow-accounting netflow server 192.168.56.1 port 2055 # system flow-accounting netflow timeout以下は必要に応じて設定 set system flow-accounting netflow timeout expiry-interval 60
なお,BGPのOrigin ASやnext-hopも併せて取得したい場合,/opt/vyatta/bin/sudo-users/quagga_gen_as_network.pl
あたりを実行してやる必要があるように見える (未調査).
現在のフロー情報はshow flow-accounting
で確認できる.
vyos@router1:~$ show flow-accounting flow-accounting for [eth0] Src Addr Dst Addr Sport Dport Proto Packets Bytes Flows 172.16.0.2 10.1.1.100 0 0 icmp 106 8904 1 Total entries: 1 Total flows : 1 Total pkts : 106 Total bytes : 8,904
NetFlowコレクタで確認
ここでは fluent-plugin-netflow をNetFlowコレクタとして使用する.ひとまず動作確認として,受け取ったNetFlowエントリをそのままstdoutに出力させる.
<source> type netflow tag netflow.event bind 0.0.0.0 port 2055 </source> <match netflow.*> type stdout </match>
このconfigでFluentdを起動し,VyOS側でフローの収集対象にしたインタフェース(上の例ではeth0)に適当なトラフィックを流せば,fluentd側でフロー情報が収集できていることが確認できる.
collector$ fluentd (snip) 2014-10-14 22:22:22 +0900 netflow.event: {"version":"5","flow_seq_num":"0","engine_type":"0","engine_id":"0","sampling_algorithm":"0","sampling_interval":"0","flow_records":"1","ipv4_src_addr":"172.16.0.2","ipv4_dst_addr":"10.1.1.100","ipv4_next_hop":"0.0.0.0","input_snmp":"2","output_snmp":"0","in_pkts":"92","in_bytes":"7728","first_switched":"2014-10-14T13:21:44.789Z","last_switched":"2014-10-14T13:22:02.789Z","l4_src_port":"0","l4_dst_port":"0","tcp_flags":"0","protocol":"1","src_tos":"0","src_as":"0","dst_as":"0","src_mask":"0","dst_mask":"0","host":"192.168.56.90"}
手軽に試せて便利なので,もう少し色々と触ってみたい.