Перейти к содержанию

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

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

Ограничение доступа, защита от ботов и/или митигация DDoS-атак
  1. Разрешить доступ к интерфейсу администратора только с известных IP-адресов
  2. Запретить доступ к данным не из России
  3. Запретить доступ с посторонних веб-ресурсов
  4. Запретить доступ к определенной части сайта
  5. Запретить доступ из определённых автономных систем (ASN)
  6. Запретить доступ для подозрительных User-Agent
  7. Запретить доступ из сетей хостинг-провайдеров/датацентров
  8. Запретить доступ из-под VPN, Tor и Proxy-сервисов
  9. Блокировать запросы с версией протокола HTTP/1.0
  10. Блокировать запросы с версией протокола TLS 1.0 или 1.1
  11. Блокировать запросы от источников, не прошедших JS-валидацию (базовая защита от ботов)
  12. Блокировать запросы по TLS-отпечаткам
  13. Разрешить доступ публичным ботам
  14. Разрешить доступ ИИ-агентам
  15. Блокировать запросы от ботов
  16. Блокировать запросы от источников, не прошедших JS-валидацию (продвинутая защита от ботов)
  17. Блокировать запросы от источников, не прошедших интерактивную проверку Captcha (продвинутая защита от ботов)
Перенаправление запросов
  1. Отдавать пользователям не из России другой видеопоток
  2. Перенаправление запросов с сохранением пути запроса
  3. Перенаправление на заглушку на время регламентных или аварийных работ
  4. Перенаправление на заглушку пользователей, использующих VPN
Замена контента
  1. Отдавать другой контент пользователям с определенным User-Agent
Управление заголовками
  1. Добавить заголовок в сторону сервера оригинации
  2. Удалить заголовок в сторону сервера оригинации
  3. Сбор TLS-отпечатков
  4. Добавить заголовок бот-категории в сторону сервера оригинации

Ограничение доступа, защита от ботов и/или митигация 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-валидацию (базовая защита от ботов)

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-отпечатки

Рассмотрим сценарий, при котором мы хотим настроить блокировку запросов от ботов, основываясь на ранее собранном наборе нелегитимных 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}