Экспорт NetFlow c роутера OpenWRT

Среди стандартных пакетов OpenWRT есть несколько сенсоров NetFlow. fprobe и softflowd базируются на libpcap и основной их недостаток — они не разделяют входящий и исходящий трафик. Альтернативой этим сенсорам выступает форк fprobe который вместо libpcap использует libipulog (iptables ULOG) — fprobe-ulog.

Наиболее предпочтительным вариантом является fprobe-ulog, он лишен недостатка сенсоров базирующихся на libpcap и корректно разделяет входящий и исходящий трафик. Так же, за счет использования интерфейса встроенного в ядро netfilter, он обладает большей производительностью, чем pcap-сенсоры.

Для работы нам потребуются следующие пакеты (приблизительно 60 КБ):

root@OpenWRT:~# opkg install fprobe-ulog libpthread iptables-mod-ulog kmod-ipt-ulog
root@OpenWRT:~# insmod ipt_ULOG

Для работы сенсора необходимо направить информацию о всем трафике проходящем через netfilter в ядре в user-space, где эту информацию будет получать fprobe-ulog и отправлять на коллектор NetFlow.

root@OpenWRT:~# iptables -I INPUT -j ULOG
root@OpenWRT:~# iptables -I OUTPUT -j ULOG 
root@OpenWRT:~# iptables -I FORWARD -j ULOG 

Здесь можно уже запустить fprobe-ulog и радоваться жизни, но, перед этим я хочу сделать маленькую ремарку.

Для анализа трафика NetFlow я использую ntop, а он идентифицирует уникальность сенсоров по сочетанию ip-адреса и номера порта. fprobe-ulog выбирает порт при запуске случайным образом, т.е. при каждом перезапуске сенсора ntop будет создавать новые интерфесы. Чтобы предотвратить это достаточно добавить одно правило iptables, которое будет выполнять трансляцию любого исходного порта в 2055 (стандартный порт NetFlow) при отправке пакетов на коллектор:

root@OpenWRT:~# iptables -t nat -A POSTROUTING -p udp -o br-lan -d  \
   --dport 2055 -j SNAT --to :2055

На этом настройка закончена и можно запустить сенсор.

root@OpenWRT:~# fprobe-ulog :2055

ntop openwrt