INTEGRITY Документация

Rate Limiting (предыдущая версия)

Cloudflare Rate Limiting автоматически выявляет и ограничивает чрезмерную частоту запросов к конкретным URL или ко всему домену.

Частота запросов рассчитывается локально для отдельных дата-центров Cloudflare. Самые частые применения Rate Limiting:

Как только отдельный IPv4-адрес или IPv6 /64 IP-диапазона превышает порог правила, дальнейшие запросы к исходному серверу блокируются с HTTP 429 код состояния ответа. Ответ включает Retry-After (заголовок), указывающий, когда клиент может возобновить отправку запросов.

Rate limiting и SEO

Кешированные ресурсы и известные краулеры поисковых систем исключены из ваших правил rate limiting (только в предыдущей версии). Поэтому они не влияют на SEO-ранжирование.


Доступность

Допустимое число правил rate limiting зависит от тарифного плана домена:

План Rules Правила, совпадающие по заголовкам ответа Действия Action Duration Request Period
Free 1 1 Block 1 минута или 1 час 10 секунд или 1 минута
Pro 10 1 Block, Non-Interactive Challenge, Managed Challenge, Interactive Challenge или Log 1 минута или 1 час 10 секунд или 1 минута
Business 15 10 Block, Non-Interactive Challenge, Managed Challenge, Interactive Challenge или Log 1 минута, 1 час или 24 часа 10 секунд, 1 минута или 10 минут
Enterprise 100 10 Block, Non-Interactive Challenge, Managed Challenge, Interactive Challenge или Log Любая длительность от 10 секунд до 86 400 секунд (24 часа) Любое значение от 10 до 3 600 секунд (1 час)

Cloudflare Rate Limiting поддерживает несколько уровней управления конфигурацией в зависимости от плана Cloudflare домена. Таблица ниже показывает, что доступно на вашем плане:

Порядок Задача Доступно в
1 Настройка базового правила rate limiting Все планы
2 Настройка Advanced Criteria Тарифы Business и Enterprise
3 Настройка Advanced Response Тарифы Business и Enterprise
4 Настройка параметра Bypass План Enterprise

Компоненты правила rate limiting

Правило rate limiting состоит из трёх отдельных компонентов:

Критерии совпадения запросов

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

Путь запроса

Например:

