Установка и настройка nfdump + nfsen для сбора NetFlow

Автор: | 23.06.2015

Вводная

Последнее время приходится много ковыряться с настройкой NetFlow коллекторов. Т.к. я работаю в крупном провайдере, то приходится хранить очень много данных, чтобы как минимум отвечать на запросы из правоохранительных органов. Вот и решил написать небольшую инструкцию, дабы она хранилась не только у меня в текстовом файле. Может кому еще пригодится. Версия nfdump на момент установки 1.6.13.

Установка

Есть два способа установить nfdump — просто установить пакет из дистибутива (плясать с бубном не надо, только поправить конфигурационные файлы и все) и собрать самому. Т.к. у меня был задача извлекать из NetFlow данные о том, какой внутренний адрес в какой внешний был транслирован, то первый вариант меня не устроил, потому что пакет собран без необходимой опции —enable-nel. Поэтому остается только второй вариант. Также стоит отметить, что можно установить nfdump без nfsen — об этом напишу в конце

Для этого установим необходимы пакеты:

apt-get install rrdtool librrds-perl librrdp-perl librrd-dev \
libmailtools-perl php5 bison flex apache2 \
libapache2-mod-php5 php5-common build-essential checkinstall \
autoconf automake wget

Дальше я столкнулся с проблемой, что некоторые модули perl не были установлены. Устанавливаем:

cpan Mail::Header; \
cpan Mail::Internet; \
cpan YAML; \
cpan Socket6

Скачиваем исходники:

wget "http://downloads.sourceforge.net/project/nfsen/stable/nfsen-1.3.6p1/nfsen-1.3.6p1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fnfsen%2F&ts=1421315511&use_mirror=softlayer-ams" -O nfsen-1.3.6p1.tar.gz
wget "http://downloads.sourceforge.net/project/nfdump/stable/nfdump-1.6.13/nfdump-1.6.13.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fnfdump%2F&ts=1433339159&use_mirror=softlayer-ams" -O nfdump-1.6.13.tar.gz

Распаковываем:

tar -xf nfsen-1.3.6p1.tar.gz
tar -xf nfdump-1.6.13.tar.gz

Собираем с нужными опциями:

cd nfdump-1.6.13
./configure --enable-nsel --enable-nel \
--enable-nfprofile --enable-nftrack \
--enable-fixtimebug

Компилим и собираем пакет при помощи checkinstall:

make; \
checkinstall

Конфигурация

Теперь надо разобраться с конфигурацией. Можно сейчас, можно потом. Но лучше сразу.

Конфигурация для nfdump задается в nfsen.conf.

cd nfsen-1.3.6p1/etc/; \
cp nfsen-dist.conf nfsen.conf

Далее правим некоторые параметры в файле — в принципе там все описано достаточно подробно что и для чего, так что не буду приводить тут подробную настройку. Самим надо будет решить что и где будет располагаться. Но некоторые параметры стоит упомянуть:

$BINDIR — по умолчанию указано /usr/bin. Но так как мы сами собирали, то пакет по умлочанию установился в /usr/local/bin.

$USER — нужно указать пользователя, под которым все будет работать. Лучше создать своего. ниже будет для этого команда

$WWWUSER и $WWWGROUP — лучше всего указать www-data, чтобы не было проблем с доступом к файлам nfsen, который будет всякую статистику выводить.

$EXTENSIONS — здесь указываются все расширения, которые нужно учитывать. В файле есть примеры, а полный список можно найти в man’е. Для того чтобы принимать события NAT Event Logging, которые позволят вычислить какой внутренний адрес в какой внешний был транслирован, надо добавить опцию nel (в man’е о ней ни слова). Также была замечена проблема со временем, если не добавлять опцию 26. Вообще по опыту могу сказать, что какие бы опции вы не выпиливали, на объем это не повлияет. Хотя может это у меня руки кривые.

%sources — один из главных параметров. Здесь указываются источники. Формат записи прост и показан прям в файле.

 

Теперь надо добавить пользователя, под которым будет работать демон:

useradd -d /home/netflow -G www-data -m -s /bin/false netflow

Установка nfsen

perl install.pl etc/nfsen.conf

Так как нет в с собой нормального init-скрипта для nfsen (а писать самому было очень лень), то я просто сделал так:

ln -s /usr/bin/nfsen /etc/init.d/nfsen

