LoginSignup
8
14

More than 5 years have passed since last update.

netflowはじめてみた

Last updated at Posted at 2017-05-12

netflow は前から試してみたかったのだけれど、対応しているものを常設するのも億劫で手を出せていなかった。Linux 箱で組んで入れてみたものの、「ずっと動かすのもなー」とか「電源落ちたらネットワークも断だなー」とか考えて困っていた。そうしていたら、気が付いたらmirror ポート設定できるスイッチングハブが2000円台で買えるようになっていて、これ使えそう!

こんな感じに組んだ。

 upstream
   |
 +-+-------------+
 |   TL-SG105E   |
 +-+-------+---+-+
   |       |   |(mirror)
   |       |   |
 +-+--+  +-+---+-+
 | PC |  | Linux |
 +----+  +-------+

upstream の ingress, egress を mirror ポートに出す設定を入れる。

Linux 側ではこれらを準備する。なお Linux はここでは Ubuntu 17 を使う。

データの流れは promisc interface -> ipt-NETFLOW -> (netflow) -> nprobe -> (zeromq) -> ntopng のようになる。IPV6 対応させたいので netflow v10 であるとろの ipfix を使う。

interfaces

mirror に繋がっているインターフェースが ethX だったとする。NetworkManager にはミラーポートにパケットを流して欲しくないので、/etc/network/interfaces 管理にするなど対策を講じる。

/etc/network/interfaces
auto ethX

iface ethX inet manual
  pre-up ifconfig $IFACE up promisc
  post-down ifconfig $IFACE down

ipt-NETFLOW

普通にやると Linux が upstream と通信したパケットもミラーされて送られてくるので、そのアドレスが再び解釈されて 127.0.0.1 に変換されたりする。これを防ぐために PREROUTING チェーンで処理することになる。PREROUTING で処理するためには ipt-NETFLOW は promisc オプションを有効にしてコンパイルしないといけないと README.promisc に書いてある。

/etc/sysctl.d/60-netflow.conf
net.ipv6.conf.ethX.disable_ipv6=1
/etc/modprobe.d/netflow.conf
options ipt_NETFLOW protocol=10 promisc=1

上記の kernel パラメータを有効にした後、netfilter の設定を入れる。module parameter はsysctl だと上手く反映されなかったりしたので、modprobe 時点で設定するようにしています(原因未調査)。

iptables -A PREROUTING -t raw -i ethX -j NETFLOW
ip6tables -A PREROUTING -t raw -i ethX -j NETFLOW
/etc/init.d/netfilter-persistent save

nprobe, ntopng

公式ドキュメント に従ってインストール。

nprobe

nprobe は少し癖がある。systemd のファイルは用意されていない。いずれにせよ、collector モードで動作させるので、次のような設定ファイルを用意する。

/etc/nprobe/nprobe-none.conf
-g /var/run/nprobe.pid
--collector-port 2055
-i none
-n none
--zmq tcp://127.0.0.1:1234
-V 10

/etc/nprobe/nprobe-none.start という名前の空ファイルを用意しておくと、起動されるようになる。systemd の互換機能を使えば大丈夫。

$ systemctl enable nprobe

ntopng

ntopng は通常の systemd ファイルで起動するようにできている。デフォルトの設定では、各 netdev を対象として分析を行うようになっている。今回は zeromq プロトコルで nprobe から受け取るので、次のように設定する。

/etc/ntopng/ntopng.conf
--community
-G=/var/run/ntopng.pid
-i=tcp://127.0.0.1:1234

これも systemd から起動するようにしておく。

$ eystemctl enable ntopng
8
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
14