Среди стандартных пакетов OpenWRT есть несколько сенсоров NetFlow. fprobe и softflowd базируются на libpcap и основной их недостаток — они не разделяют входящий и исходящий трафик. Альтернативой этим сенсорам выступает форк fprobe который вместо libpcap использует libipulog (iptables ULOG) — fprobe-ulog.
Наиболее предпочтительным вариантом является fprobe-ulog, он лишен недостатка сенсоров базирующихся на libpcap и корректно разделяет входящий и исходящий трафик. Так же, за счет использования интерфейса встроенного в ядро netfilter, он обладает большей производительностью, чем pcap-сенсоры.
Для работы нам потребуются следующие пакеты (приблизительно 60 КБ):
[email protected]:~# opkg install fprobe-ulog libpthread iptables-mod-ulog kmod-ipt-ulog
[email protected]:~# insmod ipt_ULOG
Для работы сенсора необходимо направить информацию о всем трафике проходящем через netfilter в ядре в user-space, где эту информацию будет получать fprobe-ulog и отправлять на коллектор NetFlow.
[email protected]:~# iptables -I INPUT -j ULOG
[email protected]:~# iptables -I OUTPUT -j ULOG
[email protected]:~# iptables -I FORWARD -j ULOG
Здесь можно уже запустить fprobe-ulog и радоваться жизни, но, перед этим я хочу сделать маленькую ремарку.
Для анализа трафика NetFlow я использую ntop, а он идентифицирует уникальность сенсоров по сочетанию ip-адреса и номера порта. fprobe-ulog выбирает порт при запуске случайным образом, т.е. при каждом перезапуске сенсора ntop будет создавать новые интерфесы. Чтобы предотвратить это достаточно добавить одно правило iptables, которое будет выполнять трансляцию любого исходного порта в 2055 (стандартный порт NetFlow) при отправке пакетов на коллектор:
[email protected]:~# iptables -t nat -A POSTROUTING -p udp -o br-lan -d \
--dport 2055 -j SNAT --to :2055
На этом настройка закончена и можно запустить сенсор.
[email protected]:~# fprobe-ulog :2055