Настройка правил защиты

Правила защиты позволяют контролировать входящий трафик, фильтруя запросы к вашему ресурсу. Раньше они работали только во время атаки, а теперь действуют всегда.

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

У правил защиты есть допустимая погрешность — единичные запросы могут не попасть под действие правила. Это необходимо, чтобы оптимизировать модуль и сделать его доступным для проектов с большим объемом трафика

 

Правила защиты можно включать и выключать в зависимости от ситуации. Правило включает в себя

  1. Действие, применяемое к запросам, которые соответствуют условиям
  2. Условия, которые состоят из параметра запроса, значения и логического оператора. Запросы, у которых параметр (например, тип HTTP-запроса) совпадет с заданным значением (например, GET), будут соответствовать условию. Условий может не быть совсем, тогда правило будет действовать для всех запросов
  3. Приоритет от 0 до 65000 (чем меньше число, тем ниже приоритет)
  4. Название правила

Количество правил ограничено. Его можно увеличить, изменив тариф или докупив нужное количество правил в магазине

 

Действие определяет, что нужно делать с входящими запросом, если он попадает под действие правила (то есть если для него правдиво хотя бы одно из условий). Можно выполнить одно из трех действий:

  • Блокировать (drop) — блокирует запрос
  • Пропускать (pass) — пропускает запрос в обход основных фильтров, даже если он определен как подозрительный. Используйте для создания исключений. Схема фильтрации L7
  • JS challenge — принудительная проверка запроса. После нее реальный пользователь сможет попасть на сайт, а бот будет заблокирован

 

Условие состоит из параметра (1), оператора (2) и значения параметра (3).

Создание правила лимита запросов — DDoS-Guard
Правило сработает для любого GET или POST запроса

Каждое условие сверяет параметр запроса с его значением используя оператор. Если условие правдиво (оператор возвращает true), к запросу применяется действие.

Кнопкой AND можно добавить еще один параметр к условию. Правило сработает только если выполнены все параметры в условии (логическое И).

Создание правила лимита запросов, два параметра: тип HTTP-запроса, URL — DDoS-Guard
Правило сработает только для запросов GET и POST на страницах, URL которых начинается на /items

Кнопка Добавить условие создает новое условие. В таком случае правило сработает если выполнены все параметры хотя бы одного условия (логическое ИЛИ).

 

Всего доступно 18 параметров запроса. Для каждого параметра — свой набор допустимых значений и операторов.

Полный список доступных параметров:
Название параметраОписаниеВозможные значенияОператоры
версия HTTPверсия протокола HTTP

HTTP/2

HTTP/1.1

HTTP/1.0

HTTP/0.9

in
тип HTTP-запросатип HTTP-запроса, который указывает, какое желаемое действие выполнится для данного ресурса

GET

HEAD

POST

PUT

DELETE

CONNECT

OPTIONS

TRACE

PATCH

in
адрес (URL address)часть URI-адреса запроса 

equals

in

contains

startsWith

endsWith

домен (Host)HTTP-заголовок Hostсодержит имя домена, для которого предназначен запрос 

equals

in

contains

startsWith

endsWith

сжатие (Accept-Encoding)HTTP-заголовок Accept-Encoding — указывает на алгоритм сжатия контента, который принимает клиент 

equals

in

contains

startsWith

endsWith

exists

язык (Accept-Language)HTTP-заголовок Accept-Language — указывает на язык страницы, который принимает клиент 

equals

in

contains

startsWith

endsWith

exists

тип контента (Content-Type)HTTP-заголовок Content-Type — указывает MIME-тип контента, который отправляет или ожидает клиент 

equals

in

contains

startsWith

endsWith

exists

источник (Origin)HTTP-заголовок Origin — показывает откуда будет производиться загрузка. Включает протокол, имя хоста и порт 

equals

in

contains

startsWith

endsWith

exists

реферер (Referer)HTTP-заголовок Referer — показывает откуда будет производиться загрузка. Включает протокол, имя хоста, порт и URL 

equals

in

contains

startsWith

endsWith

exists

User-AgentHTTP-заголовок, который содержит информацию о ПО клиента и его устройстве 

equals

in

contains

startsWith

endsWith

