← Документация WAF / rate-limiting-rules
Параметры ограничения скорости
Доступные параметры правила ограничения скорости описаны в следующих разделах.
Дополнительную информацию о текущих ограничениях настройки правил см. в Ограничения конфигурации.
Справочник параметров
Когда входящие запросы соответствуют
- Тип данных:
String - Имя поля в API:
expression(поле правила)
Определяет критерии, по которым правило ограничения скорости сопоставляется с запросом.
Также применять ограничение скорости к кешированным ресурсам
- Тип данных:
Boolean - Имя поля в API:
requests_to_origin(необязательно, с противоположным значением по сравнению с параметром в дашборде Cloudflare)
Если этот параметр отключён (или когда requests_to_origin поле API имеет значение true), при определении частоты запросов учитываются только запросы, доходящие до источника (то есть запросы, которые не кешируются).
В некоторых случаях невозможно отключить Также применять ограничение скорости к кешированным ресурсам параметра из-за ограничений конфигурации. См. Ограничения конфигурации для получения подробностей.
В зависимости от вашего тарифный план Cloudflare, этот параметр правила может быть недоступен. В этом случае Cloudflare также будет применять ограничение скорости к кешированным ресурсам (по умолчанию этот параметр включен).
С теми же характеристиками
- Тип данных:
Array<String> - Имя поля в API:
characteristics
Набор параметров, определяющих, как Cloudflare отслеживает частоту запросов для этого правила.
Используйте одну или несколько из следующих характеристик:
| Значение в панели управления | Значение API | Примечания |
|---|---|---|
| Н/Д (включено неявно) | cf.colo.id(обязательно) |
Не используйте в выражениях |
| IP | ip.src |
Несовместимо с IP with NAT support |
| IP with NAT support | cf.unique_visitor_id |
Несовместимо с IP |
| Значение заголовка (введите имя заголовка) | http.request.headers["<header_name>"] |
Использование имени заголовка в нижнем регистре в API и Отсутствующее поле в сравнении с пустым значением |
| Значение cookie (введите имя cookie) | http.request.cookies["<cookie_name>"] |
Рекомендуемые конфигурации и Отсутствующее поле в сравнении с пустым значением |
| Значение запроса (введите имя параметра) | http.request.uri.args["<query_param_name>"] |
Отсутствующее поле в сравнении с пустым значением |
| Host | http.host |
|
| Путь | http.request.uri.path |
|
| AS Num | ip.src.asnum |
|
| Страна | ip.src.country |
|
| Отпечаток JA3 | cf.bot_management.ja3_hash |
|
| JA4 | cf.bot_management.ja4 |
|
| JSON string value of (введите ключ) | lookup_json_string(http.request.body.raw, "<key>") |
Отсутствующее поле в сравнении с пустым значением и lookup_json_string() справочник по функции |
| JSON integer value of (введите ключ) | lookup_json_integer(http.request.body.raw, "<key>") |
Отсутствующее поле в сравнении с пустым значением и lookup_json_integer() справочник по функции |
| Form input value of (введите имя поля) | http.request.body.form["<input_field_name>"] |
Отсутствующее поле в сравнении с пустым значением |
| JWT claim of (введите ID конфигурации токена, имя claim) | lookup_json_string( http.request.jwt.claims["<token_configuration_id>"][0], "<claim_name>") |
Требования к claims в JWT, отсутствующее поле в сравнении с пустым значением и Справочник JWT Validation |
| Тело | http.request.body.raw |
|
| Размер тела (выберите оператор, введите размер) | http.request.body.size |
|
| Custom (введите выражение) | Введите пользовательское выражение. Вы можете использовать такую функцию, как substring() или lower(), или введите более сложное выражение. |
Функции |
Доступные характеристики зависят от вашего тарифного плана Cloudflare. См. Доступность, где это описано подробнее.
Увеличивать счётчик, когда
- Тип данных:
String - Имя поля в API:
counting_expression(необязательно)
Доступно только в панели управления Cloudflare при включении Использование пользовательского выражения для подсчёта.
Определяет критерии, используемые для расчёта частоты запросов. По умолчанию выражение подсчёта совпадает с выражением сопоставления правила (заданным в Когда входящие запросы соответствуют). Это значение по умолчанию также применяется, если задать этому полю пустую строку ("").
Выражение для подсчёта может включать Поля HTTP-ответа. Если в выражении для подсчёта используются поля ответа, подсчёт выполняется после отправки ответа.
В некоторых случаях включить поля ответа HTTP в выражение подсчёта не удаётся из-за ограничений конфигурации. См. Ограничения конфигурации для получения подробностей.
Когда скорость превышает
- Имя поля в API: N/A (в зависимости от выбранного варианта требуются разные поля API)
Подсчёт для ограничения скорости может быть:
- На основе запроса: Выполняет ограничение скорости на основе количества входящих запросов за заданный период. Это единственный метод подсчёта, если ограничение скорости на основе сложности недоступно.
- На основе сложности: Выполняет ограничение скорости на основе сложность или стоимости обработки запросов за указанный период. Доступно только клиентам с планом Enterprise, у которых подключена Advanced Rate Limiting.
Когда скорость превышает > Запросы
- Тип данных:
Integer - Имя поля в API:
requests_per_period
Количество запросов за указанный период времени, которое приведёт к срабатыванию правила. Применяется к ограничению скорости на основе количества запросов.
Когда скорость превышает > Период
- Тип данных:
Integer - Имя поля в API:
period
Период времени (в секундах), который учитывается при оценке частоты запросов. Доступные значения зависят от вашего тарифного плана Cloudflare.
Доступные значения API: 10, 60 (одна минута), 120 (две минуты), 300 (пять минут), 600 (10 минут), или 3600 (один час).
Когда скорость превышает > Оценка за период
- Тип данных:
Integer - Имя поля в API:
score_per_period
Максимальная оценка за период. При превышении этого значения выполняется действие правила. Применяется к ограничение скорости на основе сложности.
Когда скорость превышает > Имя заголовка ответа
- Тип данных:
String - Имя поля в API:
score_response_header_name
Название HTTP-заголовка в ответе, устанавливаемое исходным сервером, содержащее оценку текущего запроса. Применяется к ограничение скорости на основе сложности.
Затем выберите действие
- Тип данных:
String - Имя поля в API:
action(поле правила)
Действие, которое выполняется при достижении скорости, указанной в правиле.
Используйте одно из следующих значений в API: block, js_challenge (Non-Interactive Challenge), managed_challenge (Managed Challenge), challenge (Interactive Challenge) или log.
Если вы выберете Block действие, вы можете определить пользовательский ответ с помощью следующих параметров:
С типом ответа (для Block действие)
- Тип данных:
String - Имя поля в API:
response>content_type(необязательно)
Определяет тип содержимого пользовательского ответа при блокировке запроса из-за ограничения скорости. Доступно только при установке действие правила к Block.
Доступные значения API: application/json, text/html, text/xml, или text/plain.
С кодом ответа (для Block действие)
- Тип данных:
Integer - Имя поля в API:
response>status_code(необязательно)
Определяет код состояния HTTP, возвращаемый посетителю при блокировке запроса из-за ограничения скорости. Доступно только при установке действие правила к Block.
Необходимо ввести значение от 400 и 499. Значение по умолчанию: 429 (Too many requests).
Тело ответа (для Block действие)
- Тип данных:
String - Имя поля в API:
response>content(необязательно)
Определяет тело возвращаемого HTTP-ответа, когда запрос блокируется из-за ограничения скорости. Доступно только при установке действие правила к Block.
Максимальный размер поля составляет 30 КБ.
Для продолжительности
- Тип данных:
Integer - Имя поля в API:
mitigation_timeout
Как только скорость достигает заданного значения, правило ограничения скорости применяет действие правила к дальнейшим запросам в течение периода времени, указанного в этом поле (в секундах).
В панели управления выберите одно из доступных значений, которое зависят от вашего тарифного плана Cloudflare. Доступные значения API: 0, 10, 60 (одна минута), 120 (две минуты), 300 (пять минут), 600 (10 минут), 3600 (один час), или 86400 (один день).
Клиенты с тарифными планами Free, Pro и Business не могут выбирать длительность при использовании действие Challenge, их правило ограничения скорости всегда выполняет сдерживание запросов для этих действий. При сдерживании запросов длительность не задаётся. Когда посетители проходят проверку, их соответствующий счётчик запросов установлено значение ноль. Когда посетители с теми же значениями характеристик правила отправляют достаточно запросов, чтобы снова сработало правило ограничения скорости, они получают новую проверку.
Клиенты уровня Enterprise всегда могут настроить длительность (или тайм-аут устранения угрозы), даже при использовании одного из действий challenge.
Со следующим поведением
- Тип данных:
Integer - Имя поля в API:
mitigation_timeout
Определяет точное поведение выбранного действия.
Поведение действия может быть одним из следующих:
-
Выполнять действие в течение выбранного периода: Применяет настроенное действие ко всем запросам, полученным в течение выбранного периода. Чтобы настроить такое поведение через API, задайте
mitigation_timeoutзначение больше нуля. См. Для продолжительности, где это описано подробнее.
-
Ограничение запросов, превышающих максимально настроенную скорость: Применяет выбранное действие к входящим запросам, превышающим настроенный лимит, пропуская остальные запросы. Чтобы настроить такое поведение через API, задайте
mitigation_timeoutк0(ноль).
Примечания о характеристиках ограничения скорости
Сценарии использования IP-адресов с поддержкой NAT
Используйте IP with NAT support чтобы учитывать ситуации, когда несколько запросов используют общий IP-адрес из-за NAT. Cloudflare применяет различные методы, сохраняющие конфиденциальность, для идентификации уникальных посетителей, включая использование сессионных cookie. См. Cloudflare Cookies для получения подробностей.
Что учитывать при использовании IP-адресов с поддержкой NAT
IP with NAT support основан на механизме идентификации посетителей на основе файлов cookie (_cfuvid cookie). Учитывайте следующее:
- Посетители, которые очищают cookie, используют режим приватного просмотра или не принимают cookie, не идентифицируются по отдельности. Запросы от таких посетителей используют общий счётчик, что может приводить к ложным срабатываниям в условиях высокой нагрузки при использовании NAT.
- Для критически важного с точки зрения безопасности ограничения скорости (например, для защиты конечных точек авторизации или оплаты) объедините IP with NAT support с другими характеристиками, такими как Путь или Значение заголовка чтобы снизить влияние пробелов в идентификации.
Несовместимые характеристики
Нельзя использовать одновременно IP with NAT support и IP в качестве характеристик одного и того же правила ограничения скорости.
Не используйте cf.colo.id как поле в выражениях
Не следует использовать cf.colo.id характеристику (ID дата-центра) как поле в выражениях правил. Кроме того, cf.colo.id значения могут изменяться без предупреждения. Дополнительную информацию об этой характеристике ограничения частоты запросов см. в Расчёт частоты запросов.
Использование имени заголовка в нижнем регистре (для пользователей API)
Если вы используете Значение заголовка характеристику в запросе API (с http.request.headers["<header_name>"]), необходимо ввести имя заголовка в нижнем регистре, так как Cloudflare нормализует имена заголовков в глобальной сети Cloudflare.
Отсутствующее поле в сравнении с пустым значением
Если вы используете Значение заголовка, Значение cookie, Значение запроса, JSON string value of, lookup_json_integer(...), или Form input value of характеристику, а конкретное имя заголовка, файла cookie, параметра, ключа JSON или поля формы отсутствует в запросе, правило ограничения частоты запросов всё равно может применяться к запросу, в зависимости от выражения подсчёта.
Если вы не отфильтруете такие запросы, появится отдельный счётчик запросов для запросов, где поле отсутствует, что отличается от счётчика запросов, где поле присутствует с пустым значением.
Например, чтобы учитывать только запросы, в которых присутствует определённый HTTP-заголовок, в контексте конкретного правила ограничения скорости измените выражение для подсчёта так, чтобы оно содержало нечто подобное следующему:
and len(http.request.headers["<header_name>"]) > 0
Где <header_name> это то же имя заголовка, которое используется в качестве характеристики ограничения скорости.
Рекомендуемые конфигурации при использовании значения cookie
Если вы используете Значение cookie в качестве характеристики правила ограничения скорости, следуйте этим рекомендациям:
- Создайте пользовательское правило который блокирует запросы, если для cookie указано более одного значения.
- Проверяйте значение cookie на исходном сервере, прежде чем выполнять ресурсоёмкие операции на сервере.
Требования к использованию claims в JSON Web Token (JWT)
Чтобы использовать claims внутри JSON Web Token (JWT), сначала необходимо настроить конфигурация проверки токена в API Shield.
Ограничения конфигурации
-
Если выражение фильтра правила, заданное в Когда входящие запросы соответствуют параметр, включает пользовательские списки, необходимо включить Также применять ограничение скорости к кешированным ресурсам параметр.
-
Выражение фильтра правила не может содержать Поля HTTP-ответа.
-
Выражение подсчёта правила, определённое в Увеличивать счётчик, когда параметр, не может включать оба Поля HTTP-ответа и пользовательские списки. Если вы используете пользовательские списки, необходимо включить Также применять ограничение скорости к кешированным ресурсам параметр.
-
При создании набора правил ограничения скорости на уровне аккаунта, выражение развертывания набора правил (определяющее область действия) не может содержать Поля HTTP-ответа или пользовательские списки.