Журнал Системный Администратор, Июнь 2004

Журнал Системный Администратор

Июнь 2004

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Подсчет трафика с помощью NETAMS

Кирилл Тихонов

Существует большое количество программ, предназначенных для подсчета трафика и сбора статистики. Сегодня мы рассмотрим одну из них, которая, на мой взгляд, будет одинаково интересна и новичкам, и специалистам.

NeTAMS – Network Traffic Accounting and Management System (www.netams.com) предназначена для контроля и учета сетевого трафика, проходящего через сервер. Работает под управлением операционных систем FreeBSD (4.3 и старше) и Linux (ядро 2.4 или выше и iptables).

Краткие характеристики:

n  Работа с БД MySQL, PostgreSQL, unix hash.

n  Контроль доступа, квот и прав пользования.

n  Вывод статистики прямым запросом или через веб-интерфейс.

n  Управление посредством соединения клиентом telnet на некий tcp-порт сервера.

n  Веб-интерфейс для отображения статистики.

Установку программы нельзя назвать тривиальной. В качестве сервера будем использовать Linux, поскольку с ним, в отличие от FreeBSD, возникает большинство проблем. Сервер является маршрутизатором с 2 сетевыми картами, одна смотрит в Интернет, другая – в локальную сеть.

Нам понадобится пакетный фильтр iptables и входящая в него библиотека libipq. Библиотека libipq добавляет цель QUEUE, т.е. очередь. Забегая вперед, скажу, что весь трафик заворачивается с помощью QUEUE в системную очередь, из которой пакеты берет NeTAMS, анализирует и отдает обратно.

Скачиваем пакетный фильтр с www.netfilter.org, распаковываем и компилируем (предполагается, что текущее ядро лежит в /usr/src/linux):

# tar xvfj iptables-1.2.9.tar.bz2

# cd iptables-1.2.9

# make KERNEL_DIR=/usr/src/linux

# make install

# make install-devel

Последняя строка позволяет установить библиотеку libipq.

Скачиваем NeTAMS с www.netams.org, последняя версия на момент написания статьи 3.1(1801), и распаковываем:

# tar xvfz netams-3.1.1801.tar.gz

# cd netams-3.1.1801

# vi Makefile

Скрипта configure здесь нет, поэтому редактируем Makefile. Он хорошо документирован, поэтому разобраться в опциях не составляет труда. Для начала комментируем все, относящееся к FreeBSD, а именно строки 13, 14, 17, 25, 26. После этого раскомментируем строки, относящиеся к Linux: строки 34 и 35. Далее выбираем тип БД: DB1 (unix hash), MySQL или PostgreSQL и раскомментируем относящиеся к ним строки. Само собой, используемая БД должна быть уже установлена и настроена. Мы выбираем MySQL. Поскольку мы используем iptables-1.2.9, то надо раскомментировать строку 50.

Далее правим пути к конфигурационному файлу и логам (строки 56, 57) и компилируем:

# make

Результатом компиляции будут 2 файла: netams – сама программа и netamsctl – утилита для автоматизации выполнения повседневных работ. Цели install в Makefile нет, поэтому устанавливаем вручную:

# cp src/netams /usr/local/bin

# cp src/netamsctl /usr/local/bin

Отлично, программа установлена. Но прежде чем мы начнем писать конфигурационный файл, настроим MySQL.

В принципе необходимости ручного создания БД нет. При первом запуске NeTAMS создаст ее сам. Однако сделать это возможно только под пользователем с правами администратора MySQL. Мы же заведем отдельного пользователя с именем netamsuser и паролем passwd и вручим ему права на доступ к БД.

Итак:

# mysql –u root –p

Enter password:

Создаем базу netams, в которую NeTAMS будет писать данные:

mysql> create database netams;

mysql> connect netams;

Вручаем права пользователю netams-user:

mysql> grant SELECT,INSERT,DELETE,UPDATE,CREATE on netams.* to netamsuser;

mysql> grant SELECT,INSERT,DELETE,UPDATE,CREATE on netams.* to netamsuser@localhost;

и задаем пароль пользователя netamsuser:

mysql> connect mysql;

mysql> set password for 'netamsuser'@'localhost'=password('passwd');

mysql> set password for 'netamsuser'@'%'=password('passwd');

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

mysql> flush privileges;

mysql> exit

Все, БД готова к приему данных от NeTAMS. Начнем писать конфигурационный файл /etc/netams.cfg:

debug none

user name admin real-name Admin email root@localhost password 123 permit all

 

service server 0

login any

listen 20001

max-conn 6

При запуске программа с такой конфигурацией ничего считать не будет. К ней можно только подключиться с помощью telnet и просмотреть конфигурацию.

Разберем файл построчно. Строка debug none отключает вывод отладочной информации. Следующая строка определяет пользователя:

n  user name admin – логин;

n  real-name Admin – реальное имя;

n  email root@localhost – email;

n  password 123 – пароль (незашифрованный);

n  permit all – разрешено все.

 

Следующая строка начинает описание сервиса server. Этот сервис обеспечивает возможность подключения к работающей программе с помощью telnet:

n  service server 0 – начало описания сервиса. Каждый сервис должен иметь номер. Это нужно для того, чтобы можно было описать несколько одинаковых сервисов. Например, несколько сервисов storage, которые будут хранить разную информацию в разных БД.

n  login any – пустить всех.

n  listen 20001 – слушать tcp-порт 20001.

n  max-conn 6 – максимальное число одновременных подключений.

Запустим программу:

# netams –ld

