NetAMS - подсчёт, фильтрация трафика

Создан: 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) вы сможете посмотреть в броузере результат.