Примеры использования обработки запросов
Следующие примеры иллюстрируют, как можно решить наиболее распространенные задачи, связанные со специальной обработкой запросов на ваше веб-приложение.
Примеры сгруппированы по типам действия:
Например, интерфейс администратора находится по адресу 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
, будут заблокированы.- 1.
- 2.Создайте правило, которое будет блокировать все запросы с IP-адресов, которые принадлежать какой-либо из автономных систем из списка:
№ Критерия | Поле | Оператор | Значение |
1 | ip.asn | in | "Выберите из списка" + укажите список |
Действие | HTTP-код | Текст |
deny | 403 | Опционально |
Существуют большое количество приложений, которые используются злоумышленниками для атак на веб-ресурсы. Например, это может быть ботнет из взломанных Wordpress или других систем и сканеров. Все эти приложения по умолчанию выставляют определенные значения в заголовке User-Agent. Вы можете определить для себя список подобных User-Agent и заранее заблокировать запр осы, которые его содержат. Для этого:
- 1.В разделе "Управление списками" клиентского портала создайте и наполните необходимыми значениями User-Agent список с контентом типа "Строки" .
- 2.Создайте правило, которое будет блокировать все запросы с заголовком User-Agent, который начинается/содержит/заканчивается на какое-либо из значений в ранее созданном списке:
№ Критерия | Поле | Оператор | Значение |
1 | http.request.headers.user-agent | begins | "Выберите из списка" + укажите список |
Действие | HTTP-код | Текст |
deny | 403 | Опционально |
Для удобства можно отключить опцию "Учитывать регистр" при редактировании этого правила.
Значимая часть зловредных запросов инициируется из сетей хостинг-провайдеров, VPN, Tor и Proxy-сервисов. Вы можете запретить доступ из этих сетей к своим сервисным конфигурациям. Для этого:
- 1.Создайте первое правило со следующими критериями и действиями:№ КритерияПолеОператорЗначение1ip.network_typeindatacenterДействиеHTTP-кодТекстdeny403Опционально
- 2.Создайте второе правило со следующими критериями и действиями:№ КритерияПолеОператорЗначение1ip.proxy_typeinproxy, vpn, torДействиеHTTP-кодТекстdeny403Опционально
Вы можете комбинировать критерии различным образом для получения более точного совпадения по источникам запросов.
Протокол HTTP версии 1.0 является устаревшим. В некоторых случаях использование этой версии является значимым критерием нелегитимности запроса, т.к. большинство современных браузеров используют версии 1.1 или 2.0. Чтобы заблокировать запросы с версией 1.0 сделайте следующее:
- 1.Создайте правило со следующими критериями и действиями:
№ Критерия | Поле | Оператор | Значение |
1 | http.version | equals | HTTP/1.0 |
Действие | HTTP-код | Текст |
deny | 403 | Опционально |
Вы также можете создать критерий с другими версиями протокола.
Версии 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-валидацию (и осуществлять блокировку запросов от ботов при их обнаружении) для всех запросов, кроме запросов к 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: 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 |