Advanced Rate Limiter
ARL (Advanced Rate Limiter) — модуль для контроля и ограничения нагрузки на веб-приложения. Модуль позволяет установить лимит на количество HTTP-запросов за определенный промежуток времени. Все запросы свыше лимита будут блокироваться. Можно установить единый лимит на весь трафик, а также настраивать различные лимиты для сегментирования запросов по определенным параметрам. Запросы для лимитов можно считать по одному или объединять в группы по заданному признаку.
Преимущества и возможности ARL:
- Защита бэкендов от резкого увеличения нагрузки и сохранение их работоспособности.
- Дополнительная защита API с помощью контроля HTTP-параметров.
- Гибкая настройка лимитов в зависимости от параметров трафика.
- Лимит на одиночные запросы или на группу запросов.
- Режим Dry Run для тестирования правил и анализа трафика.
- Логирование работы ARL.
Для настройки ARL используются профили. Профиль состоит из набора правил, которые устанавливают лимиты на запросы определенного типа. По этим правилам ARL анализирует входящие HTTP-запросы и когда количество запросов превышает установленные лимиты, блокирует их.
Профиль ARL подключается к профилю безопасности. Правила ARL применяются к трафику, который уже прошел проверку правил из профиля безопасности. Это позволяет анализировать не весь входящий трафик, а только разрешенный и повышает отказоустойчивость модуля ARL.
Подробнее о подключении к профилю безопасности см. в разделе Создайте и подключите профиль ARL.
В правиле ARL доступны следующие настройки:
Условия на трафик
Правило ARL может устанавливать лимит на входящие HTTP-запросы для всего трафика и трафика, удовлетворяющего условиям.
Условия определяются следующими параметрами:
IP— IP-адрес, диапазон адресов или регион адресов клиентов, для которых будет применяться правило.Request path— путь или часть пути, на который был отправлен запрос.Host— доменное имя, на которое был отправлен запрос.HTTP method— метод или набор методов, к которым принадлежит запрос.HTTP header— параметры в заголовке запроса.Cookie— строка в cookie-файлах.
Подсчет запросов
Подсчет количества запросов для применения лимита можно вести одним из способов:
- Подсчет каждого запроса в отдельности.
- Объединение запросов в группы по определенному признаку и ограничение количества групп.
Группировать запросы можно:
-
Автоматически — по атрибутам
Request path,HTTP method,IP-адрес,Регион,Host. -
По совпадению указанного ключа в атрибутах
Query params,HTTP header,HTTP cookie.Для трафика можно задать гибкие условия совпадения или несовпадения указанных параметров. Строковые совпадения можно находить с учетом или без учета регистра. Значения параметров могут быть одиночными, диапазонами или регулярными выражениями.
Также можно выбрать промежуток времени (от 1 секунды до 60 минут) и настроить действия, которые будут выполняться для запросов свыше лимита в заданном интервале.
Для вычисления лимитов и тестирования правил ARL предусмотрен режим Только логирование (Dry Run). В этом режиме запросы блокироваться не будут. Это позволяет оценить возможности бэкендов и подобрать оптимальные значения лимитов.
Действия при превышении лимита
Если количество запросов в заданный промежуток времени превысило лимит, можно их заблокировать или направить на капчу. При блокировке запроса клиенту будет возвращена ошибка 429 – Too Many Requests.
Доступен выбор действий:
-
Блокировать запросы свыше лимита — будут отклонены все запросы до конца текущего периода, на который установлен лимит.
Это действие можно использовать, когда нужно ограничить пиковую нагрузку, но сохранить приложение максимально доступным. Действие доступно без группировки запросов.
-
Временно блокировать все запросы — будут отклонены все запросы на заданный вами период времени. Период блокировки можно указать от 1 секунды до 60 минут. Запросы блокируются на фиксированный срок, независимо от того, сколько времени остается до окончания периода лимита. После истечения времени блокировки доступ автоматически восстанавливается.
Это действие можно использовать для более сильной защиты от ботов, парсеров, брутфорса или спама, когда надежность важнее доступности. Например, для страницы входа или отправки сообщений. Действие доступно при группировке запросов.
-
Отправлять на капчу запросы свыше лимита — запросы, поступившие после достижения лимита, будут направлены в SmartCaptcha. Капча настраивается через профиль безопасности, к которому подключен профиль ARL. Это действие помогает отделять легитимных пользователей от ботов. При этом запросы не будут заблокированы полностью, доступность приложения сохранится.
Это действие можно использовать как более мягкое ограничение на страницах с формами регистрации, входа, обратной связи, поиска и аналогичных.