Як обмежити повторні спроби Nginx Auth_Basic?


15

Я захистив веб-папку з модулем Auth_Basic Nginx. Проблема полягає в тому, що ми можемо спробувати кілька паролів, поки це не спрацює (грубі напади). Чи є спосіб обмежити кількість невдалих повторних спроб?

Відповіді:


30

Наскільки мені відомо, модуль 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відповідають вашій конфігурації.


5

Я вражений, що ніхто не дав цього рішення / вирішення.

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).

Це набагато простіше в налаштуванні і більш безпроблемному, ніж налаштування "інтелектуального" обмеження запиту.


2
Це було б корисно, якщо ви можете використовувати bcryptпаролі ed з базовим auth Nginx, але, мабуть, ви не можете .
keune

Я спробував це, для мене це працює абсолютно чудово. Використовуючи його у виробництві зараз.
SColvin

Не працював над vanilla ngix на ubuntu, як сказав @keune
Fabian Thommen

4
Варто зазначити, що це обмежить спроби пароля, але тільки тому, що ваш сервер буде перевантажений обчисленням дорогих хешей. У виробничих умовах це, мабуть, не те, що ви хочете.
Томаш П. Шинальський

Міцний і легкий, так. Дозволяє DoS-атаки проти використання процесора.
Райнер Рілке

1

Я не вірю, що у nginx немає жодного внутрішнього засобу для цього. Сторінка документації не передбачає, що це можливо.

Ви можете використовувати Fail2Ban для блокування IP-адрес, які повторювали невдалі спроби входу.

Вікі Fail2Ban мають деякі особливості nginx .

Fail2Ban повинен бути доступний як пакет для більшості великих дистрибутивів.


0

Модуль Nginx-HTTP-Auth-Digest може замінити основний модуль аутентифікації безліччю додаткових функцій висмоктування, як повтор, так і час очікування. Додаткова документація доступна тут

Єдиним недоліком є ​​те, що для цього, ймовірно, потрібна перебудова nginx

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.