Это старая версия документа.
Содержание
В этой статье собраны способы мониторинга трафика, проходящего через сервер. Чаще всего задача мониторинга встаёт для роутеров, обеспечивающих связь с интернетом.
Мониторинг в реальном времени
Для мониторинга трафика в реальном времени можно использовать утилиту 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.
Netflow - мониторинг с ведением статистики
Для мониторинга с ведением статистики одним из популярных решений является технология Netflow.
Для сбора статистики с помощью Netflow необходимо на нужные интерфейсы повесить специальные Netflow-сенсоры, которые будут собирать информацию и передавать Netflow-коллектору, который может располагаться на другой машине.
Информацию, собранную коллектором, можно визуализировать с помощью графического фронтенда, или же анализировать с помощью утилит командной строки.
В качестве сенсоров можно использовать доступные в стандартных репозиториях fprobe
или softflowd
.
Коллектор 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.