Netflow - мониторинг с ведением статистики

Linux > Netflow - мониторинг с ведением статистики
10.12.2014 18:44:47



Статья:

Netflow - мониторинг с ведением статистики

Для мониторинга с ведением статистики одним из популярных решений является технология Netflow.

Для сбора статистики с помощью Netflow необходимо на нужные интерфейсы повесить специальные Netflow-сенсоры, которые будут собирать информацию и передавать Netflow-коллектору, который может располагаться на другой машине.

Информацию, собранную коллектором, можно визуализировать с помощью графического фронтенда, или же анализировать с помощью утилит командной строки.

В качестве сенсоров можно использовать доступные в стандартных репозиториях fprobe или softflowd.

Сенсор fprobe

Для установки сенсора fprobe можно, например, выполнить такую команду:

sudo apt-get install fprobe

Установщик спросит, на каком интерфейсе слушать трафик, и куда передавать собранную статистику - введите нужные вам параметры и fprobe начнёт работать. Например, для Nfsen в примере ниже нужно указать порт 9995.

Автозапуск при перезапуске сети

Демон fprobe всегда аварийно завершается, когда интерфейс, к которому он привязан, выключается (переходит в состояние DOWN). И не запускается автоматически снова, когда интерфейс возобновляет работу.

Если вам по каким-то причинам нужно периодически переключать интерфейсы, то чтобы обойти данную проблему fprobe можно в файл /etc/network/interfaces после описания интерфейса добавить строчки

        up service fprobe start
        down service fprobe stop

Например, могло бы получится нечто похожее на:

allow-hotplug eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        # fprobe
        up service fprobe start
        down service fprobe stop

Теперь при использовании утилит, которые перечитывают этот файл (ifup и ifdown), fprobe будет корректно завершаться и автоматически запускаться при переключении состояния интерфейса. При этом при старте системы fprobe будет пытаться запуститься два раза (один раз стандартным способом, другой - через/etc/network/interfaces), и хотя у него это не получится, но всё же для порядка лучше автозапуск системного демона fprobe убрать:

sudo update-rc.d -f fprobe remove

Несколько демонов fprobe на одном компьютере

Если вы хотите запустить на одном компьютере сразу несколько демонов fprobe (чтобы слушать несколько интерфейсов), то придётся немного изменить стартовые скрипты.

Для начала отредактируйте имеющийся стартовый скрипт /etc/init.d/fprobe, заменив в нём строчку

NAME=fprobe

на строчку

NAME="fprobe[0]"

И, кроме этого, строчку

DAEMON_OPTS="-i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"

на строчку

DAEMON_OPTS="-l 1:0 -i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"

Первое число добавленного параметра запуска -l («1») говорит fprobe использовать syslog для журналирования, а второе является идентификатором процесса. Именно второе число и нужно менять при запуске нескольких копий fprobe, и оно же должно стоять в квадратных скобочках в параметре NAME соответствующего стартового скрипта.

Теперь, чтобы создать все необходимые параметры и скрипты для запуска второй копии fprobe, скопируйте /etc/init.d/fprobe в /etc/init.d/fprobe_1:

sudo cp /etc/init.d/fprobe /etc/init.d/fprobe_1

И /etc/default/fprobe в /etc/default/fprobe_1:

sudo cp /etc/default/fprobe /etc/default/fprobe_1

Отредактируйте /etc/default/fprobe_1 для работы со вторым интерфейсом.

Теперь надо отредактировать стартовый скрипт /etc/init.d/fprobe_1 для второго процесса fprobe. Замените числа в параметре NAME и DAEMON_OPTS на нужные:

NAME="fprobe[1]"
DAEMON_OPTS="-l 1:1 -i$INTERFACE $OTHER_ARGS $FLOW_COLLECTOR"

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

# Include fprobe defaults if available
if [ -f /etc/default/fprobe ] ; then
        . /etc/default/fprobe
fi

должно получится что-то вроде:

# Include fprobe defaults if available
if [ -f /etc/default/fprobe_1 ] ; then
        . /etc/default/fprobe_1
fi

Также в новых версиях Ubuntu в начале этого файла содержится специальный комментарий для системы загрузки. Он начинается со строчки

### BEGIN INIT INFO

В этом комментарии также необходимо заменить строчку

# Provides:          fprobe

на строчку

# Provides:          fprobe_1

Убедитесь, что всё работает, как надо. Для этого запустите оба fprobe, потом загляните в любой менеджер процессов (например, htop) и найдите там оба демона.

