Настройка правил с использованием UPL
 
Настройка правил с использованием UPL (Описание)

UPL — UserGate Policy Language — язык описания политик (конфигурации правил, применяемых для принятия решений по требованиям аутентификации, правам доступа или преобразования контента) UserGate.

Правила настраиваются с использованием действий, условий и свойств.

Для каждого правила настраивается одно из действий. Действия — настройки, которые управляют обработкой транзакции (OK, WARNING, PASS, DENY). При настройке правил, в которых не предусмотрено указание действия (например, правила DNS, NAT и маршрутизации, пропускной способности и т.п.), необходимо указать действия PASS или OK.

Условия задаются знаками равно (=) или не равно (!=), например, зоны, адреса, GeoIP источников и назначения, сервисы, приложения и т.д.; все условия в правиле проверяются по логическому И, т.е. правило сработает, если будут выполнены все условия.

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

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

UPL используется для настройки правил в следующих разделах:

  • Настройки DNS-прокси (уровень: network dns dns-proxy dns-rules).

  • Сaptive-портал (уровень: users captive-portal).

  • Межсетевой экрана (уровень: network-policy firewall).

  • NAT и маршрутизация (уровень: network-policy nat-routing).

  • Пропускная способность (уровень: network-policy traffic-shaping).

  • Фильтрация контента (уровень: security-policy content-filtering).

  • Веб-безопасность (уровень: security-policy safe-browsing).

  • Инспектирование туннелей (уровень: security-policy tunnel-inspection).

  • Инспектирование SSL (уровень: security-policy ssl-inspection).

  • Инспектирование SSH (уровень: security-policy ssh-inspection).

  • СОВ (уровень: security-policy intrusion-prevention).

  • Защита почтового трафика (уровень: security-policy mail-security).

  • ICAP-правила (уровень: security-policy icap-rules).

  • Правила защиты DoS (уровень: security-policy dos-rules).

  • Веб-портал (уровень: global-portal web-portal).

  • Правила reverse-прокси (уровень: global-portal reverse-proxy-rules).

  • Серверные правила (уровень: vpn server-rules).

  • Клиентские правила (уровень: vpn client-rules).

Структура команды для создания правила:

Admin@nodename# create <level> <position> upl-rule <str-upl-syntax>

где <level> — уровень, на котором необходимо создать правило.

      <position> — позиция, на которую будет помещено правило.

      <str-upl-syntax> строка, в которой описано правило в UPL синтаксисе.

Структура команды для обновления существующего правила:

Admin@nodename# set <level> <position> upl-rule <str-upl-syntax>

где <level> — уровень, на котором необходимо обновить правило.

      <position> — номер правила, которое необходимо обновить.

      <str-upl-syntax> строка, в которой описано правило в UPL синтаксисе.

Структура команды для удаления правила:

Admin@nodename# delete <level> <position | all>

где <level> — уровень, на котором необходимо удалить правило.

      <position> — номер правила, которое необходимо удалить.

      <all> — удалить все правила.

Структура команды для отображения правила:

Admin@nodename# show <level> <position | all>

где <level> — раздел, правила которого нужно отобразить.

      <position> — номер правила, которое необходимо отобразить.

      <all> — отобразить все правила.

В качестве примера рассмотрим создание правила межсетевого экрана (использован многострочный ввод):

Admin@nodename# create network-policy firewall 1 upl-rule \
...DENY \
...src.zone = Trusted \
...dst.zone = Untrusted \
...user = known \
...service = HTTPS \
...time = lib.time("Working hours") \
...rule_log(session)\
...name("Example of firewall rule created in CLI") \
...enabled(true)

После создания правило отобразиться в начале списка правил межсетевого экрана (на позиции 1). Данное правило запрещает HTTPS-трафик из зоны Trusted в зону Untrusted пользователям, идентифицированным системой; правило работает в соответствии с расписанием Working hours. При срабатывании правила в журнал будет записана информация о начале сессии.

Синтаксис UPL-правил WAF

Правила WAF в межсетевом экране UserGate описываются с помощью языка UPL. 

Прежде всего, UPL контролирует следующее:

  •  требования к аутентификации пользователя;

  •  доступ к веб-ресурсам;

  • различные аспекты обработки запросов и ответов;

  • журналирование.

Правила обычно пишутся в одной строке, но могут быть разбиты на строки с помощью специального символа обратного слеша. 

Любая строка, начинающаяся с символа %, является комментарием. Символ процента после пробела или табуляции определяет комментарий, который продолжается до конца строки (кроме случаев, когда символ процента отображается внутри кавычек – это часть выражения).

% Это комментарий
DENY("Too many Host headers") request.header.Host.count = 2..  % и это тоже

Правило состоит из условий (conditions) и некоторого количества действий (actions), записанных в любом порядке. Есть еще свойства (properties), которые синтаксически выглядят как действие, но при этом активных действий не производят. Например, свойство name просто ставит атрибут имя на правило. Правила обычно пишутся в одной строке, но могут быть разбиты на строки с помощью специального символа обратного слеша '\'. Когда правило выполняется, условие проверяется для текущей конкретной транзакции. Если условие оценивается как True (истина), выполняются все перечисленные действия (actions) и текущий слой (layer) заканчивается при наличии префиксов PASS/FORCE_PASS/DENY/FORCE_DENY/WARNING/OK. Ecли сработавшее правило не имеет префиксов PASS/FORCE_PASS/DENY/FORCE_DENY/WARNING/OK, то выполняются действия (actions) и дальше обрабатывается уже следующее правило . Если условие оценивается как False для этой транзакции, то дальше обрабатывается уже следующее правило.

Все условия в правиле проверяются по логическому 'И'. Если все условия выполняются, то к трафику применяются все перечисленные в правиле действия. 

В свою очередь, условие является логической комбинацией триггеров (triggers). Триггеры — это отдельные тесты, которые можно сделать над компонентами запроса (url= ), ответа (response.Header.Content-Type=), связанным пользователем (user=, group=) или состоянием системы (time=).

Действия — это настройки, которые управляют обработкой транзакции. Например, запретить (deny) или обработать объект, к примеру изменить заголовок (rewrite).

Rule ::= (PASS|FORCE_PASS|DENY|(DENY '(' string ')')|FORCE_DENY|FORCE_DENY'(' string ')'|WARNING|OK)? Conditions '\'? Actions
Conditions ::= condition '\'? Conditions
Actions ::= action '\'? Actions