Стартовать через /etc/init.d/nfsen start будет. И останавливаться тоже. Может позже все-таки и сделаю нормальный стартовый скрипт. Ну или найду.

 Исправление ошибок

В процессе запуска были обнаружены некоторые ошибки в самом nfsen. Не знаю — может это просто на момент скачивания был не доделанный демон (хотя было написано что stable) или еще что, но на форумах нашел решение.

Надо в паре файлов изменить пару строк:

cd /usr/local/nfsen/libexec
nano AbuseWhois.pm

И комментим строку, где импортируется библиотека Socket6 и дописываем:

Socket6->import(qw(pack_sockaddr_in6 unpack_sockaddr_in6 inet_pton getaddrinfo));

Тоже самое делаем и с файлом Lookup.pm

Настройка apache

Тут все просто — просто добавляем конфигурацию виртуального хоста и релоадим апач.

 

<VirtualHost *:80>
   ServerAdmin admin@mydomain.com
   ServerName netflow.mydomain.com
   ServerAlias netflow
   DocumentRoot /var/www/nfsen
   Alias /nfsen /
   <Directory />
      DirectoryIndex nfsen.php
      Options FollowSymLinks
      AllowOverride None
      require all granted
   </Directory>
   <Directory /var/www/nfsen>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride None
      require all granted
   </Directory>
   ErrorLog ${APACHE_LOG_DIR}/nfsen-error.log
   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn
   CustomLog ${APACHE_LOG_DIR}/nfsen-access.log combined
</VirtualHost>


Дальше просто релоадим апач.

Настройка nfdump без nfsen.

Для этого пропускаем все пункты, связанные с nfsen, создаем директорию /etc/nfdump, в нем создаем файл конфигурации nfcapd.conf.

В него прописываем параметры, с которыми nfcapd будет запускаться. Например вот так:

-s 8 -p 9990 -b ххх.ххх.ххх.ххх -4 -I <exporter> -l /var/flows/<exporter> -S 1 -T nel,+all,+26 -wt 300 -P /var/run/nfcapd/<exporter.pid -D -u1000 -g1000 -B 400000 -z -e

Понятно, что /var/flows нужно создать самому. Также uid пользователя и группы может отличаться.

И в этот раз у меня есть нормальный init-скрипт, который все это может запустить.

#!/bin/sh -e
#
### BEGIN INIT INFO
# Provides: nfcapd
# Required-Start: $local_fs $remote_fs $syslog $network $time
# Required-Stop: $local_fs $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: dumps NetFlow data
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/nfcapd
CONFIG=/etc/nfdump/nfcapd.conf
PID_DIR=/var/run/nfcapd/
NAME=nfcapd
DESC=nfcapd
umask 0027
test -f $DAEMON || exit 1
test -f $CONFIG || exit 1
pid=`pidof $DAEMON` || true
case "$1" in
   start)
      if [ ! -d $PID_DIR ]; then
         mkdir $PID_DIR
         chown netflow:netflow $PID_DIR
      fi
      if [ "$pid" ]; then
         echo "error: nfcapd is already running."
         exit 0
      fi
      IFS='
     '
      lines=`grep -E " |\t" ${CONFIG} | grep -v "^#"`
      echo -n "Starting $DESC: "
      for args in $lines; do
         echo $args
         IFS=" "
         echo $DAEMON ${lines}
         ${DAEMON} ${lines}
      done
      echo "$NAME."
      ;;
   stop)
      echo -n "Stopping $DESC: "
      pid=`pidof $DAEMON` || true
      if [ "$pid" ]; then
         kill -TERM $pid >/dev/null 2>&1
      fi
      echo "$NAME."
      ;;
   restart|force-reload)
      $0 stop
      $0 start
      ;;
   *)
      N=/etc/init.d/$NAME
      echo "Usage: $N {start|stop|restart|force-reload}" >&2
      exit 1
      ;;
esac
exit 0

 

Собственно на этом всё.

Установка и настройка nfdump + nfsen для сбора NetFlow: 3 комментария

  1. Сергей Соколов

    Спасибо за статейку. Если не умничать, как я делал во время установки, а четко сделать по написанному, то всё прекрасно работает!

    1. lerroy Автор записи

      Если бы знали сколько я раз умничал прежде чем пришел к этому =)

Добавить комментарий для lox@salatpower.ru Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *