Ограничение скорости Nginx для уникальных IP-адресов

Ограничение скорости Nginx для уникальных IP-адресов

Мы сталкиваемся с постоянными атаками на наш URL-адрес аутентификации, речь идет о миллионах запросов в день. Я предполагаю, что они пытаются подобрать пароли методом подбора.

Всякий раз, когда мы блокировали IP-адрес с помощью брандмауэра сервера, через несколько секунд атаки возобновлялись с другого IP-адреса.

мы в конечном итоге внедрили комбинацию дросселирования через rack-attack плюс пользовательский код для динамической блокировки IP-адресов в брандмауэре. Но по мере того, как мы улучшали безопасность нашего программного обеспечения, то же самое делали и злоумышленники, и теперь мы видим, что каждый сделанный ими запрос выполняется с другого IP-адреса, один вызов на IP-адрес, все еще несколько в секунду, не так много, но все еще проблема.

Теперь я пытаюсь понять, что еще я могу сделать, чтобы предотвратить это. Мы пробовали recaptcha, но быстро исчерпали месячную квоту, и теперь никто не может войти в систему.

Я изучаю ограничитель скорости Nginx, но, насколько я вижу, он также использует IP-адрес, учитывая, что теперь они меняют IP-адреса для каждого запроса. Есть ли способ, чтобы это работало?

Есть ли у вас еще предложения, как с этим справиться? Может быть, кто-то из вас прошел через то же самое?

Стек: Nginx и Rails 4, Ubuntu 16.

решение1

С ограничением скорости вы отфильтровали некоторые из распылителей паролей большого объема, что помогает. Однако ограничение скорости на основе IP само по себе не работает, когда у злоумышленника много IP-адресов, он быстро их переключает и ограничивает запросы до человеческой скорости.

мы попробовали recaptcha, но быстро исчерпали месячную квоту, и теперь никто не может войти в систему.

Оплатите услугу CAPTCHA и посмотрите, как она работает в масштабе в течение месяца. Если вам не нравится цена, посмотритеальтернативы.hCaptcha, например, имеет базовый бесплатный уровень.

Более фундаментально, замените пароли чем-то лучшим, может быть, аппаратными ключами безопасности или биометрией. Или, по крайней мере, дополните пароли дополнительными факторами аутентификации. Для этого существуют стандарты, а именно FIDO2. А для не интерактивных учетных данных пользователя ключи ssh, сертификаты x509 или сгенерированные ключи API также лучше, чем пароли, выбранные пользователем.

Связанный контент