Вводная
Последнее время приходится много ковыряться с настройкой 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
Собственно на этом всё.
fuck you
Спасибо за статейку. Если не умничать, как я делал во время установки, а четко сделать по написанному, то всё прекрасно работает!
Если бы знали сколько я раз умничал прежде чем пришел к этому =)