Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> подсчёт трафика —> NeTAMS 2

NeTAMS - продолжение (login, bandwith, quota)

Автор: schizoid.


Итак, продолжим про НеТАМС.
1. Ограничение скорости в НеТАМС.
При установки нетамса, появляется примерно такое окошко
#make install
               Options for netams 3.4.0.r2
       [ ] DEBUG  Build with debug symbols   
       [ ] BW     Build with bandwidth limitation functionality    
       [ ] HASH   Build with HASH support                          

Здесь ставим галочку на против строки BW     Build with bandwidth limitation functionality .
Если честно, то я так не пробовал. Когда я ставил на сервак, этой опции еще не было, а пересборка производилась таким путем:
make distclean && FLAGS=-DHAVE_BW make

Но думаю, что с включенной опцией оно уже умеет делать правильно.
Итак нетамс собрался. (Более подробно по начальной настройке нетамса читайте в предыдущей статье).

Из всего конфига нас интересует сервис processor.
!!! Строки взятые в квадратные скобки [...]  - нужно писать в одну строку !!!
service processor
lookup-delay 30
flow-lifetime 180
policy oid 0B4940 name ip target proto ip
restrict all drop local pass
[unit net oid 022222 name stah_all ip 10.0.0.0 mask 255.255.255.0 description 
   "net 10.0.0.0" password 123 no-local-pass acct-policy ip]
unit host oid 033333 name server ip 193.16.хх.хх
[unit host oid 000001 name eugene ip 10.0.0.1 description "ip 192.168.10.20" 
   email eugene@my.domen.ru password 123 bw 256.000K acct-policy ip]
[unit host oid 000002 name agent ip 10.0.0.2 description "ip 192.168.10.141" 
   password 123 bw 256.000K  acct-policy ip]
[unit host oid 000003 name chetkiller ip 10.0.0.3 description "ip 192.168.10.21" 
   password 123 bw 256.000K  acct-policy ip]
[unit host oid 000004 name sirius ip 10.0.0.4 description "ip 192.168.10.2" 
   password 123 bw 256.000K  acct-policy ip]
[unit host oid 000005 name TEAC ip 10.0.0.5 description "ip 192.168.10.18" 
   password 123 bw 256.000K  acct-policy ip]

Как видим, ограничение скорости включается весьма просто, простым добавлением bw 256.000K. Так же есть возможность организации асинхронного канала ([bw { speed in speed out | speed } ]). Например:
!!! Строки взятые в квадратные скобки [...]  - нужно писать в одну строку !!!
[unit host oid 000001 name eugene ip 10.0.0.1 description "ip 192.168.10.20" 
   email eugene@my.domen.ru password 123 bw 256.000K in 128.000K out acct-policy ip]

Вот собственно и все.

2. Сервис квота в НеТАМС.
Основные свойства: 
1. Хранение информации о квотах клиентов в базе SQL. В настоящий момент 
поддерживается MySQL и Postgres. 
2. Возможность задания политики учета (контроля), параметров оповещения по умолчанию. 
3. Возможность задания всех параметров квот по трафику индивидуально для 
каждого юнита. Это величины входящего, выходящего и суммарного трафика начиная 
с момента начала часа, дня, недели и месяца. 
4. Возможность задания порога "мягкого срабатывания" в процентах от "жесткой" квоты 
индивидуально для каждого юнита. 
5. Возможность гибкого управления параметрами оповещения при срабатывании и 
возвращении квоты.

Сервис квота в конфиге включается строчками:
service quota
policy ip
notify soft {owner} 
notify hard {owner} username
notify return {owner}

Опишем опции.
policy ip - Задает политику учета (acct-policy), которая будет использоваться при проверке квот. Это политика по умолчанию для всех, существует возможность переопределить ее для конкретного юнита. Если не указано, используется первая политика из определенных policy XXX сервиса processor.
Секции notify задают кому будет слаться оповещение о превышении квоты (soft - мягкая квота, hard - жестакая квота,return - восстановление работы, когда период действия квоты закончился). Нужно что бы в описании юнита присутствовал его e-mail (опция email eugene@my.domen.ru). Здесь {owner} - владелец юнита, username - имя или OID пользователя (администратора).
Далее, задаем квоту:
netamsctl "service quota && set name eugene policy ip  day 5M sum && exit"

