Общие сведения
- ipt-netflow — это самый быстрый netflow-сенсор (счётчик) для Линукса.
- Состоит из двух модулей: для ядра и для iptables.
- В стандартные ядро и iptables пока не входит — требует сборки из исходных текстов!
- Обсуждается включение в Debian — см. lists.debian.org/debian-mentors/2011/04/msg00070.html и bugs.debian.org/cgi-bin/bugreport.cgi?bug=620511
Система
- Debian Squeeze (6.0.3) amd64
- Ядро 2.6.38 из backports (на момент подготовки данной документации — самое свежее)
Сборка на тестовой системе
- Устанавливаем необходимые пакеты:
apt-get install -t squeeze-backports linux-headers-2.6.38-bpo.2-amd64 apt-get install -t squeeze-backports quilt debhelper autotools-dev iptables-dev dkms pkg-config
- Скачиваем и распаковываем sourceforge.net/projects/ipt-netflow/files/ipt-netflow
- Компилируем и устанавливаем в сборочную систему:
cd ./ipt_netflow-* ./configure make all make install depmod
- Делаем архив для установки на шлюзе:
find /lib -name "*NETFLOW*" | xargs tar czf \ /tmp/ipt_netflow-$(modinfo -F version ipt_NETFLOW)-$(uname -r).tar.gz
Установка на рабочей системе
- Разворачиваем из архива
tar xzf /tmp/ipt_netflow-*-*.tar.gz -C / depmod
- Настраиваем параметры загрузки (полный список параметров):
echo options ipt_NETFLOW destination=127.0.0.1:9996 > /etc/modprobe.d/netflow.conf
- Загружаем и проверяем состояние:
modprobe ipt_NETFLOW sysctl -a | grep net.netflow
- Пускаем трафик через сенсор:
iptables -A FORWARD -j NETFLOW
- Проверяем подсчёт:
iptables -nvL FORWARD | grep NETFLOW tcpdump -c5 -npi lo port 9996
- Включаем автозагрузку:
echo ipt_NETFLOW >> /etc/modules
- Отключаем обновление ядра:
echo linux-image-2.6.38-bpo.2-amd64 hold | dpkg --set-selections
- Если коллектор находится на другом компьютере, то т.к. в момент загрузки модуля интерфейсы и маршрутизация ещё не настроены, установка связи с коллектором может завершиться с ошибкой ядра 101 («destination unreached»). Чтобы её обойти, повторно устанавливаем соединение из /etc/rc.local:
f="/proc/sys/net/netflow/destination" test -e "$f" && d="$(cat $f)" && echo "$d" > "$f"