← Документация WAF / rate-limiting-rules
Параметры правил rate limiting
Доступные параметры правил rate limiting описаны в следующих разделах.
Дополнительную информацию о текущих ограничениях конфигурации правил см. в Ограничения конфигурации.
Справочник параметров
Когда входящие запросы соответствуют
- Тип данных:
String - Имя поля в API:
expression(поле правила)
Определяет критерии, по которым правило rate limiting сопоставляется с запросом.
Также применять rate limiting к кешированным ресурсам
- Тип данных:
Boolean - Имя поля в API:
requests_to_origin(необязательно, с противоположным смыслом относительно параметра в панели управления Cloudflare)
Если этот параметр отключён (или когда requests_to_origin (поле API) установлено в true) при определении частоты запросов будут учитываться только запросы, идущие к исходному серверу (то есть некешированные запросы).
В некоторых случаях нельзя отключить Также применять rate limiting к кешированным ресурсам (параметр) из-за ограничений конфигурации. См. Ограничения конфигурации для получения подробностей.
В зависимости от вашего План Cloudflare этот параметр правила может быть недоступен. В этом случае Cloudflare будет применять rate limiting и к кешированным ресурсам (параметр включён по умолчанию).
С теми же характеристиками
- Тип данных:
Array<String> - Имя поля в API:
characteristics
Набор параметров, определяющих, как Cloudflare отслеживает частоту запросов для правила.
Используйте одну или несколько следующих характеристик:
| Значение в панели управления | Значение в API | Примечания |
|---|---|---|
| Н/Д (включено неявно) | cf.colo.id(обязательно) |
Не используйте в выражениях |
| IP | ip.src |
Несовместимо с IP с поддержкой NAT |
| IP с поддержкой NAT | cf.unique_visitor_id |
Несовместимо с IP |
| Header value of (введите имя заголовка) | http.request.headers["<header_name>"] |
В API используйте имя заголовка в нижнем регистре и Отсутствующее поле и пустое значение: в чём разница |
| Значение cookie (введите имя cookie) | http.request.cookies["<cookie_name>"] |
Рекомендуемые конфигурации и Отсутствующее поле и пустое значение: в чём разница |
| Query value of (введите имя параметра) | http.request.uri.args["<query_param_name>"] |
Отсутствующее поле и пустое значение: в чём разница |
| Host | http.host |
|
| Path | http.request.uri.path |
|
| AS Num | ip.src.asnum |
|
| Country | ip.src.country |
|
| JA3 Fingerprint | 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-клейм (введите ID конфигурации токена, имя клейма) | lookup_json_string( http.request.jwt.claims["<token_configuration_id>"][0], "<claim_name>") |
Требования к клеймам в JWT, отсутствующее поле и пустое значение и Справочник по JWT Validation |
| Body | http.request.body.raw |
|
| Body size (выберите оператор, введите размер) | http.request.body.size |
|
| Custom (введите выражение) | Введите пользовательское выражение. Можно использовать функцию, например substring() или lower() или введите более сложное выражение. |
Функции |
Доступные характеристики зависят от вашего плана Cloudflare. См. Доступность для получения дополнительной информации.
Increment counter when
- Тип данных:
String - Имя поля в API:
counting_expression(необязательно)
Доступно в панели управления Cloudflare только при включении Use custom counting expression.
Определяет критерии, используемые для расчёта частоты запросов. По умолчанию выражение подсчёта совпадает с выражением сопоставления правила (заданным в Когда входящие запросы соответствуют). Это значение по умолчанию применяется и тогда, когда вы задаёте этому полю пустую строку ("").
Выражение подсчёта может включать Поля HTTP-ответа. Когда в выражении подсчёта есть поля ответа, подсчёт происходит после отправки ответа.
В некоторых случаях включить поля HTTP-ответа в выражение подсчёта нельзя из-за ограничений конфигурации. См. Ограничения конфигурации для получения подробностей.
When rate exceeds
- Имя поля в API: Н/Д (в зависимости от выбранного варианта требуются разные поля API)
Подсчёт rate limiting может быть:
- На основе запросов: выполняет rate limiting по числу входящих запросов за заданный период. Это единственный метод подсчёта, когда rate limiting на основе сложности недоступен.
- На основе сложности: выполняет rate limiting на основе сложность или стоимости обработки запросов за заданный период. Доступно только клиентам Enterprise с Advanced Rate Limiting.
When rate exceeds > Requests
- Тип данных:
Integer - Имя поля в API:
requests_per_period
Число запросов за период времени, при котором сработает правило. Применяется к rate limiting по числу запросов.
When rate exceeds > Period
- Тип данных:
Integer - Имя поля в API:
period
Период времени (в секундах), учитываемый при оценке частоты запросов. Доступные значения зависят от вашего тарифа Cloudflare.
Доступные значения API: 10, 60 (одна минута), 120 (две минуты), 300 (пять минут), 600 (10 минут) или 3600 (один час).
When rate exceeds > Score per period
- Тип данных:
Integer - Имя поля в API:
score_per_period
Максимальная оценка за период. При превышении этого значения выполняется действие правила. Применяется к rate limiting на основе сложности.
When rate exceeds > Response header name
- Тип данных:
String - Имя поля в API:
score_response_header_name
Имя HTTP-заголовка в ответе, устанавливаемого исходным сервером, с оценкой для текущего запроса. Применяется к rate limiting на основе сложности.
Затем примите меры
- Тип данных:
String - Имя поля в API:
action(поле правила)
Действие, выполняемое при достижении частоты, указанной в правиле.
Используйте одно из следующих значений в API: block, js_challenge (неинтерактивный челлендж), managed_challenge (Managed Challenge), challenge (Interactive Challenge) или log.
Если вы выберете Block вы можете определить пользовательский ответ с помощью следующих параметров:
With response type (для Block )
- Тип данных:
String - Имя поля в API:
response>content_type(необязательно)
Определяет тип контента пользовательского ответа при блокировке запроса из-за rate limiting. Доступно, только если для действие правила в Block.
Доступные значения API: application/json, text/html, text/xml, или text/plain.
С кодом ответа (для Block )
- Тип данных:
Integer - Имя поля в API:
response>status_code(необязательно)
Определяет код состояния HTTP, возвращаемый посетителю при блокировке запроса из-за rate limiting. Доступно, только если для действие правила в Block.
Введите значение в диапазоне от 400 и 499. Значение по умолчанию — 429 (Too many requests).
Тело ответа (для Block )
- Тип данных:
String - Имя поля в API:
response>content(необязательно)
Определяет тело возвращаемого HTTP-ответа при блокировке запроса из-за rate limiting. Доступно, только если для действие правила в Block.
Максимальный размер поля — 30 КБ.
For duration
- Тип данных:
Integer - Имя поля в API:
mitigation_timeout
После достижения заданной частоты правило rate limiting применяет действие правила к последующим запросам в течение периода, заданного в этом поле (в секундах).
В панели управления выберите одно из доступных значений, которые зависят от вашего тарифа Cloudflare. Доступные значения в API: 0, 10, 60 (одна минута), 120 (две минуты), 300 (пять минут), 600 (10 минут), 3600 (один час) или 86400 (один день).
Клиенты на тарифах Free, Pro и Business не могут выбирать длительность при использовании действие-челлендж — их правило rate limiting для этих действий всегда будет выполнять троттлинг запросов. При троттлинге запросов длительность не задаётся. Когда посетители проходят челлендж, соответствующий им счётчик запросов равен нулю. Когда посетители с теми же значениями характеристик правила выполнят достаточно запросов, чтобы снова сработало правило rate limiting, они получат новый челлендж.
Клиенты Enterprise всегда могут настроить длительность (или таймаут митигации), даже при использовании одного из действий-челленджей.
Со следующим поведением
- Тип данных:
Integer - Имя поля в API:
mitigation_timeout
Определяет точное поведение выбранного действия.
Поведение действия может быть одним из следующих:
-
Perform action during the selected duration: применяет настроенное действие ко всем запросам, полученным в течение выбранной длительности. Чтобы настроить это поведение через API, задайте
mitigation_timeoutв значение больше нуля. См. For duration для получения дополнительной информации.
-
Троттлинг запросов сверх максимального настроенного лимита: применяет выбранное действие к входящим запросам сверх настроенного лимита, пропуская остальные запросы. Чтобы настроить это поведение через API, задайте
mitigation_timeoutв0(ноль).
Замечания о характеристиках правил rate limiting
Сценарии использования IP с поддержкой NAT
Используйте IP с поддержкой NAT для обработки ситуаций, когда запросы за NAT используют один и тот же IP-адрес. Для идентификации уникальных посетителей Cloudflare использует различные техники с сохранением приватности, включая, в некоторых случаях, сессионные cookie. См. Cookie Cloudflare для получения подробностей.
Замечания при использовании IP с поддержкой NAT
IP с поддержкой NAT опирается на механизм идентификации посетителей на основе cookie (_cfuvid (cookie)). Учитывайте следующее:
- Посетители, которые очищают cookie, используют приватный режим браузера или не принимают cookie, не будут идентифицироваться индивидуально. Запросы таких посетителей попадают в общий счётчик, что может вызывать ложные срабатывания в средах NAT с большим трафиком.
- Для критичного к безопасности rate limiting (например, защиты конечных точек входа или платежей) сочетайте IP с поддержкой NAT с другими характеристиками, такими как Path или Header value of чтобы уменьшить влияние пробелов в идентификации.
Несовместимые характеристики
Нельзя использовать одновременно IP с поддержкой NAT и IP в качестве характеристик одного и того же правила rate limiting.
Не используйте cf.colo.id как поле в выражениях
Не следует использовать cf.colo.id характеристику (идентификатор дата-центра) как поле в выражениях правил. Кроме того, cf.colo.id могут изменяться без предупреждения. Подробнее об этой характеристике rate limiting см. Расчёт частоты запросов.
Используйте имя заголовка в нижнем регистре (для пользователей API)
Если вы используете Header value of в API-запросе (с http.request.headers["<header_name>"]), имя заголовка необходимо вводить в нижнем регистре, поскольку Cloudflare нормализует имена заголовков в своей глобальной сети.
Отсутствующее поле и пустое значение: в чём разница
Если вы используете Header value of, Значение cookie, Query value of, JSON string value of, lookup_json_integer(...), или Form input value of характеристику, а конкретный заголовок/cookie/параметр/ключ JSON/имя поля формы отсутствует в запросе, правило rate limiting всё равно может применяться к запросу — в зависимости от вашего выражения подсчёта.
Если не отфильтровать такие запросы, будет определённый счётчик запросов для запросов, где поле отсутствует, — он будет отличаться от счётчика запросов, где поле присутствует с пустым значением.
Например, чтобы в рамках конкретного правила rate limiting учитывать только запросы с определённым HTTP-заголовком, скорректируйте выражение подсчёта правила, чтобы оно содержало что-то похожее на следующее:
and len(http.request.headers["<header_name>"]) > 0
Где <header_name> — то же имя заголовка, которое используется как характеристика правила rate limiting.
Рекомендуемые конфигурации при использовании Cookie value of
Если вы используете Значение cookie в качестве характеристики правила rate limiting, следуйте этим рекомендациям:
- Создайте пользовательское правило , которое блокирует запросы с более чем одним значением этого cookie.
- Валидируйте значение cookie на исходном сервере перед выполнением любых ресурсоёмких серверных операций.
Требования к использованию утверждений (claims) внутри JSON Web Token (JWT)
Чтобы использовать клеймы внутри JSON Web Token (JWT), сначала нужно настроить конфигурация валидации токенов в API Shield.
Ограничения конфигурации
-
Если выражение фильтра правила, заданное в Когда входящие запросы соответствуют включает пользовательские списки, необходимо включить Также применять rate limiting к кешированным ресурсам параметр.
-
Выражение фильтра правила не может содержать Поля HTTP-ответа.
-
Выражение подсчёта правила, заданное в Increment counter when не может одновременно включать Поля HTTP-ответа и пользовательские списки. Если вы используете пользовательские списки, необходимо включить Также применять rate limiting к кешированным ресурсам параметр.
-
При создании набора правил rate limiting на уровне аккаунта, выражение развёртывания набора правил (определяющее область действия) не может содержать Поля HTTP-ответа или пользовательские списки.