Здесь мы задали юниту eugene суммарную дневную квоту в 5Мб при полиси ip.
Здесь я не все опции показал, многие из них установлены по-умолчанию:
soft_treshold 80 - порог мягкой квоты
delay 10 - Интервал времени между периодическими проверками всех юнитов на 
наступление момента рабатывания квоты. Задается в секундах.
notify_soft 1 - сообщение шлется владельцу юнита
notify_hard 1 - сообщение шлется владельцу юнита
notify_return 1 - сообщение шлется владельцу юнита

Также можно указать и другие временные интервалы ([hour ... ], [day ...], [week ...], [month ...]), amount - значение квоты (в байтах, но можно использовать модификаторы K, M, G), {in|out} - направление квотируемого трафика, {sum} - суммарный трафик (в обоих направлениях).

Просмотреть установленную квоту можно либо на страничке статистики (только для админа), либо командой netamsctl "show quota".

Отменить установленную квоту можно так:
netamsctl "service quota && set name eugene poliсy ip day 0 sum && exit"

Вот и все.

3. Сервис login.
В кратце - это веб-морда для пользователя, с помощью которой он может заблокировать/разблокировать свой аккаунт.
Настраивается так:
service login
storage 1
set no name eugene password 123456 inact 3000 abs 0
relogin yes

При рестарте нетамса, создастся еще одна таблица в базе netams.
Здесь опции:
unit_oid - Идентификатор (OID) юнита, является уникальным ключом к базе данных
password - Пароль пользователя. Никогда не пытайтесь поменять его извне программы путем прямой записи в SQL.
inact - Величина таймаута неактивности для данного пользователя
abs - Величина абсолютного таймаута для данного пользователя
last_changed - Время (в формате UNIXTIME) последнего изменения записи
last_opened_time - Время (в формате UNIXTIME), когда был в последний раз предоставлен доступ юниту
last_opened_ip - IP-адрес, с которого был предоставлен доступ юниту
last_opened_mac - MAC-адрес, с которого был предоставлен доступ юниту
def_state - Режим доступа этого юнита по умолчанию (например, сразу после старта программы). 0 означает отсутствие доступа, 1 означает разрешения доступа.
curr_state - Текущий режим доступа этого юнита. 0 означает отсутствие доступа, 1 означает разрешения доступа. К сожалению, по наступлении таймаута не сбрасывается (баг).

Теперь настраиваем апач для понимания cgi скриптов:
LoadModule cgi_module libexec/apache2/mod_cgi.so
...
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"
<Directory "/usr/local/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
...
AddHandler cgi-script .cgi
AddHandler cgi-script .pl

Перегружаем апач.
Далее идем в /usr/ports/net-mgmt/netams/work/netams-х.х.х/cgi-bin (правда если не делали clean при установке, иначе нуно будет залезть внуть  пакета). Тут нам понадобятся 3 файла:
-rwxr-xr-x  1 root  wheel   479 16 фев 02:13 config.cgi
-rwxr-xr-x  1 root  wheel  3707 16 фев 02:30 login.cgi
-rwxr-xr-x  1 root  wheel  3267 21 июн  2005 netams_api.pl

Копируем все это счастье в /usr/local/www/cgi-bin-dist, и подправляем под свою конфигурацию. А именно:
#
#-----------------------------------------------------------------------------
# $Id: config.cgi,v 1.5 2005/04/06 16:21:49 anton Exp $

# Data required to do a script login, change this
# login to netams
$sc_host="localhost"; $sc_port=20001; $sc_user="LOGIN"; $sc_passwd="PASSWORD";

#login to database
$mysql_host="localhost"; $mysql_login="netams"; $mysql_password="PASSWORD"; 
$mysql_dbname="netams";

#log events
$log_to_events="yes";

#URL to statistic
$statistic_url="/stat";

Ну в прнципе и все. Еще в login.cgi есть описание картинки, которая отображается в веб-морде. Там можно изменить путь к любой своей картинке, подходящей по размеру ;). Я заменил на свою:
<tr align=center><td width=100%><img src="/stat/images/logo_sm.jpg" width="376" 
height="60" alt="" border="0" align=left>

Ну вот вроде и все, пробуем заходить по адресу http://my.domen.ru/cgi-bin/login.cgi с логином/паролем, что указаны в set no name eugene password 123456 inact 3000 abs 0. Т.е. логин admin, пароль 123456.

Должно все получиться, иначе смотрим логи апача :)

P.s.: есть мысль сделать доступ к веб-морде по протоколу https, но пока не доходят руки. Когда дойдут - опишу ;)

P.p.s: выяснилось, что веб-мордие от версии 3.4.0 не работоспособно, берите или от версии 3.3.5 или 3.4.1.
P.p.p.s: Синтаксис выше приведенных команд касается NeTAMS версии 3.3.5. Для 3.4.х он немного отличается.