exists

тип контента (Sec-Fetch-Dest)fetch-заголовок Sec-Fetch-Dest — указывает тип контента, который отправляет или ожидает клиентaudio            
audioworklet            
document            
embed            
empty            
font            
frame            
iframe            
image            
manifest            
object            
paintworklet            
report            
script            
serviceworker            
sharedworker            
style            
track            
video            
worker            
xslt

in

exists

тип запроса (Sec-Fetch-Mode)fetch-заголовок Sec-Fetch-Mode — указывает тип (mode) запросаcors            
navigate            
no-cors            
same-origin            
websocket

in

exists

происхождение (Sec-Fetch-Site)fetch-заголовок Sec-Fetch-Site — указывает на происхождение запроса. Позволяет определить нелегитимное перенаправлениеcross-site            
same-origin            
same-site            
none

in

exists

сookiesкуки, которые хранит пользователь (этот параметр позволяет задать название и значение куки) 

equals

in

contains

startsWith

endsWith

exists

время (GMT)время по Гринвичу (GMT+0), в которое поступил запрос between
странакод страны (ISO 3166-1 alpha-2), из которой поступил запрос in
номер ASномер AS in
IP-адресIP-адрес, с которого получен запрос in

 

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

Доступны следующие операторы:

ОператорОтрицаниеОписание
равно (equals)не равно (not equals)Проверяет, равен ли параметр заданному значению
равно (in)не равно (not in)Проверяет, равен ли параметр одному из заданных значений (можно указать несколько значений)
содержит (contains)не содержит (not contains)Проверяет, встречается ли заданное значение в строке параметра
начинается с (startsWith)не начинается с (not startsWith)Проверяет, начинается ли строка параметра с заданного значения
кончается на (endsWith)не кончается на (not endsWith)Проверяет, кончается ли строка параметра заданным значением
существует (exists)не существует (not exists)Проверяет, указан ли параметр
в диапазоне (between)не в диапазоне (not between)Проверяет, находится ли параметр в диапазоне между двумя числами
regex

Регулярное выражение, которое используется для поиска подстроки или подстрок в тексте. Оно задает маску (паттерн, шаблон) из символов и метасимволов и возвращает true, если значение параметра соответствует этой маске.

Использует синтаксис RE2

 

Для каждого правила можно установить Приоритет его срабатывания по отношению к другим правилам — число от 0 до 65000. Чем меньше значение, тем ниже приоритет. Если запрос соответствует нескольким правилам, будет использоваться правило с самым высоким приоритетом.

Не стоит создавать правила с одинаковым приоритетом: сработает только одно, выбранное случайным образом

 

Когда на защиту ставится сложная инфраструктура, может возникнуть необходимость пропускать некоторые запросы, не подвергая проверке — например, автоматизированные запросы к API. Чтобы защитить такие запросы от блокировки, создадим такое правило:

Пропускать запросы к эндпоинту API (/api/and-point) с доверенного IP — 192.158.1.38

  1. В личном кабинете откройте услугу «Веб-защита», на вкладке Домены выберите нужный домен. В левом меню выберите Правила защиты
  2. Нажмите кнопку Создать правило
  3. Выберите действие Пропускать и назовите правило
  4. Добавьте условие с параметром адрес (URL address) и оператором равно (in) и укажите в значении нужный URL-адрес. Можно сохранить правило в таком виде — но атакующие могут обнаружить уязвимый адрес и устроить атаку на него. Чтобы не допустить этого, добавим дополнительное условие 
    Создание нового правила, выбрано действие и добавлено условие срабатывания адрес (URL address) равно (in) /api/and-pount. Выделена кнопка AND
  5. В новом условии выберите параметр IP-адрес и укажите доверенный IP, с которого будут приходить запросы к API 
    Создание нового правила, добавлен параметр IP-адрес равно (in) 192.158.1.38
  6. Задайте высокий приоритет, чтобы созданные впоследствии правила не нарушили его работу 
    Создание нового правила, добавлено название правила, установлен приоритет 65000 и статус Включено
  7. Установите статус правила. Чтобы оно вступило в силу сразу после создания, выберите Включено. После нажатия кнопки Сохранить новое правило появится в списке.