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

Ограничение доступа

Разрешить запросы к интерфейсу администратора только с известных IP-адресов

Например, интерфейс администратора находится по адресу https://example.com/admin и доступ к нему должны иметь только сотрудники офиса из сети 12.23.56.0/24.
№ Критерия
Поле
Оператор
Значение
1
http.request.path
begins
/admin
2
ip.addr
NOT in
12.23.56.0/24
Действие
HTTP-код
Текст
deny
403
Опционально
Если вы хотите разрешить доступ с нескольких IP-адресов или сетей, то удобнее будет создать список, после чего указать его в необходимом критерии.

Заблокировать все запросы не из России

№ критерия
Поле
Оператор
Значение
1
ip.geoip.country
NOT equals
Россия
Действие
HTTP-код
Текст
deny
403
Опционально

Заблокировать запросы, инициированные с посторонних сайтов

Например, вы хотите, чтобы открытый поток или другой контент воспроизводились только на вашем сайте. Вы можете создать список с доверенными сайтами и блокировать все запросы, где заголовок Referer или Origin не входят в этот список.
№ Критерия
Поле
Оператор
Значение
1
http.request.referer.host
NOT in
"Выберите из списка" + укажите список
Действие
HTTP-код
Текст
deny
403
Опционально
При необходимости вы можете добавить дополнительный критерий, который будет сравнивать путь к конкретным объектам или потокам с заранее созданным списком.
Поле
Оператор
Значение
1
http.request.path
in
"Выберите из списка" + укажите список

Запретить доступ к определенной части сайта

Например, у вас есть раздел, который не должен быть доступен через Платформу. Вы можете создать правило, которое будет блокировать все запросы, которые начинаются с определенной строки, например:
№ Критерия
Поле
Оператор
Значение
1
http.request.path
begins
/local
Действие
HTTP-код
Текст
deny
403
Опционально
Таким образом, все запросы, которые начинаются на /local, будут заблокированы.

Запретить доступ к из определенных автономных систем (ASN)

  1. 1.
    В разделе "Управление списками" клиентского портала создайте и наполните список автономных систем.
  2. 2.
    Создайте правило, которое будет блокировать все запросы с IP-адресов, которые принадлежать какой-либо из автономных систем из списка:
№ Критерия
Поле
Оператор
Значение
1
ip.asn
in
"Выберите из списка" + укажите список
Действие
HTTP-код
Текст
deny
403
Опционально

Запретить доступ для подозрительных User-Agent

Существуют большое количество приложений, которые используются злоумышленниками для атак на веб-ресурсы. Например, это может быть ботнет из взломанных Wordpress или других систем и сканеров. Все эти приложения по умолчанию выставляют определенные значения в заголовке User-Agent. Вы можете определить для себя список подобных User-Agent и заранее заблокировать запросы, которые его содержат. Для этого:
  1. 1.
    В разделе "Управление списками" клиентского портала создайте и наполните необходимыми значениями User-Agent список с контентом типа "Строки" .
  2. 2.
    Создайте правило, которое будет блокировать все запросы с заголовком User-Agent, который начинается/содержит/заканчивается на какое-либо из значений в ранее созданном списке:
№ Критерия
Поле
Оператор
Значение
1
http.request.headers.user-agent
begins
"Выберите из списка" + укажите список
Действие
HTTP-код
Текст
deny
403
Опционально
Для удобства можно отключить опцию "Учитывать регистр" при редактировании этого правила.

Запретить доступ из сетей хостинг-провайдеров, VPN, Tor и Proxy-сервисов

Значимая часть зловредных запросов инициируется из сетей хостинг-провайдеров, VPN, Tor и Proxy-сервисов. Вы можете запретить доступ из этих сетей к своим сервисным конфигурациям. Для этого:
  1. 1.
    Создайте первое правило со следующими критериями и действиями:
    № Критерия
    Поле
    Оператор
    Значение
    1
    ip.network_type
    in
    datacenter
    Действие
    HTTP-код
    Текст
    deny
    403
    Опционально
  2. 2.
    Создайте второе правило со следующими критериями и действиями:
    № Критерия
    Поле
    Оператор
    Значение
    1
    ip.proxy_type
    in
    proxy, vpn, tor
    Действие
    HTTP-код
    Текст
    deny
    403
    Опционально
Вы можете комбинировать критерии различным образом для получения более точного совпадения по источникам запросов.

Блокировать запросы с версией протокола HTTP/1.0

Протокол HTTP версии 1.0 является устаревшим. В некоторых случаях использование этой версии является значимым критерием нелегитимности запроса, т.к. большинство современных браузеров используют версии 1.1 или 2.0. Чтобы заблокировать запросы с версией 1.0 сделайте следующее:
  1. 1.
    Создайте правило со следующими критериями и действиями:
№ Критерия
Поле
Оператор
Значение
1
http.version
equals
HTTP/1.0
Действие
HTTP-код
Текст
deny
403
Опционально
Вы также можете создать критерий с другими версиями протокола.

JavaScript-валидация пользователей не из России

Рассмотрим сценарий, при котором мы хотим настроить JavaScript-валидацию всех запросов не из России и осуществлять блокировку запросов от ботов при их обнаружении:
  1. 1.
    Разрешите все запросы из России. Для этого создайте первое правило со следующими критериями и действиями:
Поле
Оператор
Значение
ip.geoip.country
equals
Россия
Действие
allow
Действие allow является терминирующим, то есть к пользователям из России последующие правила применяться не будут.
2. Инициируйте валидацию всех остальных пользователей. Создайте второе правило в наборе:
Поле
Оператор
Значение
http.request.js_challenge_ok
equals
false
Действие
TTL проверочных Cookie (в секундах)
jsChallenge
3600
В соответствии с этим правилом Javascript-валидация будет осуществляться для всех пользователей не из России. "TTL проверочных Cookie" определяет период между повторными проверками пользователя.

Перенаправление

Отдавать зарубежным пользователям другой поток

Допустим, вам необходимо ограничить доступ к вашим потокам из-за рубежа в силу лицензионных договоренностей.
Данный пример показывает, как можно показывать зарубежным пользователям специальный поток, например заглушку. Для этого после запроса исходного потока (https://live.example.ru/live/stream/playlist.m3u8) они перенаправляются на другой поток – https://live.example.ru/live/blocked/playlist.m3u8.
Правило:
№ критерия
Поле
Оператор
Значение
1
http.request.path
equals
/live/stream/playlist.m3u8
2
ip.geoip.country
NOT equals
Россия
Действие
Ссылка для перенаправления
redirect
https://live.example.ru/live/blocked/playlist.m3u8

Заглушка на сайте на время регламентных или аварийных работ

Правило:
№ критерия
Поле
Оператор
Значение
1
http.request.path
equals
/
Действие
Ссылка для перенаправления
redirect
https://example.ru/maintenance

Замена контента

Отдавать другой контент пользователям с определенным User-Agent

Например, вы хотите, чтобы все запросы с заголовком "User-Agent: wget" получали специальный контент. Это можно сделать путем замены содержимого заголовка Host: запросы будут приходить на ваш сервер оригинации в отдельно выделенный виртуальный сервер "bots.example.ru".
Правило:
№ критерия
Поле
Оператор
Значение
1
http.request.headers.user-agent
equals
wget
Действие
Заголовок
Значение заголовка
setHeader
http.request.headers.host
bots.example.ru
Для удобства можно отключить опцию "Учитывать регистр" при редактировании этого правила.

Управление заголовками

Добавить заголовок в сторону сервера оригинации для всех запросов

Добавление дополнительного заголовка может понадобиться в случае, если вы хотите определенным образом размечать запросы, которые пришли с платформы NGENIX, для последующей особой обработки их на вашем сервере оригинации. Например, для записи в лог или для настройки политик безопасности на вашем веб-сервере.
Например, для добавления заголовка X-Cloud-Platform создайте следующее правило:
№ критерия
Поле
Оператор
Значение
1
оставьте пустым
оставьте пустым
оставьте пустым
Действие
Заголовок
Значение заголовка
setHeader
http.request.headers.x-cloud-platform
NGENIX

Удалить заголовок в сторону сервера оригинации для всех запросов

Например, вы хотите удалять заголовок Accept-Encoding, чтобы отдавать все данные в несжатом виде или с использованием только одного конкретного алгоритма сжатия.
Для этого создайте следующее правило:
№ критерия
Поле
Оператор
Значение
1
оставьте пустым
оставьте пустым
оставьте пустым
Действие
Заголовок
delHeader
http.request.headers.accept-encoding
Copy link
Outline
Ограничение доступа
Разрешить запросы к интерфейсу администратора только с известных IP-адресов
Заблокировать все запросы не из России
Заблокировать запросы, инициированные с посторонних сайтов
Запретить доступ к определенной части сайта
Запретить доступ к из определенных автономных систем (ASN)
Запретить доступ для подозрительных User-Agent
Запретить доступ из сетей хостинг-провайдеров, VPN, Tor и Proxy-сервисов
Блокировать запросы с версией протокола HTTP/1.0
JavaScript-валидация пользователей не из России
Перенаправление
Отдавать зарубежным пользователям другой поток
Заглушка на сайте на время регламентных или аварийных работ
Замена контента
Отдавать другой контент пользователям с определенным User-Agent
Управление заголовками
Добавить заголовок в сторону сервера оригинации для всех запросов
Удалить заголовок в сторону сервера оригинации для всех запросов