Links

Управление правилами обработки запросов

Общий принцип

В рамках сервиса Edge Logic Rules вы можете создавать неограниченное количество наборов правил и привязывать их к сервисным конфигурациям. При обработке запроса Платформа будет проверять запросы на соответствие критериям в правилах обработки в составе набора правил. При составлении правил обработки вы можете использовать заранее созданные списки значений: IP-префиксы, страны, заголовки и т.п.

Наборы правил

Вы можете управлять наборами правил на странице сервиса «Edge Logic Rules» клиентского портала NGENIX Multidesk.
Наборы правил
Набор правил содержит от одного до нескольких правил. В правилах описаны критерии, при выполнении которых будет применено одно или несколько действий.
Набор правил может быть включен или выключен. В зависимости от этого будет включена или выключена обработка запросов по правилам набора во всех сервисных конфигурациях, к которым привязан данный набор.
К сервисной конфигурации можно привязать только один набор правил. При этом один и тот же набор правил может быть привязан к неограниченному количеству сервисных конфигураций.
Статус набора может быть либо "используется" либо "не используется", в зависимости от того, привязан ли данный набор хотя бы к одной сервисной конфигурации или нет.
Набор правил

Категория набора правил

Существуют следующие категории:
  • простой,
  • расширенный,
  • универсальный.

Порядок обработки правил в наборе

Каждый запрос проходит все правила в наборе последовательно, сверху вниз. Обработка запроса прекращается, если в каком-либо правиле выполняется терминирующее действие.
Вы можете изменить порядок правил, переместив их в нужном порядке.
Максимальное количество правил в одном наборе: 20.

Правила

Каждое правило состоит из критериев и действий. Действия применяются к запросу только в том случае, если выполняются все описанные в правиле критерии.
Вы можете копировать и удалять правила. Также любое правило в наборе может быть отключено.

Критерии (условия срабатывания правил)

В каждом критерии указывается Поле, содержимое которого будет сравниваться со Значением с помощью Оператора.
Критерии в правиле

Поля HTTP-запроса пользователя

  • http.request.args.<argument_name> – аргумент запроса,
  • http.request.headers.<header_name> – HTTP-заголовок,
  • http.request.host – значение заголовка Host,
  • http.request.js_challenge_ok – результат JavaScript-валидации пользователя (true или false),
  • http.request.method – HTTP-метод (GET, HEAD, POST и т.п.),
  • http.request.origin.host – хост из заголовка Origin.
  • http.request.origin.scheme – схема из заголовка Origin,
  • http.request.path – путь к ресурсу без схемы, хоста, порта и аргументов,
  • http.request.port – порт (TCP),
  • http.request.rawuri – URI запроса,
  • http.request.referer.host – хост из заголовка Referer,
  • http.request.referer.scheme – схема из заголовка Referer,
  • http.request.scheme – схема (http или https),
  • http.version версия протокола HTTP (HTTP/1.0, HTTP/1.1, HTTP/2.0 и т.п.),
  • ip.addr – IP-адрес,
  • ip.asn – номер автономной системы (AS),
  • ip.geoip.country – страна,
  • ip.network_type – принадлежность адреса к сетям хостинг-провайдеров,
  • ip.proxy_type – принадлежность адреса к сетям провайдеров сервисов VPN, Proxy, Tor,
  • tls.ngx_fingerprint_hash – значение TLS-fingerprint хэша,
  • tls.version – версия протокола TLS (TLSv1, TLSv1.1, TLSv1.2, TLSv1.3).
Например, чтобы создать критерий для User-Agent необходимо в Поле указать: http.request.headers.user-agent
Значение в "Поле" необходимо указывать в нижнем регистре.
Максимальное количество критериев в одном правиле: 5.
Можно выбрать следующие операторы сравнения, в зависимости от выбранного поля:
  • true –  всегда верно,
  • equals – равно единственному Значению,
  • in – равно хотя бы одному из перечисленных Значений,
  • contains – содержится в любом из перечисленных Значений,
  • begins – начинается с любого из перечисленных Значений,
  • ends – заканчивается на любое из перечисленных Значений,
  • exists – присутствует.