Путь запроса нечувствителен к регистру. Шаблоны не могут сопоставляться с содержимым после строки запроса (?) или якорями (#). Звёздочка (*) соответствует любой последовательности символов, включая пустую. Например:

Запрос к example.com/path — не то же самое, что example.com/path/. Единственное исключение из этого правила — главная страница: example.com соответствует example.com/.

Схема запроса

HTTP или HTTPS. Если ничего не указано, совпадают оба, и правило покажет __ALL__.

Метод запроса

POST или GET. Если ничего не указано, совпадают все методы, и правило покажет __ALL__.

(Необязательно) Код ответа исходного сервера

Например, правило rate limiting может срабатывать только тогда, когда сервер-источник возвращает HTTP 401 или 403 (код состояния). Сработавшее правило с критерием по коду ответа блокирует последующие запросы этого клиента независимо от кода ответа источника.

Критерии сопоставления частоты

Правило может срабатывать по количеству и периоду времени всех запросов, приходящих от одного клиента.

Количество запросов

Укажите минимум два запроса. Для блокировки одиночных запросов сделайте путь недоступным — например, настройте исходный сервер так, чтобы он возвращал HTTP 403 (код состояния).

Период запросов

Правило срабатывает, когда запросы клиента превышают пороговое значение за указанный период.

Блокировка правилом

Блокировки правил состоят из блокирующего действия и длительности бана.

Действие реагирования

Действия rate limiting зависят от тарифного плана домена, как указано в Доступность:

Дополнительную информацию о действиях-челленджах см. в Челленджи.

Длительность блокировки

Если задать таймаут короче порога, API автоматически увеличит таймаут до значения порога.

Посетители, достигшие лимита частоты запросов, получают стандартную HTML-страницу, если пользовательская страница ошибки не задан. Кроме того, клиенты Business и Enterprise могут указать ответ прямо в правиле. См. Настройка Advanced Response для получения подробностей.


Определение порогов rate limiting

Чтобы определить общий порог для Cloudflare Rate Limiting, разделите число некешированных запросов к сайту за 24 часа на число уникальных посетителей за те же 24 часа. Затем разделите на среднюю оценочную длительность визита в минутах. Наконец, умножьте на 4 (или больше), чтобы получить оценочный порог в минуту для вашего сайта. Значение выше 4 допустимо, поскольку большинство атак на порядок превышает обычную частоту трафика.

Чтобы определить лимиты частоты для конкретных URL, используйте данные за 24 часа по некешированным запросам и уникальным посетителям этого URL. Корректируйте пороги на основе обращений пользователей и собственного мониторинга.


Задача 1: настройка базового правила rate limiting

В следующих разделах рассмотрены два распространённых типа правил rate limiting.

Включение Protect your login

В Rate Limiting доступен включаемый одним нажатием Защита страницы входа, который создаёт правило, блокирующее клиента на 15 минут при отправке более 5 POST-запросов за 5 минут. Этого достаточно, чтобы заблокировать большинство попыток перебора (brute force).

  1. Войдите в дашборд Cloudflare, и выберите ваш аккаунт и домен.
  2. Перейдите в Security > WAF > Правила rate limiting.
  3. В разделе Rate Limiting, выберите Защита страницы входа.
  4. Введите Rule Name и Введите URL вашей страницы входа в Защита страницы входа — в появившемся диалоговом окне.
  5. Выберите Save.
  6. Rule Name появляется в вашем Rate Limiting списке правил.

Создание пользовательского правила rate limiting

  1. Войдите в дашборд Cloudflare, и выберите ваш аккаунт и домен.

  2. Перейдите в Security > WAF > Правила rate limiting.

  3. Выберите Create rate limiting rule. Откроется диалоговое окно, в котором вы укажете детали нового правила.

    Диалоговое окно Create rate limiting rule с примером конфигурации правила. Правило будет на один час блокировать запросы с IP-адресов, превышающих 150 запросов в минуту.
  4. Введите описательное имя правила в поле Rule Name.

  5. Для If Traffic Matching the URL, выберите HTTP-схему в выпадающем списке и введите URL.

  6. В с одного IP-адреса превышает, введите целое число больше 1 — количество запросов в периоде семплирования.

  7. Для запросов за выберите период выборки (период, в течение которого подсчитываются запросы). Для доменов на планах Enterprise можно вручную ввести любую длительность от 10 до 3600 секунд (один час).

  8. Для Тогда, выберите одно из доступных действий в зависимости от вашего плана. Изучите Блокировка правилом раздел.

  9. Если вы выбрали Block или Log, для соответствующий трафик этого посетителя в течение, выберите, как долго применять действие после срабатывания порога. Домены на тарифах Enterprise могут ввести любое значение от 10 секунд до 86 400 секунд (24 часа).

  10. Чтобы активировать новое правило, выберите Save and Deploy.

Новое правило появится в списке правил rate limiting.

В целом при установке более низкого порога:

  1. Оставьте существующие правила на месте и добавьте новое правило с более низким порогом.
  2. После ввода нового правила дождитесь истечения длительности действия старого правила, прежде чем удалять его.

При установке более высокого порога (из-за блокировки легитимных клиентов) увеличивайте порог в существующем правиле.


Задача 2: настройка Advanced Criteria (только планы Business и Enterprise)

Advanced Criteria определяет, какие HTTP-методы, заголовки ответов и коды ответа источника должны учитываться правилом rate limiting.

Чтобы настроить расширенные критерии для нового или существующего правила:

  1. Разверните Advanced Criteria.

    Поля, доступные при настройке Advanced Criteria для правила rate limiting.
  2. Выберите значение из Метод(ы). Значение по умолчанию — ANY, которое соответствует всем HTTP-методам.

  3. Отфильтруйте по HTTP-заголовки ответа. Выберите Add header response field , чтобы включить заголовки, возвращаемые вашим исходным веб-сервером.

    CF-Cache-Status присутствует по умолчанию, чтобы Cloudflare отдавал кешированные ресурсы, а не применял к ним rate limiting. Чтобы применять rate limiting и к кешированным ресурсам, удалите этот заголовок, выбрав X или включите Также применять лимит частоты к кешированным ресурсам.

    Если у вас несколько заголовков в HTTP-заголовки ответа, AND применяется булева логика. Чтобы исключить заголовок, используйте Not Equals. Каждый заголовок нечувствителен к регистру.

  4. В разделе Origin Response code(s), введите числовое значение каждого сопоставляемого кода HTTP-ответа. Два и более HTTP-кода разделяйте запятой (например: 401, 403).

  5. (Необязательно) Настройте дополнительные функции rate limiting в зависимости от вашего тарифного плана.

  6. Выберите Save and Deploy.


Задача 3: Настройка Advanced Response (только тарифы Business и Enterprise)

Advanced Response настраивает формат информации, возвращаемой Cloudflare при превышении порога правила. Используйте Advanced Response, если вы хотите возвращать статический контент в виде обычного текста или JSON.

Чтобы настроить ответ в виде обычного текста или JSON:

  1. Разверните Advanced Response.

    Поля, доступные при настройке Advance Response для правила rate limiting.
  2. Выберите Тип ответа (формат), отличный от формата по умолчанию: Custom JSON или Custom TEXT.

  3. Введите ответ в виде обычного текста или JSON, который вы хотите возвращать. Максимальный размер ответа — 32 КБ.

  4. (Необязательно) Настройте дополнительные функции rate limiting в зависимости от вашего тарифного плана.

  5. Выберите Save and Deploy.

Использование пользовательской HTML-страницы или редиректа

Если вы хотите показывать собственную HTML-страницу, настройте пользовательскую страницу для HTTP 429 ошибки (Too many requests) в панели управления. Cloudflare будет показывать эту страницу, когда вы выберете Страница Cloudflare Rate Limiting по умолчанию в Тип ответа (значение этого поля по умолчанию).

Вы можете использовать следующий метод для перенаправления клиента, ограниченного по частоте, на определённый URL:

  1. Создайте на своём сервере HTML-страницу, которая будет перенаправлять на конечный URL страницы, которую вы хотите показать. Включите meta refresh тег в содержимом страницы, как в следующем примере:

    <!doctype html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>Custom RL page</title>
    		<meta
    			http-equiv="refresh"
    			content="0; url='https://yourzonename/block'"
    		/>
    	</head>
    
    	<body></body>
    </html>

    Запишите публичный URL созданной вами страницы.

  2. В панели управления Cloudflare перейдите в Settings .

    Перейдите в Конфигурации ↗
  3. Перейдите в Error Pages.

  4. Рядом с Блокировка rate limiting, выберите три точки > Edit.

  5. Выберите Пользовательская страница.

  6. В Адрес пользовательской страницы введите URL страницы, созданной вами на сервере, — страницы, содержащей meta-refresh .

  7. Выберите Save.

Используйте тот же подход, если вы хотите возвращать обычный текст или JSON, но ответ превышает 32 КБ. В этом случае URL перенаправления будет URL текстового или JSON-ресурса, который вы хотите показать.


Задача 4: Настройка опции Bypass (только тарифы Enterprise)

Bypass создаёт allowlist или исключение, чтобы никакие действия не применялись к определённому набору URL, даже если лимит частоты достигнут.

Чтобы настроить Bypass:

  1. Разверните Bypass.

  2. В Правило обхода для этих URL введите URL, которые нужно исключить из правила rate limiting. Вводите каждый URL с новой строки. Указанный в URL протокол HTTP или HTTPS автоматически удаляется при сохранении правила, и правило применяется и к HTTP, и к HTTPS.

    Настройка двух URL, исключаемых из правила rate limiting (по одному на строку).
  3. (Необязательно) Настройте дополнительные функции rate limiting в зависимости от вашего тарифного плана.

  4. Выберите Save and Deploy.


Analytics

Просматривайте аналитику rate limiting для вашей зоны в Аналитика и логи > Security. В аналитике Rate Limiting сплошные линии обозначают трафик, соответствующий симулированным запросам, а пунктирные — фактически заблокированные запросы. Логи, создаваемые правилом rate limiting, доступны только клиентам Enterprise через Cloudflare Logs.

Cloudflare возвращает HTTP 429 для заблокированных запросов. Сведения о заблокированных запросах по локациям предоставляются клиентам Enterprise в разделе Коды состояния в панели аналитики, доступной по адресу Analytics > Трафик.


Порядок выполнения правил

Правила rate limiting оцениваются от самого недавно созданного правила к самому старому.

Например, если запрос соответствует следующим двум правилам:

Тогда правило #2 сработает первым, потому что оно было создано последним.

Кроме того, при совпадении, когда WAF применяет действие Log (действие), Cloudflare продолжает вычислять другие правила rate limiting, поскольку Log — нетерминальное действие. Если WAF применяет любое другое действие, остальные правила не вычисляются.


Ограничения

Rate Limiting предназначен для сдерживания всплесков трафика, превышающих заданную пользователем частоту. Система не рассчитана на то, чтобы к исходному серверу проходило строго определённое число запросов. Возможны случаи, когда между обнаружением запроса и обновлением внутреннего счётчика возникает задержка. Из-за этой задержки, которая может достигать нескольких секунд, избыточные запросы могут успеть дойти до исходного сервера до применения действия, например блокировки или челленджа.