Создан: 03.08.07
Задача - подсчитать входящий трафик по каждому хосту, стоящему внутри сети и скачивающим что-то с Internet. NetAMS достаточно удобная система для подсчёта трафика, для развёртывания и использования. Я рассматриваю простую конфигурацию netams. Она очень гибкая. Здесь не рассматривается настройка фильтрации пакетов, ограничения скорости доступа в Интернет, ограничение по объёму трафика, ... и т.п.
Сайт проекта: www.netams.com. Там русская документация.
В последний раз я тренировался на дистрибутиве Alt Linux Server 4.0.0, версия NetAMS - 3.4.0rc1
Ключевые моменты в понимании принципов работы NetAMS:
1. Вы указываете дополнительное правило фильтрации пакетов уже существующей и настроеной системе фильтрации сетевых пакетов (iptables). Все пакеты проходящие через сетевые интерфейсы компьютера попадают в NetAMS, она их обрабатывает и возвращает дальше в систему фильтрации. Простейшее действие NetAMS - это регистрация пакета и запись о нём в соответствующий журнал. Конечно, в программе можно настроить и фильтрацию пакетов определённых типов.
2. Виды журналов, т.е. что вы хотите регистрировать - вы настраиваете сами.
3. Статистика периодически представляется в виде html-файлов. Периодичность вы указываете программе сами. Т.е. у вас должен работать WEB-сервер, чтобы вы могли видеть статистику, собираемую NetAMS.
4. Статистика прокси-серверов ведётся самими серверами и не стоит беспокоить по этому поводу NetAMS. Т.е. статистику SQUID, почты, jabber, и т.п. вещей, установленных на сервере, вам следует собирать из них.
Установка
В моей системе (Alt Linux Server 4.0.0) мне пришлось установить 3 пакета:
| apt-get install netams nawt netams-doc-ru |
Также у вас должна быть установлена база данных. Я предпочитаю PosgreSQL:
| apt-get install postgresql8.2-server |
Должен быть создан пользователь (root) с привилегиями superuser и сама база (root):
|
createuser -U postgresql root |
В базе должны быть созданы таблицы, в которых будет храниться статистика netams:
| psql -U root root -f postgresql_shema.sql |
Внимание! В моём дистрибутиве в файле /usr/share/doc/netams-3.4.0rc1/postgresql_shema.sql
содержалась ошибка. Надо поставить запятую в правильное место. Заменить:
|
len bigint |
на
|
len bigint, |
Настройка
Конфигурируем файл /etc/netams/netams.cfg:
Каждая секция в этом файле называется service и должна начинаться со слова service. У сервиса есть номер для того, чтобы можно было задать несколько одинаковых сервисов с разными номерами.
Внутри описания сервиса не должно быть пустых строк. Предполагается, что если в файле встретилась пустая строка, значит описание текущего сервиса завершено.
Единственный сервис, который не должен начинаться со слова "service", это main. Начальные строки конфигурационного файла относятся именно к этому сервису.
Итак, сервис main (начало конфига):
| debug none user name admin real-name Administrator email language ru shedule time 1hour action save |
Вот и весь сервис main. Тут вы задаёте имя и пароль администратора для доступа по сети к конфигурации netams.
Также указано расписание для действия save - сохранения файла конфигурации. В нашем случае конфигурация будет динамически расти, поскольку в настройках будет автоматическая генерация описателей объекта сбора статистики (юнита) по мере подключения в работу дополнительных хостов сети. И автосохранение конфигурации при перезапуске сохранит статистику для всех динамически созданных юнитов.
Описываем сервис server:
|
service server 0 |
Вы сможете управлять netams подключившись telnet-ом к порту 20001. Не забудьте закрыть этот порт для хакеров снаружи!
Описываем сервис processor. Такой сервис в системе может быть только один:
|
service processor 0 |
Параметры конфигурации данного сервиса означают следующее:
- lookup-delay 60 : просматриваем потоки данных от/к определённым в программе юнитам раз в 60 секунд. Если подошло время сбрасывать статистику в базу, сбрасываем и обнуляем счётчики.
- flow-lifetime 300 : время жизни данных в потоке для юнита . После указанного числа секунд данные отправляются в базу, а поток обнуляется. Чем чаще это действие, тем быстрее растёт база данных.
- policy ...: задаём политики с именем intranet, www, sendmail, popimap, в которым будет вестись статистика только для тех юнитов, которым мы укажем эти политики.
- auto-units ...: указываем, что у нас будут автоматически создаваемые юниты (юнит - это хост, сеть ,пользователь... для которого ведётся учёт или фильтрация). Поскольку задача, которую я решаю, рассчитана на большое количество хостов в сети, мне лень описывать каждый. Эта фишка программы (auto-units) как раз и предназначена для того, чтобы не мучаться с описанием каждого хоста.
- unit ...: описание объекта, для которого будет вестись учёт. В данном случае это хосты сети. При первом прохождении пакета на данный хост будет создана запись для юнита-описателя данного хоста, поскольку мы используем здесь режимauto-units. Предположим, что прошёл пакет на хост 192.168.0.5. Название этот юнит получит mynet_192.168.0.5. В этой же строке мы указали политики учёта трафика - intranet, www, sendmail, popimap, которые будут учитывать входящий и исходящий трафик суммарно по портам, указанным в политиках.
Для хоста 192.168.1.200 организуем отдельный сбор статистики. Он так и будет присутствовать с отдельным именем SPEC в отчётах. - restrict all pass local pass: означает, что все пакеты для юнитов, которые в конфигурации не определены (all) будем пропускать и все пакеты для определённых в конфигурации юнитов (local) тоже будем пропускать.
Описываем сервис storage (место хранения статистики):
| service storage 1 type postgres user root password 1111 host 127.0.0.1 dbname root port 5432 |
Описываем сервис data-source (источник трафика):
|
service data-source 1 |
Для разных ОС есть разные способы получения трафика из ядра. Для Linux с iptables/netfilter должен быть указан именно этот тип.
У нас должен быть запущен сервис iptables. В случае падения программы netams вся сеть придёт в нерабочее состояние, поскольку не будет программы, которая забирает из QUEUE пакеты и отдаёт их обратно. На этот случай я у себя предусмотрел проверку по cron-у наличия активной netams и очистку правил QUEUE в случае отсутствия программы.
Описываем сервис html - генерацию html-отчётов:
| service html 1 path /var/www/apache2/netams run 5min client-pages all |
Ну тут неплохо бы иметь сконфигурированный и запущенный веб-сервер, через который пользователи могли бы смотреть отчёты NetAMS.
Настройка iptables
У вас должен быть запущен сервис iptables.
Ядро должно поддерживать QUEUE и у вас должна без проблем отработать команда:
modprobe ip_queue
Иначе посмотрите, может быть у вас этот ядерный модуль лежит в каком-то неустановленном пакете или надо воспользоваться другим ядром.
Результат:
После того, как вы настроете и запустите netams (service netams start) вы сможете посмотреть в броузере результат.