From: Ушаков Андрей <andrew@sumteh.ru>
Newsgroups: email
Date: Mon, 6 Oct 2003 14:31:37 +0000 (UTC)
Subject: Система учета трафика на основе net-acct
Рано или поздно перед каждым администратором встает вопрос о построении
своей системы учета трафика, будь то небольшая локальная сеть или
средних размеров ISP.
Систем, направленных на эту задачу, существует немало и порой сложно с
чего-то начать. Для того чтобы можно было что-то выбрать, необходимо
сформулировать требования к системе, которую мы хотели бы использовать.
Итак, какой же она должна быть?
Во-первых, система должна выдавать подробный отчет по трафику, время,
source и destination адреса, порты, сетевой интерфейс.
Во-вторых, весьма желательно, чтобы система могла работать с базой
данных, например с MySQL. В этом случае мы избавляемся от необходимости
"низкоуровневой" обработки данных и самостоятельного занесения этих
данных в базу, т.к. делать это рано или поздно все равно придется.
Ну и в-третьих, это важно для многих пользователей интернета в регионах,
система должна каким-либо образом разделять тип трафика на бесплатный
(free), пиринговый (peer), и общий (world).
Всем этим требованиям удовлетворяет система net-acct-mysql. Скачать
архив можно с сайта http://exorsus.net/projects/net-acct/, причем я
настоятельно рекомендую качать не самую последнююверсию, а
версиюnetacct-mysql-0.73, т.к. все последующие версии были упрощены и не
включают в себя некоторыхполезных опций.
Net-acct необходимо сконфигурировать с опцией "--with-mysql" с указанием
пути к mysql, например
./configure --with-mysql=/usr/local/mysql
После компиляции и установки программы (make && make install) необходимо
создать базу данных для net-acct с помощью дампа, который присутствует в
архиве:
mysql -u root -p < netacct.sql.
После чего не забываем добавить пользователя в MySQL и предоставить ему
права на базу netacct.
mysql>grant all privileges on netacct.* to netacct identyfied by 'netacct';
mysql>flush privileges;
Далее необходимо сконфигурировать поограмму. Для этого в нашем
расопряжении имеются два файла конфигурации в каталоге /usr/local/etc:
naccttab - главный файл конфигурации,
nacctpeering - файл, содержащий список сетей, которые следует считать пиринговыми.
Рассмотрим файл naccttab.
В самом начале идет секция конфигурации доступа к базе данных:
database mysql
Первая строка описывает, в каком виде будет записываться информация о
трафике, в нашем случае это запись в mysql, возможен также вариант file,
при котором запись будет идти в текстовый файл /var/log/net-acct. Далее
следуют параметры доступа к базе данных, название которых говорят сами
за себя.
mysql_user netacct
#пользователь в MySQL
mysql_password netacct
#пароль пользователя для базы
mysql_host localhost
#хост
mysql_database netacct
#имя базы данных
mysql_table accounting
#имя таблицы
Далее идет опция, указывающая pid файл процесса демона net-acct:
pidfile /var/run/nacctd.pid
Далее описываются сетевые параметры для работы net-acct.
Мы рассмотрим следующую схему сети, для которой мы будем конфигурировать
учет трафика: Небольшая локальная сеть с внутренними адресами вида
10.0.0.XXX подключена к интернет через nat на Linux машине с двумя
интерфейсами eth0 и eth1, eth0 смотрит в интернет, eth1 - в локальную
сеть.
Итак, рассмотрим необходимые для такой схемы параметры (описание идет
после каждой опции)
flush 60
Задает период (в секундах), с которым данные записываются в базу.
fdelay 60
Задает время (в секундах), в течении которого после завершения сетевой
активности данные о трафике могут быть записаны в базу.
dumpfile /var/log/net-acct-dump
Задает имя файла дампа статистики.
notdev eth0
Если машина имеет два интерфейса, то с помощью опции notdev мы указываем
интерфейс, который следует исключить из диапазона отслеживаемых
программой, дабы избежать дублирования записей о трафике, прошедшем
через оба интерфейса. В нашем случае этим интерфейсом является eth0
device eth0
Данная опция задает тот интерфейс, который будет переводится в
promiscuous режим.
iflimit eth0
Эта опция в том случае, когда машина имеет несколько интерфейсов и
только на одном из них неоходим учет трафика.
ignorenet 127.0.0.0 255.0.0.0
Эта опция позволяет исключить из подсчета трафик идущий черех loopback
интерфейс.
debug 2
debugfile /tmp/nacctd.debug
Опции для отладочной информации.
headers lo 14 12
headers eth 14 12
Задает, с пакетами каких интерфейсов следует работать, в нашем случае lo и eth.
Многие захотят отключить опцию первой строки, т.е. headers lo, но
практика показывает, что данное действие приводит к нерабочему состоянию
программы, так что делать это не рекомендуется. Цифры после каждого из
параметров указывают следующее: в первом столбце - количество байт,
после которых начинают идти данные в пакете, во втором - количество
байт, приходящихся на поле типа пакета.
Указывают на то, для каких адресов в подсети следует считать трафик.
Служит своего рода фильтром и позволяет исключать некоторые адреса из
учета.
Если нет необходимости указывать адреса явно, можно указать адрес только
той машины, на которой стоит net-acct, в этом случае будет считаться
весь трафик пришедший на интфрфейс eth1.
C первым конфигом мы разобрались. Далее идет файл nacctpeering, в
котором, как было сказано выше, содержится список пиринговых сетей.
Достаточно просто написать каждую подсеть или адрес в новойстроке,
например:
Ну вот, с конфигами закончили, теперь можно запускать систему, для этого
необходимо ввести команду /usr/local/sbin/nacctd.Если не было допущено
ошибок в конфиге, то через некоторое время в базеужепоявлятся первые
записи и весь трафик будет под конролем.
Первый этап работы закончен, далее возникает необходимость просмотра
информации о трафике. Для этого можно написать скрипт, например на PHP
или PERL, а можно обращатся к базе напрямую. В обоих случаях необходимо
сформулировать запросы к базе. Далее я приведу несколько запросов,
которыме могут быть наиболее часто востребованы для получения информации
о трафике. Эти же запросы можно будет использовать и в скриптах.
Для удобства введем несколько символических перемнных:
$IP - адрес для которого будем просматривать статистику;
$monthday - день месяца, за который просматриваем статику (целое число от 1 до 31);
$month - месяц, за который просматриваем статистику (целое число от 1 до 12);
$peer - тип трафика, принимает значения 0 или 1 (если src адреса соответсвуют пиринговым адресам).
Просматриваем суммарную статистику для адреса $IP за день $monthday
месяца $month с типом трафика $peer:
select SUM(data_size)/1024/1024 from accounting where dst_ip = '$IP'
and DAYOFMONTH(data) = $monthday and MONTH(data) = $month and peer = $peer;
Просматриваем суммарную статистику для адреса $IP за месяц $month с
типом трафика $peer:
select SUM(data_size)/1024/1024 from accounting where dst_ip = '$IP'
and MONTH(data) = $month and peer = $peer;
Просматриваем суммарную статисику по всем дням для адреса $IP за месяц
$month с типом трафика $peer:
select SUM(data_size)/1024/1024, data from accounting where dst_ip = '$IP' and MONTH(data) =
$monthand peer = $peer group by data;
Просмотр подробной статистки за весь день $monthday месяца $month с
выводом адресов, с которых шел трафик, времени и типа трафика:
select time, data_size/1024/1024, src_ip, peer from accounting where dst_ip = '$IP'
and DAYOFMONTH(data) = $monthday and MONTH(data) = $month;
Ну вот, на этом этапе система достигла рабочего состояния. Далее
остается только более тонакая настройка и отладка, в случае допущения
каких-либо ошибок.
489 Прочтений • [Система учета трафика на основе net-acct (billing traffic isp statistic)] [08.05.2012] [Комментариев: 0]