Создан: 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 createdb -U root root |
В базе должны быть созданы таблицы, в которых будет храниться статистика netams:
psql -U root root -f postgresql_shema.sql |
Внимание! В моём дистрибутиве в файле /usr/share/doc/netams-3.4.0rc1/postgresql_shema.sql
содержалась ошибка. Надо поставить запятую в правильное место. Заменить:
len bigint layer7 character varying(80), |
на
len bigint, layer7 character varying(80) |
Настройка
Конфигурируем файл /etc/netams/netams.cfg:
Каждая секция в этом файле называется service и должна начинаться со слова service. У сервиса есть номер для того, чтобы можно было задать несколько одинаковых сервисов с разными номерами.
Внутри описания сервиса не должно быть пустых строк. Предполагается, что если в файле встретилась пустая строка, значит описание текущего сервиса завершено.
Единственный сервис, который не должен начинаться со слова "service", это main. Начальные строки конфигурационного файла относятся именно к этому сервису.
Итак, сервис main (начало конфига):
debug none user name admin real-name Administrator email arc@help0.ru password 111 permit all language ru shedule time 1hour action save |
Вот и весь сервис main. Тут вы задаёте имя и пароль администратора для доступа по сети к конфигурации netams.
Также указано расписание для действия save - сохранения файла конфигурации. В нашем случае конфигурация будет динамически расти, поскольку в настройках будет автоматическая генерация описателей объекта сбора статистики (юнита) по мере подключения в работу дополнительных хостов сети. И автосохранение конфигурации при перезапуске сохранит статистику для всех динамически созданных юнитов.
Описываем сервис server:
service server 0 login any listen 20001 max-conn 6 |
Вы сможете управлять netams подключившись telnet-ом к порту 20001. Не забудьте закрыть этот порт для хакеров снаружи!
Описываем сервис processor. Такой сервис в системе может быть только один:
service processor 0 lookup-delay 60 flow-lifetime 300 policy name intranet target proto ip policy name www target proto tcp port 80 443 8080 3128 policy name sendmail target proto tcp port 25 policy name popimap target proto tcp port 110 143 995 auto-units 1 type host prefix2 mynet_ unit net name myhosts ip 192.168.0.0/16 acct-policy intranet www sendmail popimap auto-units 1 unit host name SPEC ip 192.168.1.200 acct-policy intranet www restrict all pass local pass |
Параметры конфигурации данного сервиса означают следующее:
- 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 type ip-traffic source ipq rule 1 "INPUT -j QUEUE" rule 2 "OUTPUT -j QUEUE" rule 3 "FORWARD -j QUEUE" |
Для разных ОС есть разные способы получения трафика из ядра. Для 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) вы сможете посмотреть в броузере результат.