Скажем, у нас есть балансировщик нагрузки, который также ограничивает скорость. Ограничение скорости кажется довольно простым для вошедших в систему пользователей - просто посмотрите на JWT и, возможно, используйте хранилище данных в памяти, чтобы увидеть, сколько запросов за последние 10 секунд для этого пользователя.
Однако как насчет не вошедших (не прошедших проверку подлинности) пользователей? Мы точно не знаем, кто именно или откуда поступил запрос, поэтому не можем легко ограничить эти запросы или ...?
Существуют ли встроенные решения для этого на AWS и других хостинговых платформах, стоит ли нам беспокоиться об этом? Похоже, нам нужно обрабатывать логику ограничения скорости для зарегистрированных пользователей вручную, но как насчет незарегистрированных пользователей?
Я предполагаю / надеюсь, что мог бы быть некоторый встроенный механизм для ограничения скорости неаутентифицированных запросов на хостинговых платформах, пожалуйста, сообщите нам всем.
Ответы:
Есть пара подходов, которые вы можете использовать. Во-первых, вам нужен достаточно надежный идентификатор источника, например, IP-адрес. Вы можете оценить ограничение по IP-адресу, так что атаки на один взломанный компьютер будут ограничены. Это довольно простой подход, но есть недостаток, заключающийся в том, что крупные сетевые провайдеры могут использовать только один исходящий IP-адрес, чтобы скрыть очень большое количество пользователей за NAT.
Другой подход к ограничению скорости, который вы можете использовать, - требовать подтверждения работы для любых неаутентифицированных запросов. Ваш сервер выдает код вызова, который любой клиент, отправляющий неаутентифицированный запрос (например, запросы на вход в систему), должен рассчитать ресурсоемкий ответ перед обработкой запроса. Обычная реализация этой идеи требует, чтобы клиенты вычисляли частичное обращение хеша.
источник
Чтобы узнать, был ли запрос от аутентифицированного пользователя или от анонимного пользователя, вы должны обязательно обработать запрос (хотя и быстро). Это по-прежнему означает, что ваше приложение уязвимо для атаки типа «отказ в обслуживании».
Вы должны проверять общее количество запросов в секунду, и если определенное число превышено, вы просто игнорируете остальные. Это число должно быть достаточно большим, чтобы не вызывать проблем при нормальном функционировании, но должно защищать от таких атак.
Кроме того, как общее правило, вы, вероятно, не должны предполагать, что атака не будет осуществляться аутентифицированным пользователем, как минимум в отношении атак DOS. Слабый пароль легко позволит кому-то предположить личность старого пользователя. Итак, предположим, что вы могли бы сделать такую проверку, ваши (люди) пользователи никогда не должны выполнять запросы с такой скоростью, даже если у вас много отдельных пользователей.
источник
Одним из основных предложений Cloudflare является защита от атак типа «отказ в обслуживании», предоставляя интеллектуальный прокси для вашего API / веб-сервера. Базовый сервис бесплатный; они зарабатывают на других связанных сервисах, таких как услуги CDN и балансировка нагрузки. Они также предоставляют более сложные и контролируемые услуги по ограничению скорости , в настоящее время по цене 0,05 доллара США за 10 000 хороших запросов (плата за отклоненные запросы не взимается), но вам нужно перейти на платные планы, чтобы получить более одного глобального правила.
Вы можете использовать сервис Cloudflare с AWS или любой другой платформой, если у вас есть контроль над серверами имен вашего домена (например, вы можете изменить серверы имен, зарегистрированные для вашего домена).
Вы можете предоставить отдельные ограничения скорости для анонимных и вошедших в систему пользователей, направляя вошедших в систему пользователей по разным URL-адресам. Например, вы можете просто поставить перед всеми анонимно доступными URL-путями префикс «/ u», чтобы создать конечную точку, которая всегда требует аутентификации и имеет другое ограничение скорости.
Обратите внимание, что ограничение скорости Cloudflare (как и все ограничения коммерческих ставок для анонимных пользователей, о которых я знаю) определяет клиента по его IP-адресу. Это может вызвать проблемы у людей, использующих коммерческие VPN или Tor, так как они склонны скрывать большое количество клиентов за 1 IP-адресом для дополнительной конфиденциальности.
источник
В AWS есть связанные сервисы AWS Shield и AWS WAF . Они в первую очередь предназначены для предотвращения DDoS-атак, но также предлагают поддержку ограничения скорости на основе IP-адресов.
В WAF эта концепция называется правилами на основе ставок . Предотвращение попыток входа в систему методом грубой силы упоминается в качестве варианта использования в первоначальном объявлении :
Другие облачные провайдеры должны иметь аналогичные предложения. Вот табличное сравнение: Google Cloud Armor против AWS WAF против Cloudflare WAF .
Поскольку вы уже используете Nginx, использование встроенного ограничения скорости на основе IP также может быть простым вариантом. Модуль называется ngx_http_limit_req_module . Этот блог описывает, как его можно использовать.
Обратите внимание, что ограничение скорости на основе IP - это относительно простая концепция, но она не идеальна:
В общем, IP-адреса являются хорошим началом. Но если вам нужна более сильная защита, ваш лучший выбор будет зависеть от вашей модели потока (какой тип атак вы хотите предотвратить).
источник