Відповіді:
Наскільки мені відомо, модуль Auth Basic не підтримує цю функцію, але це можна зробити за допомогою Fail2ban .
Тестуючи з неіснуючим користувачем, ви побачите щось подібне донизу в журналі помилок:
2012/08/25 10:07:01 [error] 5866#0: *1 no user/password was provided for basic authentication, client: 127.0.0.1, server: localhost, request: "GET /pma HTTP/1.1", host: "localhost:81"
2012/08/25 10:07:04 [error] 5866#0: *1 user "ajfkla" was not found in "/etc/nginx/htpasswd", client: 127.0.0.1, server: localhost, request: "GET /pma HTTP/1.1", host: "localhost:81"
Потім створіть необхідний фільтр:
/etc/fail2ban/filter.d/nginx-auth.conf
[Definition]
failregex = no user/password was provided for basic authentication.*client: <HOST>
user .* was not found in.*client: <HOST>
user .* password mismatch.*client: <HOST>
ignoreregex = </host></host></host>
/etc/fail2ban/jail.conf
[nginx-auth]
enabled = true
filter = nginx-auth
action = iptables[name=NoAuthFailures, port=80, protocol=tcp]
logpath = /var/log/nginx*/*error*.log
bantime = 3600 # 1 hour
maxretry = 3
Тестування правил Fail2Ban:
fail2ban-regex /var/log/nginx/localhost.error_log /etc/fail2ban/filter.d/nginx-auth.conf
Failregex
|- Regular expressions:
| [1] no user/password was provided for basic authentication.*client: <HOST>
| [2] user .* was not found in.*client: <HOST>
| [3] user .* password mismatch.*client: <HOST>
|
`- Number of matches:
[1] 1 match(es)
[2] 2 match(es)
[3] 0 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
127.0.0.1 (Sat Aug 25 10:07:01 2012)
[2]
127.0.0.1 (Sat Aug 25 10:07:04 2012)
127.0.0.1 (Sat Aug 25 10:07:07 2012)
[3]
PS: Оскільки Fail2ban отримує файли журналів для заборони, переконайтеся, що вони logpath
відповідають вашій конфігурації.
Я вражений, що ніхто не дав цього рішення / вирішення.
Nginx basic-auth та htpasswd
підтримка шифрування паролем bcrypt з додатковою змінною вартості. Bcrypt розроблений як повільний, що забезпечує жорстке обмеження швидкості ви можете спробувати різні паролі.
Під час створення вашого основного авторського імені користувача / пароля
htpasswd -B -C 12 path/to/users.db <username>
З вартістю 12, ваш сервер, ймовірно, не зможе спробувати паролі більше декількох разів на секунду, збільште це, щоб сказати, 14, і ви, ймовірно, будете дивитись приблизно на 1 секунду за спробу пароля.
За допомогою цього налаштованого будь-якого розумного пароля не вдасться захистити грубу силу, навіть якщо зловмисник намагався вводити паролі протягом багатьох років.
Наприклад , при 10 спроб введення пароля в секунду перебором на 8 - символьний буквено - цифровий пароль буде приймати 692,351 років: 62**8 / (10*3600*24*365)
.
Це набагато простіше в налаштуванні і більш безпроблемному, ніж налаштування "інтелектуального" обмеження запиту.
Я не вірю, що у nginx немає жодного внутрішнього засобу для цього. Сторінка документації не передбачає, що це можливо.
Ви можете використовувати Fail2Ban для блокування IP-адрес, які повторювали невдалі спроби входу.
Вікі Fail2Ban мають деякі особливості nginx .
Fail2Ban повинен бути доступний як пакет для більшості великих дистрибутивів.
Модуль Nginx-HTTP-Auth-Digest може замінити основний модуль аутентифікації безліччю додаткових функцій висмоктування, як повтор, так і час очікування. Додаткова документація доступна тут
Єдиним недоліком є те, що для цього, ймовірно, потрібна перебудова nginx
bcrypt
паролі ed з базовим auth Nginx, але, мабуть, ви не можете .