Это старая версия документа.
Содержание
В этой статье собраны способы мониторинга трафика, проходящего через сервер. Чаще всего задача мониторинга встаёт для роутеров, обеспечивающих связь с интернетом.
Мониторинг в реальном времени
Для мониторинга трафика в реальном времени можно использовать утилиту 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"; # Если хотим веб-интерфейс поставить в ту же папочку, что и всё остальное $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.
После редактирования конфига можно установить 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.