У меня есть сервер 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");
?>