К ней можно подключиться, набрав:

telnet netams_host 20001

Далее надо ввести логин и пароль – в нашем случае admin и 123. Введя «?», можно получить справку по командам.

Теперь займемся подсчетом трафика.

В уже созданный файл допишем еще несколько сервисов, после чего он примет вид:

debug none

user name admin real-name Admin email root@localhost password 123 permit all

 

service server 0

login any

listen 20001

max-conn 6

 

service processor 0

lookup-delay 10

policy acct name all-ip target ip

restrict all pass local pass

unit host name linux-gw ip 195.x.x.x acct-policy all-ip

storage 1 all

 

service storage 1

type mysql

user netamsuser

password passwd

 

service data-source 1

type ip-traffic

 

service html 1

path /var/www/localhost/netams

run 1min

client-pages all

 

Разберем написанное. Обращаю внимание, что в пределах одного сервиса пустые строки недопустимы. Дело в том, что с точки зрения NeTAMS после пустой строки должно идти начало нового сервиса, и в случае обнаружения пустой строки, за которой не идет определение сервиса, NeTAMS будет аварийно завершать работу.

n  service processor 0 – ядро системы, в нем определяются объекты, по которым будет идти учет.

n  policy acct name all-ip target ip – определяет политику, по которой будет производиться подсчет трафика, в данном случае политика с именем all-ip (параметр name) будет считать весь IP-трафик. Параметр target может принимать следующие значения:

n  ip – весь IP-трафик;

n  icmp – весь icmp-трафик;

n  tcp – весь tcp-трафик;

n  udp – весь udp-трафик;

n  tcp-http – весь tcp-трафик, входящий или исходящий, порты которого 80, 808, 8080, 3128, 442;

n  tcp-ports – весь tcp-трафик на указанные порты;

n  udp-ports весь udp-трафик на указанные порты.

n  unit host name linux-gw ip 195.x.x.x acct-policy all-ip – определяет объект, для которого будет производиться подсчет трафика. В данном случае объект host с именем linux-gw, IP-адресом 195.x.x.x (внешний адрес маршрутизатора) и определенной выше политикой all-ip. Таким образом, с помощью этого правила мы считаем весь IP-трафик, поступающий из Интернета на наш маршрутизатор.

n  storage 1 all – передает все данные сервису storage 1.

n  service storage 1 – сервис, определяющий тип и параметры доступа к БД, в которой будет сохраняться статистика.

n  service data-source 1 – обеспечивает поступление данных о трафике внутрь программы. В данном случае определен источник данных ip-traffic. Этот источник работает с системной очередью, в которую с помощью iptables попадают пакеты.

n  service html 1 – организует автоматическое периодическое создание статических html-страниц, содержащих информацию о прошедшем трафике. Периодичность создания задается параметром run, в данном случае она равна 1 минуте.

Теперь запускаем программу в режиме демона:

# netams

и определим правила iptables, с помощью которых данные будут поступать в программу:

$IPTABLES -t mangle -A POSTROUTING -p all -j QUEUE

$IPTABLES -t mangle -A PREROUTING -p all -j QUEUE

Здесь есть один очень важный момент. Дело в том, что с помощью приведенных выше правил iptables все входящие и исходящие пакеты поступают в системную очередь, откуда их будет брать NeTAMS. Однако если в момент активизации iptables NeTAMS не будет запущен, пакеты будут поступать в системную очередь и пропадать там, т.к. не будет программы, которая отправит их обратно. В результате пропадает коннект до сервера. Поэтому в процессе отладки надо либо сидеть за консолью сервера, либо в случае удаленного администрирования тренироваться на icmp-трафике (в сервисе processor 0 поменять значение параметра policy target ip на target icmp, и в правилах iptables аналогично заменить –p all на –p icmp). А порядок запуска такой: сначала запускаем NeTAMS, потом iptables. Соответственно порядок остановки обратный – сначала останавливаем iptables, потом NeTAMS.

Каждый объект имеет свой уникальный шестнадцатеричный идентификатор (OID), который является ключом в базе данных. Он генерируется автоматически после первого запуска, поэтому чтобы статистика не пропала, после запуска программы надо подключиться к ней с помощью telnet и выполнить команду save. Она перезапишет netams.cfg, добавив в него сгенерированные OID. Таким образом, наш файл будет выглядеть так:

#NeTAMS version 3.1(1801.7) compiled by root@localhost

#configuration built Thu Apr  1 09:25:23 2004

#begin

#global variables configuration

debug none

user oid 01327B name admin real-name "Admin" crypted $1$$GmbL3iXOMZR57QuGDLv.L1

schedule oid 08FFFF time 1min- action "html"

 

#services configuration

 

service server 0

login any

listen 20001

max-conn 6

 

service processor 0

lookup-delay 10

policy acct oid 036633 name all-ip target ip

restrict all pass local pass

unit host 022EB1 name linux-gw ip 195.x.x.x acct-policy all-ip

storage 1 all

 

service storage 1

type mysql

user netamsuser

password passwd

 

service data-source 1

type ip-traffic

 

service html 1

path /var/www/localhost/netams

run 1min

client-pages all

Мы рассмотрели простейший случай подсчета трафика от провайдера до шлюза. В документации, поставляемой с программой, настройка описана более детально. Например, для каждого пользователя в локальной сети можно настроить квоту, при превышении которой NeTAMS автоматически отключит доступ в Интернет. К тому же на сайте www.netams.com есть русскоязычный форум, в котором можно найти ответы на любой возникший вопрос.




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению