0

Сбор netflow

В процессе организации сбора netflow статистики сделал небольшую заметку на эту тему. Все достаточно просто. Бонусом идет скрипт для хранения netflow данных.

netflow — протокол, предназначенный для учета сетевого трафика.
В целом для сбора и анализа статистики требуется сенсор, коллектор и анализатор.
Сенсором собирается и передается в коллектор следующая информация:

  • Входящий и исходящий сетевой интерфейс;
  • Время начала и конца потока;
  • Количество байт и пакетов в потоке;
  • Адрес источника и назначения;
  • Порт источника и назначения;
  • Номер протокола IP;

и т.д.

Но не в этом суть. Как настроить сенсоры на устройствах не трудно найти в мануалах, статьях…

В моем случае у есть поток netflow статистики, который приходит на 192.168.1.1

О том как настроить коллектор в просторах тоже много статей, но для себя на память запишу.
Я буду использовать в качестве коллектора flow-capture из состава flow-tools
# cd /usr/ports/net-mgmt/flow-tools
# make config

Можно собранную статистику хранить в mysql/pgsql, но у меня в этом нет необходимости.
# make install clean

Далее по стандартной схеме — в /etc/rc.conf прописываю:

# сам демон
flow_capture_enable="YES"
# прописываю путь до pid файла демона
flow_capture_pid="/var/run/flow-capture/flow-capture.pid"
# директория для складывания netflow статистики
flow_capture_datadir="/usr/local/flows"
# на каком адресе слушаю поток
flow_capture_localip="192.168.1.1"
# с какого адреса(ов) слушаю поток
flow_capture_remoteip="0.0.0.0"
# на каком порту слушаю поток
flow_capture_port="9800"
# флаги, где -n 287 количество новых файлов в день. Т.е. каждые 5 минут.
# -N -1 в каком виде складывать статистику (YYYY-MM-DD/flow-file). Подробнее в man flow-capture
# -V версия netflow
flow_capture_flags="-n 287 -N -1 -V 5"

Проверяю, что в правилах ipfw есть разрешающее правило:

# ipfw list

00130 allow udp from { 192.168.1.10 or 192.168.1.20 } to 192.168.1.1 dst-port 9800

из правила видно, что двум хостам разрешено сливать статистику на коллектор

После этого можно спокойно запускать коллектор:
# /usr/local/etc/rc.d/flow_capture start

Если все работает правильно, в /usr/local/etc/rc.d/flow_capture появиться директория YYYY-MM-DD

Новый файл будет создаваться каждые 5 минут. Такие данные не удобно обрабатывать, поэтому для хранения netflow я написал скрипт для складирования накопленных данных.

#!/bin/sh

DIR="/usr/local/flows"
BACKUPDIR="/netflow_backup"
LOGFILE="/var/log/netflow_backup.log"

# tar yesterday netflows
Y=`/bin/date -v-1d +′%Y-%m-%d′`
`/bin/mkdir -p $BACKUPDIR/$Y`
for i in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23;do
`/usr/local/bin/flow-cat -p -z9 -o $BACKUPDIR/$Y/ft-v05.$Y.$i $DIR/$Y/ft-v05.$Y.$i*`
done
`/usr/bin/tar -czf $BACKUPDIR/$Y.tgz $BACKUPDIR/$Y`
`/bin/rm -Rf $BACKUPDIR/$Y`
# rm day before yesterday (need for fast analize yesterday)
YY=`/bin/date -v-2d +′%Y-%m-%d′`
`/bin/rm -Rf $DIR/$YY`
`/bin/ls -l $BACKUPDIR/$Y.tgz >> $LOGFILE`

В итоге netflow данные будут храниться в виде архива, с разбивкой каждого дня по часам.

Добавляю этот файл в cron:

00 01 * * * /bin/sh /usr/adm/scripts/flows_backup.sh > /dev/null 2>&1

Просмотреть статистику можно, например так:
# flow-cat flows/2013-03-01/ft-v05.2013-03-01.04 | flow-stat -f9 -p -S2 | tee reportSrc.txt

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.