[service quota]
[service quota]
Основные свойства:
Хранение информации о квотах клиентов в базе SQL. В настоящий момент поддерживается MySQL и Postgres.
Возможность задания политики учета (контроля), параметров оповещения по умолчанию.
Возможность задания всех параметров квот по трафику индивидуально для каждого юнита. Это величины входящего, выходящего и суммарного трафика начиная с момента начала часа, дня, недели и месяца.
Возможность задания порога «мягкого срабатывания» в процентах от «жесткой» квоты индивидуально для каждого юнита.
Возможность гибкого управления параметрами оповещения при срабатывании и возвращении квоты.
Первоначальную настройку необходимо провести при неработающем демоне NeTAMS.
Допустим, что данные уже хранятся в базе данных MySQL, определенной в сервисе data–source с номером 2:
service data–source 2
type mysql
Для работы сервиса quota необходимо будет указать номер сервиса–хранилища данных:
service quota 0
storage 2
После этих операций запустите NeTAMS. Все остальные настройки можно выполнить при работающей программе. Проверить, работает ли сервис, можно:
Просмотром лог–файла программы
Просмотром списка таблиц SQL–базы NeTAMS: mysqlshow netams (должна появиться таблица «quota»)
Подключившись к программе через telnet–интерфейс и выполнив команду show quota
Для настройки параметров сервиса quota необходимо подключиться к программе через telnet–интерфейс, перейти в режим настройки сервиса командой
service quota 0
и набором команд. Все команды делятся на две части: команды настройки собственно сервиса (они сохраняются в конфигурационном файле) и команды, вызывающие настройку параметров квот отдельных юнитов (они находят отражения в SQL–таблице).
policy XXX
Задает политику учета (acct–policy), которая будет использоваться при проверке квот. Это политика по умолчанию для всех, существует возможность переопределить ее для конкретного юнита. Если не указано, используется первая политика из определенных policy XXX сервиса processor.
block–policy XXX
Задает политику блокировки (fw–policy), которая будет добавляться к набору политик блокировки юнита при превышении квоты. Это политика по умолчанию действует на все юниты, существует возможность переопределить ее для конкретного юнита. При отсутствии этой команды будет использоваться только механизм sys–deny–quota. Про «направление действия» смотрите этот документ.
ВАЖНО!
Появление этой команды потребовало изменения схемы таблицы QUOTA в базе данных. Если вы проводите «чистую» инсталляцию NeTAMS или можете себе позволить удалить существующую таблицу QUOTA, написанное далее вас не касается. Если вы проводите обновление с версии 3.2.0, 3.2.1 или STABLE до 10.02.2005, необходимо вручную модифицировать схему БД. Для этого достаточно выполнить следующие SQL–команды:
alter table quota add column block_policy INT default 0;
alter table quota add column block_policy_flags INT default 0;
soft–treshold N
Задает порог срабатывания «мягкой квоты» для юнита, в процентах от «жесткой квоты». Ранее размер мягкой квоты можно было указывать независимо для каждого типа квоты (например «входящий в день, исходящий в неделю»), теперь это значение одно. По умолчанию определено в src/netams.h (S_QUOTA_DEF_soft_treshold) и равно 80%. Допустимые значения от 0 до 100, значок "%" ставить не нужно. Значение «0» отключает «мягкие квоты» совсем.
delay N
Интервал времени между периодическими проверками всех юнитов на наступление момента срабатывания квоты. Задается в секундах. По умолчанию значение 10 сек., которое объявлено в в src/netams.h (S_QUOTA_DEF_delay).
storage N
Номер сервиса storage, в котором будет создана и использоваться таблица quota. Этот параметр нельзя указывать (изменять) при работающей программе.
set {name XXX | oid YYY}
[policy XXX]
[block–policy XXX]
[soft–treshold N]
[active|inactive]
[notify [{soft|hard|return} {«{none}»|[«{owner}»] [YYY]}]]
[hour … ]
[day …]
[week …]
[month …]
Задает конкретные настройки для юнита. Параметры policy, soft–treshold и notify переопределяют те, которые заданы глобально для сервиса в целом. Вызов этой команды приводит к изменению записи в таблице quota SQL–сервера, но не отражается в конфигурационном файле.
• name XXX | oid YYY}
• Задает имя или OID юнита, с которым производится работа. Это единственный обязательный параметр.
• policy XXX
• Определяет политику учета (acct–policy), которая будет использоваться при проверке квоты для данного юнита. Задается по имени политики.
• block–policy XXX
• Определяет политику блокировки (fw–policy), которая будет применяться к юниту при превышении квоты. Задается по имени политики.
• soft–treshold N
• Задает конкретное значение порога «мягкой квоты» для данного юнита, в процентах от «жесткой квоты». Значение «0» отключает «мягкую квоту» для данного юнита совсем. Допустимый диапазон значений от 0 до 100.
• active|inactive
• Включает и выключает обработку квот для данного юнита. Вы можете временно выключить обработку, при этом все настройки для юнита останутся в базе данных. Полезно для «экстренного включения клиента обратно».
• notify {при_условии} {кого}
• Определяет, кому будут отсылаться почтовые сообщения о наступлении событий, связанных с данным юнитом.
• Условие ({при_условии}) - это одно из событий:
• soft — произошло переполнение «мягкой» квоты. Необходимо предупредить пользователя, не отключая его.
• hard — произошло переполнение «жесткой» квоты. Необходимо предупредить пользователя о том, что он отключен, и отключить его.
• return — по прошествии времени (например, начался новый месяц) пользователь должен быть включен и оповещен об этом.
•
• Получатель ({кого}) - персона, которую оповещать. Оповещены о наступлении события могут быть и/или собственно владелец юнита (при условии что юнит имеет тип user и для него установлен параметр email), а также один из заведенных в программе пользователей (user), например сам администратор сети. Возможные значения:
• {owner} - владелец юнита
• username — имя или OID пользователя (администратора).
Примеры (предположим ранее определено user name admin email root@localhost ):
notify soft {owner}
notify hard {owner} admin
notify return admin
• [hour … ], [day …], [week …], [month …]
• Задает значения квот на период времени. Формат:
• time_spec amount {in|out|sum},
• где timespec={hour|day|week|month}, amount — значение квоты (в байтах, но можно использовать модификаторы K, M, G), {in|out} - направление квотируемого трафика, {sum} - суммарный трафик (в обоих направлениях). Если необходимо сбросить значение квоты для определённого направления, то надо задать её равной 0. Например:
set name user1 month 0 in
В этом случае будет сброшена месячная квота на входящий трафик.
Значения параметров по умолчанию можно поменять в соответствующей секции файла src/netams.h и последующей полной пересборкой программы (make clean; make). Ниже приведен их список:
#define S_QUOTA_DEF_soft_treshold 80
#define S_QUOTA_DEF_delay 10
#define S_QUOTA_DEF_notify_soft 1
#define S_QUOTA_DEF_notify_hard 1
#define S_QUOTA_DEF_notify_return 1
Исполнение команд вида set … приводят к модификации внутренних структур программы (точнее, заполнению полей структуры u->quotadata юнита u), а также к модификации таблицы quota текущей указанной SQL–базы данных. Как обычно, если такой таблицы не существует, она создается автоматически при первом запуске. Формат таблицы можно посмотреть через вызов команды mysqlshow netams quota. Не пытайтесь редактировать SQL–таблицу quota извне своими программами. Все записи должны вноситься скриптами или вручную через telnet–интерфейс программы (команда set).
Ниже приведен пример применения сервиса контроля квот для небольшой сети. Постановка задачи следующая:
Сеть построена на маршрутизаторе FreeBSD 4.7 / NeTAMS 3.1(2176)
Локальная сеть объединяет порядка 10 компьютеров с адресами 192.168.0.X
Ряду компьютеров необходимо организовать квоты на выход в Интернет, порядка 3 Мб входящего трафика в день и 100М в месяц.
Необходимо отправлять оповещения о наступлении мягкой квоты (75%), жесткой квоты и возвращения доступа пользователям, жесткой квоты — администратору.
Учитывать необходимо только HTTP–трафик.
Ниже приведен полный конфигурационный файл NeTAMS:
debug none
user oid 01327B name admin real–name Konstantin email AAA@mail.ru permit all
schedule oid 08FFFF time hourly–action html
#services configuration
service server 0
login any
listen 20001
max–conn 6
service processor 0
lookup–delay 20
flow–lifetime 60
policy oid 146633 name all–ip target proto ip
policy oid 147C83 name http target proto tcp ports 80 8080 81 3128 443
restrict all pass local pass
unit group oid 0574B0 name LAN acct–policy all–ip
unit group oid 05431B name WAN acct–policy all–ip
unit host oid 021949 name server ip 192.168.0.1 acct–policy all–ip
unit host oid 02238E name Andrew ip 1.3.168.142 acct–policy all–ip http
unit net oid 0446E8 name local ip 192.168.0/24 acct–policy all–ip
unit net oid 043D1B name all ip 0.0.0.0 mask 0.0.0.0 acct–policy all–ip
unit host oid 02507E name 02 ip 192.168.0.10 acct–policy all–ip http
unit host oid 022EB1 name 03 ip 192.168.0.11 acct–policy all–ip http
unit host oid 0241B7 name 07 ip 192.168.0.12 acct–policy all–ip http
unit host oid 0279E2 name 09 ip 192.168.0.13 acct–policy all–ip http
unit host oid 027545 name 11 ip 192.168.0.14 acct–policy all–ip http
unit host oid 02515F name 12 ip 192.168.0.15 acct–policy all–ip http
unit user oid 025BD0 name 13_1 ip 192.168.0.16
email user08@a.ru acct–policy all–ip http
unit host oid 021220 name 14 ip 192.168.0.17 acct–policy all–ip http
unit user oid 024DB1 name 13_2 ip 192.168.0.18
email user09@a.ru acct–policy all–ip http
unit host oid 020216 name 16 ip 192.168.0.19 acct–policy all–ip http
unit host oid 021F16 name 17 ip 192.168.0.20 acct–policy all–ip http
unit host oid 021190 name 50_1 ip 192.168.0.21 acct–policy all–ip http
unit host oid 0266EF name Localnet ip 192.168.0.22 acct–policy all–ip http
unit host oid 02140E name TPSO–1 ip 192.168.0.23 acct–policy all–ip http
unit host oid 023352 name TPSO–2 ip 192.168.0.24 acct–policy all–ip http
unit host oid 02109C name 07–2 ip 192.168.0.25 acct–policy all–ip http
unit host oid 020DED name 19 ip 192.168.0.26 acct–policy all–ip http
unit user oid 027FDC name 15_1 ip 192.168.0.27
email user05@a.ru acct–policy all–ip http
unit user oid 021BEF name 15_2 ip 192.168.0.28
email user02@a.ru acct–policy all–ip http
unit user oid 0241A7 name 15_3 ip 192.168.0.29
email user04@a.ru acct–policy all–ip http
unit user oid 026B68 name 15_4 ip 192.168.0.30
email user06@a.ru acct–policy all–ip http
unit host oid 024E6A name 08_1 ip 192.168.0.31 acct–policy all–ip http
storage 1 all
service storage 1
type mysql
service quota 0
policy http
soft–treshold 75
notify soft {owner}
notify hard {owner} admin
notify return {owner}
storage 1
service data–source 1
type ip–traffic
source divert 199
rule 5 «ip from any to any via rl0»
service alerter 1
report oid 06100 name rep1 type traffic period day detail simple
smtp–server localhost
service html 1
path /home/www/traffic
language en
run hourly
После установки этого конфигурационного файла необходимо внести в NeTAMS/SQL реальные значения для параметров квот пользователей. Очень подходит для этого утилита netamsctl из дистрибутива :
netamsctl «service quota 0 && set name 12 day 3M in month 150M in && exit»
netamsctl «service quota 0 && set name 13_1 day 3M in month 100M in && exit»
netamsctl «service quota 0 && set name 13_2 day 3M in month 100M in && exit»
netamsctl «service quota 0 && set name 15_1 day 3M in month 100M in && exit»
netamsctl «service quota 0 && set name 15_2 day 3M in month 120M in && exit»
netamsctl «service quota 0 && set name 15_3 day 3M in month 100M in && exit»
netamsctl «service quota 0 && set name 15_4 day 3M in month 100M in && exit»
Набирая эти команды в командной строке NeTAMS вызывается запись соответствующих параметров в базу SQL, конфигурационный файл не меняется и команду save исполнять не надо. Вы также можете настроить и использовать веб–интерфейс Admintool для управления квотами.