Это старая версия документа.


В этой статье собраны способы мониторинга трафика, проходящего через сервер. Чаще всего задача мониторинга встаёт для роутеров, обеспечивающих связь с интернетом.

Мониторинг в реальном времени

Для мониторинга трафика в реальном времени можно использовать утилиту jnettop:

sudo jnettop

Или, как вариант, vnstat с ключём –live:

sudo vnstat --live

Можно также воспользоваться достаточной удобной утилитой с псевдографическим интерфейсом, которая называется iptraf:

sudo iptraf

Журналирование активности средствами iptables

Стандартный пакетный фильтр iptables иногда может быть очень полезен для анализа какого-то конкретного типа трафика. iptables позволяет записывать в системный журнал активность по выбранным критериям. Например, с помощью iptables можно легко отследить, какой компьютер посылает данные во внешнюю сеть по 25 порту (SMTP), таким образом вычислив заражённый компьютер в локальной сети.

Для записи данных в файл журнала предназначено действие LOG (и более мощное ULOG). Подробный его синтаксис и возможные параметры можно посмотреть в документации по iptables.

Важным аспектом является то, что iptables сам не ведёт файлы журналов. Вместо этого действие LOG отправляет информацию системному демону журналирования, и уже он записывает её в журнал, коим чаще всего является /var/log/syslog. В итоге получается каша, в которой очень непросто разобраться. Поскольку iptables сам не занимается ведением журнала, то перенаправить запись в отдельный файл средствами самого iptables невозможно.

К счастью, в Ubuntu существует простой способ рассортировать данные по нужным журналам средствами используемой системы журналирования rsyslog. Достаточно при записи в журнал добавлять некий уникальный префикс. Например, вот так:

sudo iptables -t filter -A FORWARD -s 192.168.0.0/16 -m tcp -p tcp --dport 25 -j LOG --log-prefix "iptables: "

Теперь все записи в журнале, соответствующие этому критерию, будут начинаться с «iptables: ». Осталось добавить правило сортировки в систему журналирования. Для этого можно создать файл /etc/rsyslog.d/10-iptables.conf со следующим содержанием:

:msg, contains, "iptables: "    -/var/log/iptables.log
& ~

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

После создания нового файла конфигурации не забудьте переконфигурировать rsyslog:

sudo /etc/init.d/rsyslog reload

Теперь вся активность, соответствующая добавленному правилу iptables, будет записываться в файл /var/log/iptables.log. Если вы хотите надолго оставить журналирование, то не забудьте добавить этот файл в систему ротации логов logrotate, а то в какой-то момент у вас может закончиться место на диске.

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

Утилиты Vnstat и Vnstati

Vnstat это очень простой инструмент для учёта трафика. Он есть в репозиториях Ubuntu, так что установка не вызывает сложностей. Vnstat не требует тонкой настройки, просто считает трафик и позволяет просматривать статистику. Для обычного пользователя этого чаще всего более чем достаточно.

Чтобы начать подсчёт трафика надо выполнить команду, которая создаст базу данных для указанного интерфейса:

sudo vnstat -u -i eth0

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

sudo vnstat -u

Для просмотра статистики достаточно просто ввести:

vnstat

Также можно использовать ключи:

  -h,  --hours          по чясам
  -d,  --days           за день
  -m,  --months         за месяц
  -w,  --weeks          за неделю
  -t,  --top10          top10
  -s,  --short          короткий вывод
  -l,  --live           мониторинг в реальном времени

Vnstati это утилита для визуализации статистики, с ней тоже все просто. Вот, например, короткий скрипт, который выводит на экран статистику в виде картинки:

#! /bin/bash

vnstat -u
vnstati -vs -o ~/vnstati.png
eog ~/vnstati.png

Обе утилиты имеют еще некоторые возможности, не забывайте про ключ --help и утилиту man!

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

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

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

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

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

Сенсор fprobe

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

sudo apt-get install fprobe

Установщик спросит, на каком интерфейсе слушать трафик, и куда передавать собранную статистику - введите нужные вам параметры и 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

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

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

sudo update-rc.d fprobe_1 defaults

Таким образом можно запустить сколько угодно демонов 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";
# Местоположение утилит 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.

После редактирования конфига можно установить 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.

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

Ссылки