В процессе организации сбора 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