Управление оборудованием

Применение правил управления доступом на сетевом оборудовании

АСР “Pyzzle.ISP” позволяет автоматически управлять настройками сетевого оборудования, эта функциональность может использоваться для управления доступа к услугам связи, например для автоматического блокирования доступа для абонентов, у которых закончились средства на лицевом счету.
Этот компонент информационной системы называется “правила устройств” (device_rules). Правила устройств представляют собой таблицу в базе данных системы со следующими полями:
  • Имя устройство (DNS имя устройства для которого относятся эти правила)
  • Название правила (устройство одновременно может поддерживать различные правила, например правила для доступа, и правила для ограничения скорости)
  • Параметры правила (зависит от типа правил, например IP адрес)
  • Текущее значение правила
  • Новое значение правила.
Смысл текущего и нового значений правил зависит от типа правил, для ограничения скорости это может быть скорость доступа, а для блокировки/разблокировки это может быть 0/1 в зависимости от состояния доступа.
Правила формируются в процессе расчета состояния лицевых счетов абонентов, при открытии или завершении расчетных периодов и т.п. При формировании нового правила система заполняет поле “новое значение”. Отдельный процесс на сервере, devicerules_daemon считывает правила, которые нужно применить (правила у которых текущее значение не совпадает с новым), применят правила и записывает новый статус правила в поле “текущее значение”. Такой метод работы не приводит к задержкам в процессе расчета состояний лицевых счетов, т.к. реальное применение правил реализуется отдельным процессом, а так же не нарушается работоспособность системы при недоступности устройства, на котором нужно применить правила.
Запуск процесса управления правилами можно осуществить стандартным образом через CLI-интерфейс daemon start devicerules (предварительно указать в конфигурационном файле, что этот процесс должен выполняться на сервере). Так же можно запускать из командной строки операционной системы, в этом случае можно использовать дополнительные параметры запуска.
Для получения отладочной информации можно использовать параметр -d или --debug. В этом случае программа будет писать сообщения о том какие внешние команды она запускает, какие правила обрабатывает и т.п. В этом случае программа не переходит в фоновый режим работы.
Параметр --rebuild <rule_name> позволяет полностью пересоздать правила доступа указанного типа на сервере. В при этом выполняться команды очистки правил, и заново создадутся все правила на устройстве. После выполнения всех правил, команда завершится. Такой запуск команды можно использовать если по каким-либо причинам нужно пересоздать правила (например после ручного редактирования firewall на сервере, которое затронула часть правил и мы хотим их восстановить) или при загрузке сервера, тогда система создаст все необходимые правила для корректной работы абонентов.

Note

Все вызовы системных команд и результат их выполнения регистрируются с системном журнале. Для того чтобы сохранять эти записи в отдельном файле, в конфигурационном файле billing.cfg нужно указать

log_file_device_rules=device_rules.log
log_level_device_rules=3

Уровень протоколирования 3 позволяет вести запись всех вызовов системных команды, уровень 1 позволяет протоколировать только команды завершившиеся ошибкой.

Для настройки “правил доступа” в конфигурационном файле создается необходимое количество описаний классов. В поставку системы Pyzzle.ISP входят классы для работы с Linux/iptables+tc и FreeBSD/ipfw. В описании класса настраиваются шаблоны системных команд, которые должны вызываться при добавлении/удалении правил.

Note

В конфигурационном файле enviroment.py необходимо определить класс для общей работы к правилами (Device Rules Manager) (bill_obj.device_rules_manage_class), которые реализует функции управления правилами, и используется другими компонентами системы при необходимости применить правила.

Так же в enviroment.py описывается распределение правил по устройствам - указывается на каких серверах какие типы правил применяются и указывается какой именно класс это реализует. Пример настройки:
bill_obj.device_rules_desc={
  "babylon5":{
    "shaping_in":Shaping_babylon_in,
    "shaping_out":Shaping_babylon_out,
  "babylon6":{
    "shaping_in":Shaping_babylon6_in,
    "shaping_out":Shaping_babylon6_out,
  "billing" :{"mac_ip":MyMacIpRules},
  "epsilon4":{
    "inet_access":MyInetAccessRules,
    "ip_mark":MyIpMarkRules}
}
В этом примере на серверах babylon5 и babylon6 включаются правила “shaping_in”, “shaping_out”. На сервере billing правило “mac_ip”, а на сервере epsilon4 правила “inet_access”,”ip_mark”. Классы соответствующие правилам должны быть определены в файле enviroment.py до объявления переменной device_rules_desc.
В описании классов тарифов и услуг включаются компоненты отвечающие за формирование правил, в эти компоненты входят константы, которые настраиваются в файле enviroment.py, эти константы определяют какой тип правила применять и на какие устройства. Если не указано на какие устройства применять правила, то система сформирует правила на все устройства, поддерживающие нужный тип правил.

Warning

“Правила устройств” предназначено в первую очередь для управления Unix-подобными серверами, на которых будет запущено программное обеспечение АСР “Pyzzle.ISP”. Для массового управления однотипным оборудованием, например коммутаторами уровня доступа, применяются другие дополнительные компоненты информационной системы, которые не входят в поставку АСР “Pyzzle.ISP”.

Ограничение доступа используя Linux/iptables

На серверах с операционной системой Linux, для управление параметрами работы маршрутизатора АСР “Pyzzle.ISP” может осуществлять управление правилами netfilter/iptables/ipset для ограничения доступа и маркировки трафика, и iproute2/tc для управления ограничением скорости. Для этого в системе реализованы классы, которые могут быть использованы как компоненты в описании класса для “правил устройств”.
Для наилучшей производительности с использованием однотипных правил, можно использовать ipset для хранения в ядре операционной системы информации о том каким адресам должен быть открыт или закрыт доступ. Для этого нужно в шаблонах вызова команд указать шаблон вызова ipset.

Note

Настройка классов для “правил устройств” осуществляется разработчиком в ходе внедрения информационной системы, в соответствии с требованиями заказчика.

Ограничение доступа используя FreeBSD/ipfw

Для управление доступом и ограничения скорости на серверах под управлением FreeBSD, АСР “Pyzzle.ISP” использует ipfw. Для повышения быстродействия работы сервера однотипные правила создаются с использованием механизма table.
Класс ipfw_table_access_device_rules позволяет управлять таблицей для простого доступа у услугам (открыт/закрыт).
Класс ipfw_table_shaping_static_pipe_device_rules позволяет организовать ограничение скорости прохождения трафика, при этом для каждого правила будет создан отдельный pipe, а для направления в pipe используется ipfw table.

Note

Настройка правил доступа выполняется разработчиком с учетом требований заказчика и топологии сети.