🚦
Безопасность

Rate limiting — ограничение количества запросов для защиты сервера

22.10.2033
← Все статьи

Rate limiting — один из основных слоев защиты в сетевой безопасности. Его суть проста — ограничить количество запросов от одного IP или пользователя за определенное время. Если лимит превышен, сервер отклоняет дополнительные запросы и возвращает ошибку. Это защищает от DDoS атак, брутфорса и злоупотребления API. Также помогает справедливо распределять ресурсы сервера между всеми пользователями.

Зачем нужен rate limiting

Поскольку интернет-сервисы открыты, любой может подключиться и отправить запрос. Злонамеренный пользователь или бот может отправить тысячи запросов в секунду и вывести сервер из строя. Кроме того, многократные попытки подбора пароля тоже опасны. Rate limiting решает эти проблемы — если из одного источника приходит слишком много запросов, они автоматически останавливаются. Важно то, что rate limiting — структурный слой защиты, и даже если в каком-то приложении есть уязвимость, атакующий не сможет быстро её эксплуатировать.

Настройка rate limiting в Nginx

В Nginx rate limiting настраивается через директивы limit_req_zone и limit_req. Сначала определяется зона — по какому ключу ограничивать (IP, пользователь, заголовок) и объем памяти. Затем в server или location указывается сколько запросов разрешено и какой burst. Burst — резерв для коротких пиков, например, когда пользователь загружает страницу и нужно много ресурсов, это нормально. В Nginx можно создать несколько зон и поставить разные лимиты для разных endpoints.

Rate limiting через Cloudflare

Cloudflare предлагает облачный rate limiting и это самый эффективный вариант, потому что атака останавливается на серверах Cloudflare и вообще не доходит до вашего сервера. В dashboard Cloudflare создаются правила — URL pattern, количество запросов, временной интервал и действие. Действие может быть блокировкой, CAPTCHA или просто отбрасыванием. На бесплатном плане тоже есть базовый rate limiting, но для расширенных правил нужен платный план. Это особенно полезно для защиты страниц входа и API endpoints.

Rate limiting на уровне приложения

Rate limiting на уровне веб-сервера хорош, но когда нужны ограничения по бизнес-логике, нужна реализация в приложении. Например, пользователь не должен запрашивать код подтверждения больше 5 раз в день или отправлять заказ больше 3 раз в минуту. Redis — лучший инструмент для этого: хранит счетчики в памяти и автоматически очищает с TTL. В Laravel, Django и других фреймворках есть готовые middleware для rate limiting, нужна только настройка.

Практика Sayt.uz

На Sayt.uz используется многослойный rate limiting на уровне Nginx. На общие сайты установлено 30 запросов в секунду на IP, на страницы входа — 5 запросов в минуту. Для API endpoints ограничение по токену — каждый клиент имеет лимит в зависимости от тарифа. Если клиент превышает лимит, в кабинете появляется предупреждение и предложение повысить тариф. Через Cloudflare также включен дополнительный слой защиты — DDoS пиковая нагрузка автоматически обнаруживается и блокируется.

Похожие статьи

🛡️ Защита от ransomware: бэкапы, сегментация, EDR и реагирование на инциденты 🎣 Защита сотрудников от фишинговых атак: обучение и технические меры 📋 Чеклист аудита безопасности: WordPress, сервер, SSL и проверка резервных копий 🔐 Мониторинг SSL-сертификатов: отслеживание срока действия и авто-обновление
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English