Примеры правил обработки запросов
Примеры сгруппированы по типам задач:
Ограничение доступа, защита от ботов и/или митигация DDoS-атак
- Разрешить доступ к интерфейсу администратора только с известных IP-адресов
- Запретить доступ к данным не из России
- Запретить доступ с посторонних веб-ресурсов
- Запретить доступ к определенной части сайта
- Запретить доступ из определённых автономных систем (ASN)
- Запретить доступ для подозрительных User-Agent
- Запретить доступ из сетей хостинг-провайдеров/датацентров
- Запретить доступ из-под VPN, Tor и Proxy-сервисов
- Блокировать запросы с версией протокола HTTP/1.0
- Блокировать запросы с версией протокола TLS 1.0 или 1.1
- Блокировать запросы от источников, не прошедших JS-валидацию (базовая защита от ботов)
- Блокировать запросы по TLS-отпечаткам
- Разрешить доступ публичным ботам
- Разрешить доступ ИИ-агентам
- Блокировать запросы от ботов
- Блокировать запросы от источников, не прошедших JS-валидацию (продвинутая защита от ботов)
- Блокировать запросы от источников, не прошедших интерактивную проверку Captcha (продвинутая защита от ботов)
Перенаправление запросов
Замена контента
Управление заголовками
Ограничение доступа, защита от ботов и/или митигация DDoS-атак¶
1. Разрешить доступ к интерфейсу администратора только с известных IP-адресов¶
Например, интерфейс администратора находится по адресу https://example.com/admin и доступ к нему должны иметь только сотрудники офиса из сети 12.23.56.0/24.
| Критерий №1 | Критерий №2 | Действие |
|---|---|---|
| Поле: http.request.path Оператор: begins Значение: /admin | Поле: ip.addr Оператор: NOT in Значение: 12.23.56.0/24 | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
Если вы хотите разрешить доступ с нескольких IP-адресов или сетей, то удобнее будет создать список, после чего указать его в необходимом критерии.
2. Запретить доступ не из России¶
| Критерий №1 | Действие |
|---|---|
| Поле: ip.geoip.country Оператор: NOT equals Значение: Россия | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
3. Запретить доступ с посторонних веб-ресурсов¶
Например, вы хотите, чтобы определённый контент воспроизводился только на вашем сайте. Вы можете создать список доверенных веб-ресурсов (Список A) и блокировать все запросы, в которых заголовок Referer или Origin не соответствует веб-ресурсам из этого списка. При необходимости вы можете добавить дополнительный критерий, который будет сравнивать путь к конкретным объектам или потокам с заранее созданным списком (Список Б).
| Критерий №1 | Критерий №2 | Действие |
|---|---|---|
| Поле: http.request.referer.host Оператор: NOT in Значение: Список А | Поле: http.request.referer.host Оператор: NOT in Значение: Список Б | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
4. Запретить доступ к определенной части сайта¶
Допустим, у вас есть раздел, к которому нельзя получить доступ через Платформу. Вы можете создать правило, блокирующее все запросы, начинающиеся с определённой строки.
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.path Оператор: begins Значение: /local | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
В указанном примере все запросы, которые начинаются с /local, будут заблокированы.
5. Запретить доступ из определённых автономных систем (ASN)¶
Вы можете создать список автономных систем (Список A) и блокировать все запросы с IP-адресов, которые принадлежат какой-либо из автономных систем из списка.
| Критерий №1 | Действие |
|---|---|
| Поле: ip.asn Оператор: in Значение: Список А | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
6. Запретить доступ для подозрительных User-Agent¶
Существует большое количество приложений, которые используются злоумышленниками для атак на веб-ресурсы. Например, это может быть ботнет из взломанных WordPress или других систем и сканеров. Все эти приложения по умолчанию выставляют определенные значения в заголовке User-Agent. Вы можете определить для себя список подобных User-Agent и заранее заблокировать запросы, которые его содержат. Для этого:
По умолчанию эти приложения устанавливают определённые значения в заголовке User-Agent. Вы можете создать список таких User-Agent (Список А) и создать правило, которое будет блокировать все запросы с заголовком User-Agent, который начинается/содержит/заканчивается на какое-либо из значений из списка.
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.headers.user-agent Оператор: begins Значение: Список А | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
Для удобства можно отключить опцию Учитывать регистр при редактировании этого правила.
7. Запретить доступ из сетей хостинг-провайдеров/датацентров¶
| Критерий №1 | Действие |
|---|---|
| Поле: ip.network_type Оператор: in Значение: datacenter | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
8. Запретить доступ из-под VPN, Tor и Proxy-сервисов¶
Запросы от таких источников с большой вероятностью инициируются различными ботами, злоумышленниками или просто нерелевантной аудиторией пользователей.
| Критерий №1 | Действие |
|---|---|
| Поле: ip.proxy_type Оператор: in Значение: proxy, vpn, tor | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
9. Блокировать запросы с версией протокола HTTP/1.0¶
Протокол HTTP версии 1.0 устарел. В некоторых случаях использование этой версии может быть признаком нежелательного запроса, поскольку большинство современных браузеров используют более новые версии — 1.1 или 2.0.
| Критерий №1 | Действие |
|---|---|
| Поле: http.version Оператор: equals Значение: HTTP/1.0 | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
Вы также можете создать критерий с другими версиями протокола.
10. Блокировать запросы с версией протокола TLS 1.0 или 1.1¶
В 2020 году протоколы TLS версий 1.0 и 1.1 были признаны устаревшими. В некоторых случаях использование этих версий может быть значимым признаком нежелательного запроса, поскольку большинство современных браузеров поддерживают более новые версии протокола TLS.
| Критерий №1 | Действие |
|---|---|
| Поле: tls.version Оператор: equals Значение: TLSv1, TLSv1.1 | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
11. Блокировать запросы от источников, не прошедших JS-валидацию (базовая защита от ботов)¶
Рассмотрим сценарий, при котором мы хотим настроить JavaScript-валидацию (и осуществлять блокировку запросов от ботов при их обнаружении) для всех запросов, кроме запросов к API со стороны мобильного приложения.
Первым критерием будет проверка, проходил ли пользователь проверку JavaScript ранее (есть ли у него проверочная Cookie). Вторым критерием будет исключение для запросов к /mobile-api – мы предполагаем, что именно по этому пути идут запросы к API.
| Критерий №1 | Критерий №2 | Действие |
|---|---|---|
| Поле: http.request.js_challenge_ok Оператор: equals Значение: false | Поле: http.request.path Оператор: NOT begins Значение: /mobile-api | Действие: jsChallenge TTL проверочных Cookie (в секундах): 3600 |
В соответствии с этим правилом JavaScript-валидация будет осуществляться для всех запросов, кроме запросов к /mobile-api. Параметр TTL проверочных Cookie определяет период между повторными проверками пользователя.
Прохождение запросом проверки правилом JavaScript-валидации не влияет на статистику в Я.Метрике.
После прохождения jsChallenge в URL добавляется аргумент utm_referrer с значением исходного referrer запроса.
12. Блокировать запросы по TLS-отпечаткам¶
Рассмотрим сценарий, при котором мы хотим настроить блокировку запросов от ботов, основываясь на ранее собранном наборе нелегитимных TLS-отпечатков. Применимо для всех запросов, включая запросы к API со стороны мобильного приложения.
| Критерий №1 | Действие |
|---|---|
| Поле: tls.ngx_fp_hash Оператор: in Значение: Список TLS-отпечатков | Действие: deny HTTP-код: 403 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
В соответствии с этим правилом, если запрос от пользователя приходит с устройства, TLS-отпечаток которого входит в список запрещённых TLS-отпечатков, то будет осуществляться блокировка запроса с возвратом HTTP-кода 403.
13. Разрешить доступ публичным ботам¶
Доступно при наличии сервиса Bot Detection.
| Критерий №1 | Действие |
|---|---|
| Поле: bot_management.source_category Оператор: equals Значение: Публичный бот | Действие: allow |
Рекомендуется размещать данное правило на первом месте в списке набора правил, чтобы избежать блокировки публичных ботов другими правилами сервиса Edge Logic Rules.
14. Разрешить доступ ИИ-агентам¶
Доступно при наличии сервиса Bot Detection.
| Критерий №1 | Действие |
|---|---|
| Поле: bot_management.public_bot_name Оператор: in Значение: Perplexity, ChatGPT, Gemini | Действие: allow |
Рекомендуется размещать данное правило на первом месте в списке набора правил, чтобы избежать блокировки ИИ-агентов другими правилами сервиса Edge Logic Rules.
15. Блокировать запросы от ботов¶
Доступно при наличии сервиса Bot Detection.
| Критерий №1 | Действие |
|---|---|
| Поле: bot_management.source_category Оператор: equals Значение: Точно бот | Действие: deny HTTP-код: 200 Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
При блокировке бот-трафика рекомендуется выставлять HTTP-код ответа 200 для усложнения адаптации злоумышленников к механизмам защиты.
16. Блокировать запросы от источников, не прошедших JS-валидацию (продвинутая защита от ботов)¶
Доступно при наличии сервиса Bot Detection.
- Рассмотрим сценарий, при котором мы хотим настроить отправку подозрительных запросов с бот-категорией Вероятно бот на проверку Compute. Для этого необходимо настроить правило вида:
| Критерий №1 | Критерий №2 | Действие |
|---|---|---|
| Поле: bot_management.source_category Оператор: equals Значение: Вероятно бот | Поле: http.request.bot_challenge.property.compute_ok Оператор: NOT equals Значение: true | Действие: botChallenge Тип проверки: Compute TTL проверочных cookie (сек): (требуемое количество секунд) Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
- Рассмотрим сценарий, при котором мы хотим настроить отправку подозрительных запросов с бот-категорией Вероятно бот на проверку CSS. Для этого необходимо настроить правило вида:
| Критерий №1 | Критерий №2 | Действие |
|---|---|---|
| Поле: bot_management.source_category Оператор: equals Значение: Вероятно бот | Поле: http.request.bot_challenge.property.css_ok Оператор: NOT equals Значение: true | Действие: botChallenge Тип проверки: CSS TTL проверочных cookie (сек): (требуемое количество секунд) Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
-
Рассмотрим сценарий, при котором мы хотим настроить отправку подозрительных запросов с бот-категорией Вероятно бот на проверку Compute или CSS, в зависимости от того, какую из проверок источник запроса ранее не проходил. Для этого необходимо настроить два правила и поставить их в списке набора правил подряд:
-
Правило №1: если источник запроса ранее не проходил проверку Compute, а бот-категория соответствует Вероятно бот, отправляйте подозрительные запросы на проверку Compute и CSS:
Критерий №1 Критерий №2 Действие Поле: bot_management.source_category
Оператор: equals
Значение: Вероятно ботПоле: http.request.bot_challenge.property.compute_ok
Оператор: NOT equals
Значение: trueДействие: botChallenge
Тип проверки: Compute и CSS
TTL проверочных cookie (сек): (требуемое количество секунд)
Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) -
Правило №2: если источник запроса ранее не проходил проверку CSS, а бот-категория соответствует Вероятно бот, отправляйте подозрительные запросы на проверку Compute и CSS:
Критерий №1 Критерий №2 Действие Поле: bot_management.source_category
Оператор: equals
Значение: Вероятно ботПоле: http.request.bot_challenge.property.css_ok
Оператор: NOT equals
Значение: trueДействие: botChallenge
Тип проверки: Compute и CSS
TTL проверочных cookie (сек): (требуемое количество секунд)
Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX)
-
Эти два правила вместе обеспечат гибкость в контроле за бот-трафиком, позволяя учесть все возможные комбинации критериев. Кроме того, они позволят использовать только один редирект для проверок на Compute и CSS.
Особенности проверок:
- Проверка Compute менее эффективно выявляет ботов, но вносит меньшую задержку в обработку запросов;
- Проверка CSS требует больших вычислительных ресурсов, но эффективнее выявляет ботов.
Создавая правила для управления бот-трафиком, можно комбинировать проверки Compute и CSS или использовать только какой-то один из типов проверки для конкретных категорий запросов.
При использовании действия botChallenge повышается точность классификации источника запроса при следующем его обращении на Платформу.
Проверка CSS в рамках действия botChallenge всегда блокирует запросы с устройств Apple, которые находятся в режиме блокировки. Это происходит из-за ограничений на выполнение WebAssembly на устройстве. Чтобы успешно пройти проверку CSS, необходимо либо отключить режим блокировки, либо настроить исключение для вашего браузера в настройках устройства.
Подробнее об этом можно узнать на сайте поддержки Apple по ссылке: https://support.apple.com/ru-ru/105120.
17. Блокировать запросы от источников, не прошедших интерактивную проверку Captcha¶
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.captcha_challenge_ok Оператор: NOT equals Значение: true | Действие: captchaChallenge TTL проверочных cookie (сек): (требуемое количество секунд) |
Другой вариант доступен при наличии сервиса Bot Detection:
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.bot_challenge.property.captcha_ok Оператор: NOT equals Значение: true | Действие: botChallenge Тип проверки: Captcha TTL проверочных cookie (сек): (требуемое количество секунд) Настроить содержание ответа: (опционально, по умолчанию страница-заглушка NGENIX) |
Перенаправление запросов¶
1. Отдавать пользователям не из России другой видеопоток¶
Предположим, вам нужно ограничить доступ к вашим видеопотокам из-за границы в соответствии с условиями лицензионных соглашений.
В этом случае можно показать зарубежным пользователям специальный поток, например, заглушку. Для этого после запроса исходного потока https://live.example.ru/live/stream/playlist.m3u8 они будут перенаправлены на другой поток — https://live.example.ru/live/blocked/playlist.m3u8.
| Критерий №1 | Критерий №2 | Действие |
|---|---|---|
| Поле: http.request.path Оператор: equals Значение: /live/stream/playlist.m3u8 | Поле: ip.geoip.country Оператор: NOT equals Значение: Россия | Действие: redirect Ссылка для перенаправления: https://live.example.ru/live/blocked/playlist.m3u8 |
2. Перенаправление запросов с сохранением пути запроса¶
Этот пример демонстрирует, как можно настроить перенаправление всех запросов на другой домен (example.com), при этом сохраняя путь запроса. Для этого в конфигурации правила необходимо использовать переменную ${http.request.path}.
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.method Оператор: exists | Действие: redirect Ссылка для перенаправления: https://example.com${http.request.path} |
В качестве критерия может использоваться любое условие, которое будет выполняться для любого запроса.
3. Перенаправление на заглушку на время регламентных или аварийных работ¶
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.path Оператор: equals Значение: / | Действие: redirect Ссылка для перенаправления: https://example.ru/maintenance |
4. Перенаправление на заглушку пользователей, использующих VPN¶
| Критерий №1 | Действие |
|---|---|
| Поле: ip.proxy_type Оператор: in Значение: vpn | Действие: redirect Ссылка для перенаправления: https://example.ru/novpn |
Замена контента¶
1. Отдавать другой контент пользователям с определенным 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 |
Для удобства можно отключить опцию Учитывать регистр при редактировании этого правила.
Управление заголовками¶
1. Добавить заголовок в сторону сервера оригинации¶
Добавление дополнительного заголовка (например X-Cloud-Platform) может быть полезно, если вы хотите пометить запросы, поступающие с Платформы NGENIX, для специальной обработки на вашем сервере. Например, для ведения лога или настройки политик безопасности на вашем веб-сервере. В качестве критерия может использоваться любое условие, которое будет выполняться для любого запроса.
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.method Оператор: exists | Действие: setHeader Заголовок: http.request.headers.x-cloud-platform Значение заголовка: NGENIX |
2. Удалить заголовок в сторону сервера оригинации¶
Например, вы можете настроить обработку запросов таким образом, чтобы данные отдавались без сжатия или только с использованием одного конкретного алгоритма сжатия, удаляя заголовок Accept-Encoding. Для этого можно использовать любое условие, которое будет выполняться для каждого запроса.
| Критерий №1 | Действие |
|---|---|
| Поле: http.request.method Оператор: exists | Действие: delHeader Заголовок: http.request.headers.accept-encoding |
3. Сбор TLS-отпечатков¶
Для сбора TLS-отпечатков необходимо создать правило обработки запросов, которое помечает запросы определенным заголовком. Например, tls-fingerprint-ngenix.
| Критерий №1 | Действие |
|---|---|
| Поле: tls.ngx_fp_hash Оператор: exists | Действие: setHeader Заголовок: http.request.headers.tls-fingerprint-ngenix Значение заголовка: true |
Убедитесь, что правило стоит последним в списке набора правил. Таким образом вы отсечете лишние запросы от нелегитимных источников и тем самым сократите объем данных для анализа. Рекомендуется собирать данные минимум в течение недели.
4. Добавить заголовок бот-категории в сторону сервера оригинации¶
Доступно при наличии сервиса Bot Detection.
| Критерий №1 | Действие |
|---|---|
| Поле: ip.addr Оператор: equals Значение: 0.0.0.0/0 | Действие: setHeader Заголовок: http.request.headers.x-source-category Значение заголовка: ${bot_management.source_category} |