Если всё нормально, то добавьте второй демон fprobe в автозагрузку командой

sudo update-rc.d fprobe_1 defaults

Конечно, если вы пропишете запуск второго демона fprobe в /etc/network/interfaces, то добавлять его в автозагрузку не стоит.

Таким образом можно запустить сколько угодно демонов fprobe, просто меняя идентификатор.

Коллектор Nfdump и визуализатор данных Nfsen

Nfdump и Nfsen - это коллектор с сопутствующими утилитами и веб-интерфейс визуализации собранных данных. Nfdump доступен в стандартных репозиториях Ubuntu, а Nfsen можно скачать с официального сайта http://nfsen.sourceforge.net/. Там же можно посмотреть скриншоты, чтобы составить представление о том, что такое Nfsen.

В качестве сенсора для этой связки можно использовать любой доступный, например fprobe или softflowd.

Nfdump можно поставить через любой пакетный менеджер, например, командой

sudo apt-get install nfdump

Nfsen необходимо распаковать куда-нибудь на сервер из архива с исходными текстами и выполнить несколько несложных операций. Для начала необходимо поставить все нужные для работы пакеты:

sudo apt-get install apache2 libapache2-mod-php5 librrds-perl libmailtools-perl

После этого зайти в папку etc/ в директории, куда вы распаковали Nfsen, и переименовать находящийся там файл nfsen-dist.conf в nfsen.conf. Это основной конфигурационный файл Nfsen. Его необходимо отредактировать под ваши нужды. Ниже приведены только опции, которые нужно изменить для базовой конфигурации Nfsen:

# Директория, куда установится Nfsen.
$BASEDIR = "/srv/nfsen";
# Если хотим веб-интерфейс поставить в ту же папочку, что и всё остальное
$HTMLDIR    = "${BASEDIR}/www";
 
# Местоположение утилит Nfdump для Ubuntu и Debian
$PREFIX  = '/usr/bin';
 
# Пользователь для запуска nfcapd - демона-коллектора
$USER    = "www-data";
 
# Пользователь и группа для запуска веб-интерфейса
$WWWUSER  = "www-data";
$WWWGROUP = "www-data";
 
# Источники сбора данных - имя, локальный порт, на котором слушать, цвет графика
%sources = (
  'router1'    => { 'port' => '9995', 'col' => '#0000ff', 'type' => 'netflow' },
  'router2'    => { 'port' => '9996', 'col' => '#00ff00', 'type' => 'netflow' },
);

Подробную документацию по доступным возможностям можно почитать на официальном сайте Nfsen.

В Ubuntu 12.04 LTS с Perl 5.14 и nfsen 1.3.6p1 нет import Socket6. В файлах «libexec/AbuseWhois.pm» и «libexec/Lookup.pm» заменить:

use Socket6;

на

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

в ubuntu /debian

apt-get install rrdtool librrds-perl

После редактирования конфига можно установить Nfsen. Для этого достаточно из директории, куда вы его распаковали, выполнить команду

./install.pl etc/nfsen.conf

Всё, что осталось, это запустить Nfsen. В примере выше в качестве директории для установки Nfsen указан путь /srv/nfsen/. В этом случае для запуска можно использовать команду

/srv/nfsen/bin/nfsen start

Чтобы интегрировать Nfsen в систему качестве автоматически запускаемого сервиса выполните две примерно такие команды:

ln -s /srv/nfsen/bin/nfsen /etc/init.d/nfsen
update-rc.d nfsen defaults 20

Теперь, если вы оставили настройки веб-сервера по умолчанию, веб-интерфейс должен быть доступен по адресу http://yourserver/nfsen/nfsen.php.

Учтите, информация начнёт собираться не сразу, так что необходимо некоторое время, перед тем, как на графиках что-то появится. Ну и конечно в сети должны быть сенсоры, посылающие информацию по указанным портам.

Возможности NFsen расширяются при помощи плагинов (sf.net/apps/trac/nfsen-plugins). Для установки плагина его нужно распаковать в подкаталог plugins, а затем подключить в nfsen.conf, взяв за пример имеющиеся там шаблоны.
Например, чтобы отследить только SSH трафик, пишем «src or dst port 22«, при необходимости можно указать IP и прочие параметры. Изначально используется только один профиль — Live, в который записываются данные со всех источников, указанных в nfsen.conf. Чтобы построить графики для различных источников или критериев, следует создать соответствующие профили (Live -> New Profile).