Примеры использования обработки запросов

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

Примеры сгруппированы по типам действия:

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

Разрешить запросы к интерфейсу администратора только с известных 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. В разделе "Управление списками" клиентского портала создайте и наполните список автономных систем.

  2. Создайте правило, которое будет блокировать все запросы с IP-адресов, которые принадлежать какой-либо из автономных систем из списка:

№ Критерия

Поле

Оператор

Значение

1

ip.asn

in

"Выберите из списка" + укажите список

Действие

HTTP-код

Текст

deny

403

Опционально

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

Существуют большое количество приложений, которые используются злоумышленниками для атак на веб-ресурсы. Например, это может быть ботнет из взломанных Wordpress или других систем и сканеров. Все эти приложения по умолчанию выставляют определенные значения в заголовке User-Agent. Вы можете определить для себя список подобных User-Agent и заранее заблокировать запросы, которые его содержат. Для этого:

  1. В разделе "Управление списками" клиентского портала создайте и наполните необходимыми значениями User-Agent список с контентом типа "Строки" .

  2. Создайте правило, которое будет блокировать все запросы с заголовком User-Agent, который начинается/содержит/заканчивается на какое-либо из значений в ранее созданном списке:

№ Критерия

Поле

Оператор

Значение

1

http.request.headers.user-agent

begins

"Выберите из списка" + укажите список

Действие

HTTP-код

Текст

deny

403

Опционально

Для удобства можно отключить опцию "Учитывать регистр" при редактировании этого правила.

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

Значимая часть зловредных запросов инициируется из сетей хостинг-провайдеров, VPN, Tor и Proxy-сервисов. Вы можете запретить доступ из этих сетей к своим сервисным конфигурациям. Для этого:

  1. Создайте первое правило со следующими критериями и действиями:

    № Критерия

    Поле

    Оператор

    Значение

    1

    ip.network_type

    in

    datacenter

    Действие

    HTTP-код

    Текст

    deny

    403

    Опционально

  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

http.version

equals

HTTP/1.0

Действие

HTTP-код

Текст

deny

403

Опционально

Вы также можете создать критерий с другими версиями протокола.

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

Версии 1.0 и 1.1 протокола TLS признаны устаревшими в 2020 году. В некоторых случаях использование этой версии является значимым критерием нелегитимности запроса, т.к. большинство современных браузеров поддерживают версии выше 1.1. Чтобы заблокировать запросы с версией TLS 1.0 и 1.1 сделайте следующее:

  1. Создайте правило со следующими критериями и действиями:

№ Критерия

Поле

Оператор

Значение

1

tls.version

equals

TLSv1, TLSv1.1

Действие

HTTP-код

Текст

deny

403

Опционально

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

Рассмотрим сценарий, при котором мы хотим настроить JavaScript-валидацию (и осуществлять блокировку запросов от ботов при их обнаружении) для всех запросов, кроме запросов к API со стороны мобильного приложения.

В качестве первого критерия установим проверку, проходил ли пользователь JavaScript-валидацию ранее (имеется ли у него проверочная Cookie), в качестве второго критерия - исключение для запросов к /mobile-api (предполагаем, что в данном сценарии по этому пути идут запросы к API):

Поле

Оператор

Значение

http.request.js_challenge_ok

equals

false

http.request.path

NOT begins

/mobile-api

Действие

TTL проверочных Cookie (в секундах)

jsChallenge

3600

В соответствии с этим правилом Javascript-валидация будет осуществляться для всех запросов, кроме запросов к /mobile-api. "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

Перенаправление с сохранением пути запроса

Данный пример показывает, как можно осуществить перенаправление всех запросов на другой домен (example.com) с сохранением пути запроса. Для осуществления такого перенаправления необходимо задействовать переменную ${http.request.path} при настройке действий правила.

Правило:

№ критерия

Поле

Оператор

1

http.request.method

exists

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

Действие

Ссылка для перенаправления

redirect

https://example.com${http.request.path}

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

Правило:

№ критерия

Поле

Оператор

Значение

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

http.request.method

exists

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

Действие

Заголовок

Значение заголовка

setHeader

http.request.headers.x-cloud-platform

NGENIX

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

Например, вы хотите удалять заголовок Accept-Encoding, чтобы отдавать все данные в несжатом виде или с использованием только одного конкретного алгоритма сжатия.

Для этого создайте следующее правило:

№ критерия

Поле

Оператор

1

http.request.method

exists

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

Действие

Заголовок

delHeader

http.request.headers.accept-encoding