Начну с описания ситуации в которой я оказался. Один мой хороший знакомый подключил себе ADSL, а т.к. подключение данного удовольствия штука муторная и недешевая (1400р модем+ 600р. подключение), его соседи решили подрубиться к нему в сетку, с возможностью выхода в интернет. О чем вопрос – сказано сделано.
Итак постановка задачи: есть три клиентских компа, есть гейт на линуксе, к которому подключен adsl модем на интерфейс eth1. Соответственно внутренняя сеть висит на eth0. Топология сети такая:

Т.е. нам нужно разрешить доступ каждому клиентскому компу к сети Интернет, с возможностью учета их траффика, и с возможностью задания определенного лимита в месяц, при достижении которого сеть выход в интернет блокируется
1. Установка netams
Как показала практира правильность работы netams как никогда зависит от правильной его установки!
Прежде всего скачайте последнюю версию!!! Взять ее можно на официальном сайте NeTAMS.
Кроме того вам понадобится установленный и работающий Веб-сервер (чтобы клиенты могли смотреть статистику), Mysql (или postgreSQL) для хранения статистики.
Обязательно проверьте наличия библиотеки libipq.a в каталоге /usr/lib (поставляется вместе с iptables, но у меня почему то была не установлена) – без нее нельзя будет настроить квотирование. Если ее нет, то скачайте iptables, установите и вручную скопируйте файлы libipq/libipq.a в /usr/lib, а также include/libipq/libipq.h в /usr/lib.
Также желательно иметь библиотеку libpcap.
Если у вас mysql установлен в нестандартной папке, то придется добавить <mysql>/lib и <mysql>/include каталог в переменную paths файла configure.sh. <mysql>/bin желательно тоже добавить в configure.sh в переменную PATH. От этого зависит вообще будет ли netams работать c mysql (<mysql> – это префикс куда установлен mysql). Если при запуске configure.sh он все нашел, то можно запускать make.
У меня почему то не захотела компилится поддержка RADIUS, поэтому пришлось ее отключить, в Makefile достаточно для этого убрать строчку «DEFINE += -DUSE_LIBRADIUS»
Вот так должен выглядеть вывод скрипта configure.sh
##########################################################
## Configuring NeTAMS for build targets... ##
Linux operating system...
Will have LIBIPQ support
Will have MYSQL support
[ /opt/mysql/lib/mysql /opt/mysql/include/mysql ]
Will have BILLING service
Will have DEBUG flag set
Will have RADIUS support
## Configuration file was built. ##
##########################################################
После этого пишем make && make install. И надеемся что все скомпилилось правильно :)
Для настройки квотирования вам также понадобится модуль ядра ip_queue для заворачивания пакетов из правил iptables. В ядре сие чудо называется
«Userspace queueing via NETLINK (EXPERIMENTAL)» в настройках netfilter.
2. Первый запуск NeTAMS
Само конфигурирование netams можно делать как напрямую через /etc/netams.cfg, так и через подключение через telnet. Через telnet настраивать намного удобней, т.к. все изменения происходят в реальном времени без остановки системы. Для первого запуска возьмите конфиг с сайта NeTAMS. Для запуска достаточно набрать
# netams
Если все прошло успешно то в списке процессов (ps -A) вы должны увидеть netams.
3. Настрока Mysql для работы с NeTAMS
Для того чтобы netams мог сохранять статистику в базе, необходимо завести аккаунт в mysql.
Подключаемся к mysql пользователем root
mysql -u root -p
Выполняем следующие команды:
mysql>create database netams;
mysql>GRANT ALL ON netams.* TO netams@localhost IDENTIFIED BY 'password';
mysql>flush privileges;
mysql>exit;
где password это пароль для пользователя netams в базе netams
4. Конфигурирование NeTAMS
Подключитесь к netams через телнет командой
# telnet localhost 20001
Логин для первой сессии – admin, пароль 123 (если вы воспользовались конфигом с сайта netams
Вообще говоря принцип работы NeTAMS достаточно хорошо описан на официальном сайте: NeTAMS, и в других разделах сайта.
То что я буду дальше описывать вообще-м то по большей части повторяет всю информацию, которую можно взять на сайте NeTAMS. Но постараюсь привязать конкретно настройку NeTAMS к поставленной мной задаче и разжевать некоторые ключевые моменты.
Итак начнем…
4.1 Сервис main
Это главный сервис netams, который кроме всего прочего отвечает за возможность подключения пользователей (читай «администраторов») через telnet. Можно определить до туевой хучи этих пользователей. Для начала посмотрим что у нас уже настроено:
>show users OID | MODE | NAME | REAL NAME | PERMIT 0C531D | U | admin | Admin | all
Синтаксис команды для добавления пользователя смотрим здесь. Для удаления команда no user.
Команда language позволяет выбрать язык на котором будут формироваться страницы html со статистикой.
Пока доступно только два языка en и ru.
Итак я возвращаясь к своей задаче, выполнил следующие команды относящиеся к сервису main:
>user oid 0C531D name Demige real-name "Zvonilov Mikhail" email mike@fwall password 32167 permit all
parse: user Demige name set: Demige
parse: user Demige real-name set: Zvonilov Mikhail
parse: user Demige email set: mike@fwall
parse: user Demige password set: <>
parse: user Demige permissions set: all
>language ru
parse: output language is ru
Таким образом мы переименовали пользователя с oid 0C531D в Demige с реальным именем Zvonilov Mikhail, адресом почты mike@fwall и паролем 32167. Пароль при сохранении всегда шифруется автоматически. Также мы выставили русский язык для формирования html страничек и писем e-mail. Т.к. администратор сети я единственный, больше пользователей добавлять не надо. Для сохранения настроек в конфиге пишем save.
4.2 Сервис scheduler
Сервис для переодического выполнения определенных команд.
Синтаксис команд.
>show schedule OID | INTERVAL | LEFT | ACTION 08FFFF | hourly | 1681 | html
В конфиге по-умолчанию настроено выполнение команды html каждый час (формирования html статистики).
>schedule oid 08FFFF time 10min
parse: task 08FFFF modified
parse: task 08FFFF time set: 10min, exec in 600 sec
Изменяем расписание чтобы html статистика обновлялась каждые 10 минут. Что полезно по-крайней мере при отладке сервера.
4.3 Сервис server
Сервис отвечает за возможность подключения через telnet.
Синтаксис команд. Выполняем:
>service server
parse: switching to service server:0 for configuring
server:0# max-conn 2
server:0# login localhost
Переходим к конфигурации сервиса командой service server и выставляем максимальное число подключений через telnet 2, с возможностью зайти только локально.
4.4 Сервис storage
Сервис управлет хранением статистики и др. информации в базе данных или другом месте.
Синтаксис команд. Для моей задачи достаточно
было выполнить следующие команды:
>service storage parse: creating service storage:0 storage:0# type mysql parse: storage type is set to MySQL storage:0# user netams parse: username is set to netams storage:0#password netams32167 parse: password is set to netams32167 storage:0#dbname netams parse: dbname is set to netams storage:0#socket /mnt/chroot/mysql/tmp/mysql.sock parse: socket is set to /mnt/chroot/mysql/tmp/mysql.sock storage:0#port 3306 parse: port is set to 3306 storage:0#accept all parse: this storage will accept following data: raw summary monitor login quota events oids billing bdata config
Таким образом мы настроили хранилище «0″ для доступа к базе mysql с названием netams под именем пользователя netams с паролем netams32167 (пароль такой же как указывали в команде GRANT при настройке mysql). Доступ осуществляется через сокет /mnt/chroot/mysql/tmp/mysql.sock или через порт tcp 3306. В данном хранилище будет хранится вся информация. Путь для сокета у вас скорее всего отличается, к тому же необходимость его указывать возникает, только если mysql работает с опцией skip-networking, когда он перестает слушать порт. Во всех остальных случаях доступ к базе будет производиться по порту 3306. Также необходимо следить за загруженностью mysql. Netams в полной конфигурации требует 7 коннектов к mysql. Т.о. max_connections в файле /etc/my.conf необходимо выставить по-крайней мере не меньше 8.
4.5 Сервис data-source
Сервис, который получает информацию о траффике из разных источников.
Синтаксис команд
. Настраиваем:
>service data-source 1 parse: switching to service data-source:1 for configuring data-source:1#type ip-traffic parse: data-source type is set to ip-traffic data-source:1#source ipq parse: source is set to ipq rule 0 "FORWARD -i eth1 -o eth0 -j QUEUE" parse: rule 0 set to FORWARD -i ppp0 -o eth0 -j QUEUE rule 1 "OUTPUT -o eth0 -p tcp --sport 3128 -j QUEUE" parse: rule 1 set to OUTPUT -o eth0 -p tcp --sport 3128 -j QUEUE
Переходим для конфигурации сервиса data-source с номером 1 (вообще говоря их может быть несколько). Перехват будет делать через ядро системы linux соответственно выбираем ip-traffic. Источником данных будет служить цепочка в правилах iptables (библиотека ipq и модуль ip_queue). Подробнее остановимся на правилах iptables.
Первое важное замечание. NeTAMS считает что iptables находится в /sbin/iptables, поэтому если его там нет создайте линк. Второе важное замечание: Почему не следует определять правила заранее в системных настройках iptables. Дело в том что при запуске netams и соответственно при запуске сервиса data-source, он добавляет правила в начало цепочек iptables, тем самым »заворачивая» весь проходящий траффик в netams и уже NeTAMS определяет – отдавать траффик обратно системе или нет. Т.е. если вы определите правила в системе, а netams случайно закроете, то выхода в интернет не будет! И даже на сервер зайти удаленно вы возможно не сможете! При определении правил через комунду rule, netams сам их добавляет при запуске и убирает при выходе из программы, что намного безопаснее.
Разберем правила, которые netams будет добавлять в iptables:
Но это не очень страшно – главное что не занижена :).
4.6 Сервис processor
Итак добрались до самого сладкого :). Сервис processor – это ядро системы, которое как раз и определяет что же делать с траффиком который попадает в netams. Он состоит из двух частей – политик и юнитов. С помощью политик определяется к какой группе относится тот или иной траффик. С помощью юнитов определяется пренадлежность данного траффика какому-то компьютеру/пользователю/подсети.
Синтаксис смотрим здесь. Итак начнем…
>service processor parse: switching to service processor:0 for configuring processor:0# lookup-delay 30 parse: lookup delay is set to 30 seconds processor:0#flow-lifetime 300 parse: flow lifetime is set to 300 seconds
Выставляем переодичность просмотра юнитов в 30сек, и каждые 300сек накопленные данные будут сохранены в статистику. Чем меньше время flow-lifetime тем чаще обновляется статистика, но тем и база больше.
processor:0#policy name ip target proto ip parse: policy 04643C target set: proto ip
Создаем политику для учета всего ip траффика (все протоколы).
processor:0#policy name www target proto tcp port s80 s8080 s8888 parse: policy 069BA3 created parse: policy 069BA3 name set: www parse: policy 069BA3 target set: proto tcp port s80 s8080 s8888
Этой политикой будет учитываться только траффик приходящий с удаленных портов 80,8080,8888, что вообщем то соответствует протоколу http. По ней можно будет отследить сколько траффика мы тратим на просмотр страниц. Чисто для статистики
processor:0#policy name icq target proto tcp port s5190 parse: policy 0C7DF4 created parse: policy 0C7DF4 name set: icq parse: policy 0C7DF4 target set: proto tcp port s5190
Здесь будем считать траффик icq.
processor:0#policy name proxy target proto tcp port s3128 parse: policy 0C2C89 created parse: policy 0C2C89 name set: proxy parse: policy 0C2C89 target set: proto tcp port s3128
Весь траффик приходящий от прокси. (здесь важно заметить что необязательно от нашего. Для опознания именно нашего прокси необходимо произвести более точную настройку с применением параметров addr или file). Итак что мы получили в итоге? Траффик сливается из iptables в двух местах (важно здесь чтобы не сливался дважды!) Для netams неважно откуда взялся траффик, мы можем основываясь на правилах его просто посчитать. У нас есть четыре политики ip (которая кстати есть в дефолтном конфиге), www Для протокола http, icq и proxy, чтобы определить сколько траффика прошло через прокси.
Теперь необходимо настроить объекты учета, а именно юниты. Обратим внимание на важную команду:
restrict all {drop|pass} local {drop|pass}, команда определяет как мы поступаем с траффиком попавшем в netams.
Здесь два класса траффика all и local. all – это весь траффик попавший в netams, local – это траффик который описан некоторыми юнитами. Значение по умолчанию restrict all local pass. т.е. траффик, который считается – пропускается дальше по умолчанию (если не определена политика фаервола для юнита), если же есть какой то траффик, который не попал ни под один юнит – он отбрасывается. Согласен трудно понять, но дойдет постепенно :). Вообще в сервисе много интересных команд для автоматизации процесса учета траффика. Аля подключил машину к сети и по ней уже ведется учет траффика. Это можете сами разобрать – подробно написано в доках. По умолчанию уже есть юнит server. крайне не рекомендуется его удалять, т.к. после этого почему то невозможно подулючиться к системе через telnet. Итак создаем юниты
processor:0#unit host name client1 ip 192.168.1.11 password cl1_pass sys-allow acct-policy ip www icq proxy parse: unit host 022175 created parse: host 022175 name set: client1 parse: host 022175 ip set: 192.168.1.11 parse: Unit host 022175 password set: cl1_pass parse: unit 022175 acct policy ip added parse: unit 022175 acct policy www added parse: unit 022175 acct policy icq added parse: unit 022175 acct policy proxy added processor:0#unit host name client2 ip 192.168.1.12 password cl2_pass sys-allow acct-policy ip www icq proxy processor:0#unit host name clienе3 ip 192.168.1.13 password cl3_pass sys-allow acct-policy ip www icq proxy
Создаем юнит с именем client1 с привязанным к нему ип 192.168.1.1 паролем cl1_pass с разрешением применять всякие гадости к данному юниту (sys-allow) и политиками учета ip www icq proxy. Аналогично и два других юнита.
Основную задачу мы выполнили. Начиная с этого момента netams считает траффик.
4.7 Сервис quota
Сервис quota занимается обрубание траффика у слишком зарвавшихся юзверей :).
Синтаксис команд. Пример для настройки
>service quota parse: creating service quota:0 quota:0#policy ip parse: default policy is set to ip quota:0#set name client1 policy ip active month 500M in parse: Creating quotadata to unit client1 , policy ip parse: unit 022175 quota is set to ACTIVE
Задаем квоту для client1 размером 500мб в месяц входящего траффика. Аналогично и с другими юзерами.
При достижении им 500 мегабайт интернет у него отвалится (какая жалость :))
4.8 Сервис html
Сервис html отвечает за создание страничек html со статистикой.
Подробная настройка.
>service html parse: switching to service html:0 for configuring html:0#path /var/www/traffic parse: html path is set to /var/www/traffic html:0#htaccess yes parse: html service will manage Apache .htaccess and .htpasswd files html:0#client-pages all parse: html client pages creator: all pages html:0#account-pages all parse: html account pages creator: all pages html:0#display-health yes parse: html service will display system health
Говорим создавать странички со статистиков в папке /var/www/traffic (где обычно они доступны через web-сервер), создавать файлы .htaccess (чтобы каждый клиент смотрел только свой траффик по своему паролю), создавать странички для клиентов, создавать странички для биллинга (он должен быть настроен), и отображать информацию о состоянии системы (ее загрузке). ВНИМАНИЕ!!! для тех у кого apache запущен в chroot’ed среде. путь к файлу паролей для страничек с .htaccess строится абсалютным образом и поэтому апач его находить не будет, что приведет к тому что на статистику не сможет зайти никто. Тут два варианта – или netams запускать в той же chroot что и апач или делать линк на файл .htpasswd
С настройкой биллинга никаких сложностей не возникает и думаю с этим может справиться каждый…
Автор: Demige
Иллюстрации: gumanoed
Написать комментарий
Комментарии могут оставлять только авторизованные пользователи.






