Устанавливаем и настраиваем систему учета трафика NeTAMS
Виталий «root» Чернов (vr-soft@mail.ru)
Сегодня найти быструю, гибкую и мощную систему учета трафика – не проблема. Жаль только, что учет нельзя назвать безошибочным, да и надежность оставляет желать лучшего. Что касается *nix-дистрибутивов – здесь разработчики предоставили системным администраторам и программистам огромный потенциал для творческой фантазии, включив в ядра весь необходимый функционал. Но это не говорит о том, что готовых систем учета трафика под *nix не существует. Как раз наоборот – на сегодняшний день они просто заполнили просторы Сети. Как выбрать из них самую лучшую?
Содержание:
- Лучшая система учета
- Установка NeTAMS
- Запуск
- Настройка html-интерфейса
- Добавляем пользователя
- Политики учета
- Безопасность
- Подводим итоги
- Боковые выносы: WWW
Чтобы ответить на этот вопрос, нужно знать, что подразумевается под фразой «Самая лучшая система учета». Думаю, никто не будет спорить, если я скажу, что таковая должна быть надежной, быстрой, гибкой, удобной, расширяемой и работающей по принципу «Поставил и забыл». Похвастаться таким списком возможностей способна далеко не каждая система учета. Если быть точным, сегодня таких единицы. Об одной из них и пойдет речь в этой статье.
NeTAMS предназначен для подсчета и управления трафиком в локальной сети. Данный программный комплекс работает под Linux, FreeBSD 4.х, 5.х, 6.х, OpenBSD, NetBSD и Solaris. Для установки необходимы: MySQL >= 4.0.16, apache >= 1.3.27, libpcap >= 0.7.1. Вся установка сводится к выполнению следующих команд:
$ sh configure.sh $ make $ sudo make install
Если ты планируешь использовать ограничения по скорости (unit host name Pupkin ip 192.168.1.2 bw 256K in acct-policy ip), бинарники следует скомпилировать с поддержкой квот: «FLAGS=-DHAVE_BW make«.
На подопытном дистрибутиве SuSE 10.2 с ядром по умолчанию все установилось без проблем и лишних вопросов.
Перед первым запуском нужно создать конфигурационный файл с именем /etc/netams.cfg на основе шаблона /etc/netams.cfg.sample. Также нужно отметить, что в каталоге /etc/rc.d скрипт установки создает файл netams-linux-startup.sh. Его можно переименовать в «netams» и сделать исполняемым. Тогда демон можно будет запускать и останавливать из командной строки:
# service netams start # service netams stop
Перед тем как запустить систему учета трафика, в твоем файерволе необходимо задать правила движения пакетов. Например, в iptables лучше всего создать отдельную цепочку и написать правило, которое будет направлять пакеты через QUEUE. Это заставит весь входящий и исходящий трафик заруливать в программу учета. В нашем случае цепочка будет называться Counter:
# iptabes -A Counter -j QUEUE
После установки стартовый файл netams можно найти в каталоге /usr/local/sbin. Запускаем:
# /usr/local/sbin/netams -f /etc/netams.cfg
NeTAMS создает telnet-сессию на порту, указанном в конфигурационном файле (по умолчанию – это 20001). Подключаемся:
$ telnet localhost 20001
Программа запрашивает имя пользователя и пароль. Если в конфиге ты ничего не менял, то логин будет «admin», а пароль «aaa» :).
После авторизации программа готова к обработке команд. Netams представляет собой демон и имеет в своем арсенале несколько сервисов, каждый из которых выполняет определенную задачу. Все сервисы работают в отдельных потоках, а их свойства описываются в конфигурационном файле.
- Сервис main в конфиге не указан, т.к. представляет собой главный поток, с исполнения которого начинает программа. Он определяет основные свойства всего процесса, считывает и разбирает конфигурационный файл, запуская другие сервисы, и останавливается до завершения работы netams. При подаче команд kill, shutdown, reload, возникновении критического сбоя или получении сигнала SIGQUIT, сервис main просыпается и пытается остановить все другие сервисы, чтобы корректно закрыть базу данных и убрать перехватчики пакетов.
- Сервис processor является ядром netams. Именно в нем определяются правила учета и список объектов, по которым будет произведен учет. Вообще, все компоненты системы обмениваются между собой сообщениями, например, запросами к БД или данными о трафике за некий интервал времени. Processor обеспечивает диспетчеризацию всех сообщений. Всего возможен только один processor на экземпляр программы.
- Сервис server позволяет присоединяться к работающей программе через TCP-сокет; с помощью различных команд можно управлять программой и снимать статистику.
- Сервис data-source обеспечивает поступление данных о трафике внутрь программы. В настоящее время в качестве обрабатываемых данных может быть только информация об IP-трафике. В качестве источников данных об IP-трафике могут выступать средства перехвата пакетов систем FreeBSD (bsd-divert), Linux (ip_queue), средства прослушивания сетевого интерфейса (libpcap/bpf), а также статистика NetFlow, приходящая от маршрутизаторов Cisco. Кстати, есть возможность сбора статистики, например, о работе почтовой системы или proxy-сервера.
- Сервис storage определяет БД для хранения статистики. Это может быть стандартный UNIX hash, который есть в любой системе, или база данных SQL, расположенная на локальной или соседней машине. Статистика может существовать в двух форматах: raw или summary (в одной базе можно держать или один из форматов, или оба сразу).
- Сервис alerter позволяет администратору организовать отправку себе или пользователям отчета о прошедшем и учтенном трафике, информации о деятельности системы и пр.
- Сервис scheduler обеспечивает выполнение заданных команд в запланированное время. Это «виртуальный» сервис, т.к. запускается всегда автоматически и не требует конфигурирования. Смысл имеют только запланированные команды, список которых выводится в конфигурационном файле после перечисления пользователей.
- Сервис html организует автоматическое создание статических html-страниц, содержащих информацию о прошедшем трафике, о работе системы и т.д. за определенный период времени. Эти страницы (при соответствующей конфигурации web-сервера) могут быть впоследствии просмотрены клиентом, не отвлекая программу от работы.
- Сервис monitor организует мониторинг заданных юнитов для сбора информации по относящемуся к ним трафику.
Попробуй набрать команду «show config», а затем «html». Первая покажет конфиг, который загружен в память, а вторая создаст html-файлы в каталоге /usr/local/www/stat, в них будет отображена вся статистика на текущий момент.
Если ты правишь конфиг непосредственно из файла, обязательно перезапускай демон. Для правки конфига нужно учесть два правила:
- Все сервисы, описанные в конфиге, должны разделяться между собой пустой строкой. Таким образом программа видит завершение описания одного сервиса и начало другого;
- При добавлении нового пользователя категорически запрещается вручную добавлять его запись в конфиг. Это можно сделать с помощью сервиса processor, который автоматически назначит пользователю идентификатор и добавит необходимые записи в базу данных.
Netams автоматически создает html-страницы, с помощью которых можно как администрировать, так и смотреть статистику. Период генерирования страниц, путь до каталога и некоторые другие настройки можно изменить в конфигурационном файле, в секции «service html». Естественно, для того чтобы обращаться к страницам из браузера, нужно иметь настроенный и запущенный Web-сервер. В случае Apache в netams.cfg для сервиса html следует прописать строчку «path /usr/local/apache/htdocs».
Немного забегая вперед, скажу, что рядом с бинарником, стартующим демон, расположен файл hetamsctl, который представляет собой эмулятор telnet. Он может выполнять абсолютно все функции, которые будут переданы в командной строке. Так, например, чтобы с помощью обычной telnet-сессии установить 100 Мб жесткой квоты входящего трафика пользователю Pupkin, нужно выполнить следующие операции:
$ telnet localhost 20001 login: >password: ... >service quota 0 >set name Pupkin month 100M in >exit
То же самое можно проделать с помощью одной-единственной команды, не подключаясь к telnet’у:
# /usr/local/sbin/netamsctl "service quota 0 && set name Pupkin
month 100M in && exit"
Самое приятное во всем этом то, что такие параметры можно передавать абсолютно из любого места. В том числе и из CGI-скриптов.
К нашему счастью, разработчики пакета постарались и написали готовый набор скриптов для работы с разными сервисами. Найти его можно в дистрибутиве NeTAMS, в каталоге ./cgi-bin. Если положить все файлы из этого каталога в папку cgi-bin на сервере и набрать в адресной строке браузера «http://localhost/cgi-bin/admintool.cgi», нас незамедлительно перекинет в админку.
Для того чтобы добавить нового пользователя или группу, подключаемся к telnet’у, вводим имя пользователя, пароль и пишем «service processor». После этого можно добавлять пользователя:
>unit user name Pupkin ip 192.168.0.10 email Pupkin@domain.ru \
parent CLIENTS acct-policy ip www mail
>exit
>save
Затем вводим «show config» и смотрим, чтобы пользователю присвоился OID и, самое главное, чтобы строка «acct-policy ip www mail» была полностью и без ошибок, иначе ничего работать не будет.
Все, после этого можно установить пользовательскую квоту:
>service quota 0
>set name Pupkin month 100M in
>exit
Для того чтобы программа считала поступающий трафик, ей нужно знать, что он из себя представляет и как выглядит. В конфигурационном файле можно встретить примерно такие строки:
policy oid 01B148 name ip target proto ip
policy oid 010A1F name www target proto tcp port 80 81 8080 3128
policy oid 091C21 name mail target proto tcp port 25 110
После слова name указывается имя политики. Этот параметр можно изменять по своему усмотрению. А вот параметр target описывает прототип правила, по которому будет вестись учет. Протоколы могут иметь следующие значения:
- ip – весь IP-трафик;
- icmp – ICMP-трафик;
- tcp – TCP-трафик;
- udp – UDP-трафик.
Политика добавляется в сервисе processor в формате:
policy [oid OID] name NAME
[no] target TARGET
[bw { speed in speed out | speed } ]
В боевых условиях это будет выглядеть так:
>service processor
>policy name ip target proto ip
>policy name tcp target proto tcp
>policy name udp target proto udp
>policy name trash target proto ip
Таким образом, при грамотном использовании политик можно достаточно четко разграничить учет трафика. Главное, при создании нового юнита не забывать добавлять в конец строки нужные политики. Еще один момент: пока пакеты будут считаться по политике ip, тебе не удастся в явном виде скалькулировать весь UDP- и TCP-трафик. Чтобы при совпадении политики дальнейший подсчет прекратился, нужно использовать знак «%».
>unit host name Pupkin ip 192.168.0.10 acct-policy ip %tcp %udp trash
Поскольку netams запускается с правами root и отвечает за подсчет небесплатного трафика, защите всей системы следует уделить самое пристальное внимание. Существует несколько потенциально небезопасных направлений:
- Взлом защиты самой программы;
- Взлом операционной системы через программу;
- Действия, приводящие к неверному учету трафика.
По достоверным сведениям на сегодняшний день ни одного случая взлома программы зарегистрировано не было.
Несанкционированный доступ к программе может быть получен путем раскрытия пароля и присоединения к программе через telnet. Это особенно актуально при использовании генератора статистики HTML. Для уменьшения риска:
- Установи права на чтение конфигурационного файла и лог-файлов только для пользователя root;
- Установи жесткие права на чтение локальных файлов HTML-статистики;
- Средствами http-сервера установи права на просмотр статистики «извне» только тем, кому нужно;
- Разреши возможность логина в программу только с локальной машины:
service server 0
login localhost
- Отрежь правилами iptables или любого другого файервола твоей системы нелокальное подключение к программе:
# iptables -A PREROUTING -i eth0 -p tcp --dport 20001 -j DROP -t nat
Неправильный учет трафика возможен при неверном расположении правил ipfw/iptables и при получении статистики NetFlow от неизвестного источника. Во избежание этого:
- Мысленно представь, как данные ходят по твоей сети;
- Нарисуй схему сети с именами интерфейсов;
- Выпиши список имеющихся правил ipfw/iptables и придумай номер правила, где будет осуществляться «заворачивание» трафика;
- При использовании bridging или прозрачного http-прокси, обдумай все обстоятельно;
- Если ты используешь подсчет потока NetFlow, в описании соответствующего сервиса data-source *обязательно* укажи IP-адрес роутера, присылающего статистику.
В принципе, все, что нужно для начала работы с пакетом NeTAMS, я рассказал, но чтобы узнать все тонкости настройки и добиться стабильной и безошибочной работы программы, нужно еще и еще раз вдумчиво курить мануалы и шерстить форум. От себя могу добавить, что пользуюсь NeTAMS’ом уже более двух лет и вполне доволен всеми его возможностями. Но выбор, как всегда, за тобой.
WWW
- Исходные коды NeTAMS, документацию на русском и английском языках, русско- и англоязычный форум всегда можно найти по адресу .
Статья опубликована в сентябрьском номере журнала «Xakep» за 2007 год.





