Назад | Перейти на главную страницу

Nginx как использовать limit_req_zone на auth_basic для защиты от атаки грубой силы?

У меня есть сервер Nginx, который работает как прокси SSL для службы, работающей на локальном хосте, которая не поддерживает аутентификацию SSL.

Я хотел бы использовать Nginx limit_req_zone функция для защиты Basic_Auth от атак грубой силы. Eсть аналогичный вопрос с ответом на использование Fail2ban, но я хотел бы, если возможно, использовать limit_req_zone.

У меня это работает - это делается с помощью этих двух строк кода:

http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; # only one login in 2 seconds allowed
  ...

  location / {
    limit_req zone=one burst=5 nodelay; # only five connections allowed for the whole / root
    ...
    proxy_pass      http://127.0.0.1:2222/myapp/www/; # redirections to my unauthenticated service
  }
}

Проблема в он также блокирует количество запросов при аутентификации пользователя что фактически приводит к тому, что http://127.0.0.1:2222/myapp/www/ не полностью загружен.

какой location должен ли я блокировать только количество попыток использования Basic_Auth?

Вы можете установить секретный заголовок cookie после авторизации. И блокировать только запросы без "секретного cookie"

http {

    map $cookie_SECRET_NAME $is_limited{
        default $binary_remote_addr;
        "SECRET_VALUE" "";
    }

    limit_req_zone $is_limited zone=one:10m rate=30r/m; # only one login in 2 seconds allowed
    ...

    location / {
        limit_req zone=one burst=5 nodelay; # only five connections allowed for the whole / root
        ...
        proxy_pass      http://127.0.0.1:2222/myapp/www/; # redirections to my unauthenticated service
    }
}

В скрипте php вы можете добавить cookie после первого успешного входа в систему

<?php
setcookie("SECRET_NAME", "SECRET_VALUE");
?>