Байт к байту. Обзор популярных систем учета трафика под *nixУльяна Смелая (core@synack.ru), Андрей Матвеев (andrushock@real.xakep.ru) Рано или поздно любому админу придется столкнуться с проблемой учета трафика. Среди великого многообразия свободного ПО подобрать оптимальный вариант не так уж и легко. Попробуем разобраться с особенностями настройки популярных решений для сбора, хранения и представления пользовательской статистики. Удобный NiTrafМногие провайдеры используют Net-Acct (exorsus.net/projects/net-acct) - весьма простой в настройке и работе коллектор транзитного трафика с богатыми возможностями. Оригинальная версия сохраняет собранную информацию в текстовый файл, но есть и форк netacct-mysql (netacct-mysql.sf.net), позволяющий записывать данные в базу MySQL или PostgreSQL. Постепенно эти проекты обросли многочисленными анализаторами журналов (например, Sawmill - www.sawmill.net/formats/net_acct.html) и интерфейсами. Одной из самых популярных «надстроек» стал NiTraf (nitalaut.sarkor.uz), способный подсчитывать трафик за выбранный период по IP-адресам. Он также поддерживает квоты и задание алиасов и отображает детальную статистику по портам и протоколам. Информация сохраняется в MySQL и затем выводится через веб-интерфейс. Для работы программы потребуется собственно Net-Acct, серверы MySQL и Apache2. В Ubuntu/Debian их установка выглядит так:
Подготавливаем MySQL-сервер:
В скриптах NiTraf жестко зашит путь /opt/trafdata/raw, куда Net-Acct должен сохранять информацию. Создаем этот каталог:
Переходим к Net-Acct. Все настройки производятся в единственном файле /etc/naccttab:
Перезапускаем демон:
Распаковываем архив с NiTraf и перемещаем каталоги на свое место:
В файле /etc/nitraf/mysql/create_mysql_tables.py необходимо указать адресное пространство локальной сети: «LAN='192.168.1.'». После чего запускаем скрипт:
Настоятельно рекомендуем вручную проверить работу скриптов, используемых для сбора статистики:
Если ошибок нет, добавь в /etc/crontab два задания:
Процесс учета трафика начался, переходим к настройке веб-интерфейса. Создаем файл сайта traf такого содержания:
Активируем новый сайт:
Чтобы веб-интерфейс функционировал, в конфиге Apache должны быть прописаны две директивы:
Или включены необходимые модули:
Перезапускаем веб-сервер:
Все готово, система работает. Доступ к каталогу охраняет файл .htaccess, поэтому задаем пароль:
Его и используем для входа. Если защита не нужна, просто удаляем .htaccess. Теперь набираем в браузере ссылку http://localhost/traf и смотрим собранную статистику. Подсчет с ULOGВ Linux все пакеты проходят через Netfilter, который обладает самой достоверной информацией о количестве переданных и принятых данных. В 2000 году программист Harald Welte написал патч к ядру - ULOG (Userspace Logging, www.netfilter.org/projects/ulogd), снимающий данные с Netfilter в пространстве пользователя. В наше время несколько проектов обеспечивают сбор данных с ULOG - ulogd, ulog-acctd, specter и выдачу пользователю информации в удобной форме - scanulog, Webfwlog и Nulog2. Демон ulogd обладает большей функциональностью, поэтому на нем и остановимся. По умолчанию он сохраняет данные в файл текстового формата, но имеются штатные плагины для записи в базу данных MySQL/PostgreSQL. В репозитарии Ubuntu есть несколько пакетов, относящихся к ulogd. Достаточно инсталлировать следующие:
По умолчанию устанавливается стабильная версия 1.23, хотя на сайте уже доступна ulogd-2.0.0beta2, у которой несколько больше встроенных модулей. Конфигурационный файл находится в /etc/ulogd.conf. Параметров в нем немного:
Теперь нужно указать iptables, чтобы он использовал ULOG. В правилах все строки вида:
заменяем на:
Напомним, что при помощи iptables можно считать не весь трафик, а только по определенным портам, узлам, направлениям.
Перезапускаем ulogd и смотрим, что записывается в журнал:
Если все в порядке, в конфиге снимаем комментарий со строк, отвечающих за работу с MySQL, создаем саму базу и учетную запись для работы с ней:
В каталоге /usr/share/doc/ulogd-mysql находится файл-заготовка mysql.table для создания таблиц:
Перезапускаем ulogd:
Для контроля смотрим изменение счетчиков в базе данных ( Универсал IPCadПрограмма IPCad (Cisco IP accounting simulator, lionet.info/ipcad) относится к универсальным средствам, так как позволяет вести подсчет трафика, используя несколько механизмов - BPF (Berkeley packet filter), libpcap и ULOG. Поэтому его можно использовать не только в Linux, но и в *BSD, MacOS X/Darwin или Solaris.
Далее – стандартно:
Конфигурационный файл ipcad.conf вместе с файлами примеров находится в /usr/local/etc. Все параметры трогать не будем, разберем только основные:
Демон ipcad не умеет самостоятельно создавать файл, в который записывается информация. Сделать это придется вручную, установив соответствующие права доступа:
Стартуем (в некоторых дистрибутивах потребуется указать полный путь к исполняемому файлу):
В процессе запуска на консоль будут выведены текущие установки, внимательно их просмотри. Значение ключей таково:
Позаботиться об автоматическом запуске IPCad при загрузке системы надо самостоятельно. Для этого добавляем указанную выше команду в скрипт /etc/init.d/rc.local (или подобный – в разных дистрах название может отличаться). Для просмотра статистики подключись к серверу rsh, который мы запустили из ipcad.conf:
В ответ получим информацию обо всем трафике. Для отбора нужных данных можно воспользоваться такими утилитами, как grep и awk. Например, чтобы получить суммарный трафик для компьютеров внутренней сети, задействуй следующую конструкцию:
Здесь открывается огромный простор для творчества. При желании можно строить графики, используя RRDtool (читай статью «Универсальный наблюдатель» в X_11_2008). Количество принятых и отправленных данных по конкретному интерфейсу смотрим так:
Полезно периодически сохранять в файл текущую статистику:
Сброс статистики осуществляется при помощи «clear ip accounting». Для корректной остановки ipcad используй команду «rsh localhost shutdown». Консольный монитор трафика vnStatИногда необходима простая утилита, позволяющая учитывать трафик, который проходит через сетевой интерфейс, и отображать загрузку в разные периоды времени. Чтобы не настраивать сложные решения, часть админов предпочитает использовать проверенные временем программы мониторинга (вроде tcpdump, netwatch, ethereal). Кто-то пишет свои правила для iptables или другого фильтра пакетов, но есть и более удобные варианты. Среди них – консольный монитор трафика vnStat (humdi.net/vnstat), очень простой в работе и практически не требующий настройки. Доступен в репозитариях большинства дистрибутивов Linux, также работает в FreeBSD и Darwin/MacOS X. Процедура установки тривиальна:
Все параметры, поддерживаемые программой, можно узнать, запустив vnstat с ключом '--longhelp'. Но для начала создадим базу данных интерфейса, трафик которого будем считать. Для этого используем ключ '-u/--update':
Как видно из вывода, базы данных создаются в каталоге /var/lib/vnstat. Теперь, чтобы просмотреть статистику по всем интерфейсам, вводим «vnstat» без дополнительных ключей – получим таблицу, в которой будет указано количество переданных/принятых килобайт и их сумма. Значение estimated показывает среднюю вероятную загрузку с учетом предыдущих значений, вычисленных за время работы. Поначалу тут будет пусто, но постепенно vnstat включится «в предсказание». Используя ключ '-i', можно указать на вывод только данных по конкретному интерфейсу. При помощи других ключей доступны отчеты: '-h' – по часам, '-d' – по дням, '-w' – АО неделям и '-m' – по месяцам. Параметр
Еще один параметр '--live' позволит контролировать количество переданных/принятых данных в реальном времени. Утилита может быть настроена при помощи конфигурационных файлов /etc/vnstat.conf или $HOME/.vnstatrc. По умолчанию используются встроенные установки, которые можно просмотреть, указав ключ '--showconfig', и задействовать затем при формировании своего конфига:
Для удобства вывода информации предлагается CGI-скрипт собственной разработки - vnstati, который можно скачать на сайте проекта. Другой проект (www.sqweek.com/sqweek/index.php?p=1) предлагает PHP фронт-энд. Чистый спиртНельзя обойти вниманием программу с довольно интересным названием cnupm (pdp-11.org.ru/~form/cnupm), которая умеет считать IP/IPv6-трафик на сетевом интерфейсе при помощи библиотеки pcap. Работает в *BSD, Linux, QNX, Solaris и, возможно, в других ОС, поддерживающих pcap. Процесс установки очень прост и описан в README на русском языке. Состоит из двух утилит: коллектора cnupm и утилиты для вывода статистики cnupmstat. Из особенностей можно выделить возможность отбора трафика при помощи tcpdump-подобных выражений, нетребовательность к системным ресурсам, работу в chroot с правами непривилегированного пользователя, отсутствие конфигурационного файла. В общем случае строка запуска может выглядеть так:
Для просмотра статистики запускаем «cnupmstat eth0». INFO
WWW
|