Опционально вы можете выбрать модификатор запроса NOT. В этом случае оператор сравнения инвертируется.
В правиле могут отсутствовать критерии. В этом случае действие будет выполняться для любого запроса.
Вы можете использовать список значений при создании критерия. Например, список стран, IP-префиксов и т.п.
Для некоторых типов Полей есть опция "Учитывать регистр", по умолчанию она включена. При отключении этой опции (снятия галочки) регистр значений будет игнорироваться.
Опция учета регистра
Например, если правило срабатывает при указанном значении "SomeString", то при отключенном учете регистра оно также будет срабатывать для значений "Somestring", "someString" и т.п.

Действия

Действия описывают, каким образом поступать с запросом, если для него выполнены все критерии в правиле.
Действия в правиле
Доступны следующие действия:
  • allow –  пропустить запрос,
  • deny – заблокировать запрос,
  • redirect – перенаправить запрос (3xx Redirect),
  • setHeader – установить(заменить) заголовок запроса,
  • delHeader – удалить заголовок запроса,
  • jsChallenge – произвести JavaScript-валидацию пользователя.
Действия allow, deny, redirect и jsChallenge являются терминирующими. Это означает, что после выполнения такого действия дальнейшая обработка запроса по следующим правилам прекращается.
Для действия deny также возможно указать текст сообщения для страницы-заглушки. Текст сообщений по умолчанию: "Доступ к сайту временно ограничен владельцем веб-ресурса".

Дополнительные параметры для действий

Для некоторых действий есть возможность указать дополнительные параметры.
Действие
Параметры
allow
отсутствуют
deny
HTTP статус-код от 400 до 599, информационный текст для страницы-заглушки
redirect
Ссылка для перенаправления (можно использовать переменные),
HTTP статус-код (301, 302, 303, 307, 308)
delHeader
имя заголовка
setHeader
имя заголовка, содержимое заголовка (можно использовать переменные)
jsChallenge
TTL проверочных cookie (в секундах)
Для действий setHeader и delHeader имя заголовка должно быть описано в специальном формате: http.request.headers.<header_name>. Например, для заголовка User-Agent: http.request.headers.user-agent

Использование переменных в правилах

При выборе действий redirect и setHeader имеется возможность использовать переменные, что позволяет учитывать изменяющиеся значения исходного запроса. Например:
  • При необходимости перенаправления запроса на другой домен (example.com) можно использовать действие redirect на адрес example.com/${http.request.rawuri} где ${http.request.rawuri} - переменная со значением исходного пути запроса пользователя, включающая аргументы запроса.
  • При необходимости добавления заголовка, содержащего в себе информацию об автономной сети, из которой он пришел на Платформу, можно использовать действие setHeader и в качестве значения добавляемого кастомного заголовка указать переменную ${ip.asn}.
Для использования переменных в поле ввода наберите ${, выберите переменную из выпадающего списка и закройте скобки ( символом "}"). Список доступных переменных идентичен полям HTTP-запросов указанным в Поля HTTP-запроса пользователя.

Списки значений

Списки значений необходимы для перечисления большого количества объектов, таких как:
  • IPv4-адреса,
  • HTTP-методы,
  • страны,
  • строки,
  • ASN (номера автономных систем),
  • md5HashString (значения md5-хэша).
Вы можете использовать списки в критериях правил для тех или иных полей запроса.
Списки значений
Например, вы можете создать список доверенных IPv4-адресов, которые будут иметь доступ к панели администратора. В дальнейшем такой список можно использовать в большом количестве критериев разных правил.
Опция "Учитывать регистр" также применима при использовании списков.

Технические ограничения

Для сервиса Edge Logic Rules действуют следующие технические ограничения:
Сущность
Ограничение
Количество правил в наборе
20
Количество критериев в правиле
5
Количество действий в правиле
5
Размер списка стран
300
Размер списка строк
300
Размер списка префиксов
20000
Количество символов в значениях строк в списке
255