размещено: 2008-03-04,
последнее обновление: 2008-05-07,
автор: schizoid


NarkomanLove, 2008-03-05 в 20:10:46

Статья бес спорно хорошая и очень полезнаю. Уже давно пользуюсь netams. А последнее пару недель усиленно в него углубился. И собственно по netams: мне так и не удалось завести правило restrict all drop local pass, при таком раскладе все равно все лезут в инет, даже если они не прописаны в netams.cfg. Еще одна проблема столкнулся сегодня: после добавления 30 пользователей с квотами, и работы в течении пару суток, netams начал тупить. Удаленная консоль просто зависает при команде show config.. Через стандартный скрипт netams не отключаеться. Попробую в ближайщую неделю перенести шлюз с netams на другой сервер и там посмотреть его работу.

schizoid, 2008-03-05 в 20:28:47

про restrict all drop local pass у тя в фаере divert или tee ?

NarkomanLove, 2008-03-05 в 22:25:24

00052  18151  2506399 divert 199 ip from any to any in via fxp0
00053  17833 12533397 divert 199 ip from any to any out via fxp0

тему про это дело поднимал здесь:
http://www.netams.com/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=2&t=003284

schizoid, 2008-03-06 в 23:09:42

а НАТа у тебя нет вообще?

NarkomanLove, 2008-03-08 в 16:01:25

Есть идет правилами ниже.
А что?
ipfw add divert natd all from any to any via rl0
rl0 -на прова.
Пробывал и на VmWare без ната.
один чорт не хочет работать.
А у тебя работает?

schizoid, 2008-03-08 в 16:10:47

у меня работает. посмотри внимательнее как у меня стоят правила на нетамс и нат.

MAPTbIH, 2008-03-28 в 11:39:45

если у кого нибудь возникнут траблы при авторизации через login.cgi читаем тут, сам замучился.
http://www.netams.com/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=2&t=003012

CoSS, 2008-03-31 в 23:55:02

Вот это не пройдёть
netamsctl "service quota && set name eugene polily ip day 0 sum && exit"

В 3.4 изменена работа с консолью, поэтому все или все-частично по другому, в частности для того что бы зайти в service quota нужно

   telnet localhost 20001
   login
   pass
   >enable
   #con term
   (config)#service quota
   (config-quota:0#)#


    Что бы вы не делали - в начале нужно набрать enable после чего можно просмотреть список команд shift+?. Для внесения изменений набрать con term это сокращенно от configure terminal, затем вновь можно набрать shift + ? выбрать сервис и вносить изменения, после внесения изменений не забывать save

schizoid, 2008-04-01 в 18:21:07

ну прям цисочники :)

а ведь верно. скоро буду ставить новій НеТАМС, поправлю статью, когда все попробую руцями

m1h, 2008-04-02 в 15:17:39

Странно... но у меня почему-то bw не заработал...
изначально ставил порт с Build with bandwidth limitation functionality... потом пересобрал с -DHAVE_BW
Пакеты идут через divert...
Трафик считает, но почему-то не режет.
Можт кто сталкивался?

Grishin_U_S, 2008-04-20 в 19:48:22

В статье ошибка :
netamsctl "service quota && set name eugene polily ip day 0 sum && exit"

BuZZ, 2008-10-23 в 22:44:00

cmd: service quota && set name shoten policy ip day 5M sum && exit
Invalid command "service"

>Invalid command "set"

В чем грабли =(

BuZZ, 2008-10-23 в 22:46:41

Sorry =) Ответ выше =)

godlike, 2009-05-31 в 23:19:03

Аналогично не заработал bw.
Порт - самый новый с сайта netams - 3.4.2c
Конфиг - копия статьи.
Не режет.
Кому удалось выяснить причину?

schizoid, 2009-06-01 в 0:31:46

конфиг с порта 3.3.5
в новом возможно именился синтаксис. лучше на счет этого глянуть на оф сайте

godlike, 2009-06-01 в 1:18:49

Спасибо большое!
Благодаря этой наводке, я посмотрел, что синтаксис не изменился, и от отчаянья придумал, как шейпить по другому=)

schizoid, 2009-06-01 в 8:52:32

ну я сам тоже давно уже режу скорость фаерволом



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0467 секунд
Из них PHP: 36%; SQL: 64%; Число SQL-запросов: 77 шт.
Исходный размер: 44290; Сжатая: 10594