Antworten:
Soweit mir bekannt ist, unterstützt das Auth Basic- Modul diese Funktion nicht. Sie können dies jedoch mithilfe von Fail2ban tun .
Beim Testen mit einem nicht vorhandenen Benutzer wird im Fehlerprotokoll Folgendes angezeigt:
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"
Dann erstelle den nötigen Filter:
/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-Regeln testen:
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: Da Fail2ban Protokolldateien zum Sperren abruft, stellen Sie sicher, dass sie logpathmit Ihrer Konfiguration übereinstimmen.
Ich bin erstaunt, dass noch niemand diese Lösung / Problemumgehung gegeben hat.
Nginx Basic-Authentifizierung und htpasswdUnterstützung der Verschlüsselung von Kennwörtern mit einer optionalen Kostenvariablen. Bcrypt ist so konzipiert, dass es langsam ist, und bietet daher eine harte Grenze dafür, wie schnell Sie verschiedene Passwörter versuchen können.
Verwenden Sie beim Erstellen Ihres Basisauthentifizierungs-Benutzernamens / Passworts
htpasswd -B -C 12 path/to/users.db <username>
Bei einem Preis von 12 kann Ihr Server wahrscheinlich nur ein paar Mal pro Sekunde Passwörter testen. Erhöhen Sie diesen Wert auf 14, und Sie werden wahrscheinlich ungefähr 1 Sekunde pro Passwortversuch anzeigen.
Mit dieser Konfiguration ist jedes vernünftige Passwort immun gegen Brute-Force-Angriffe, auch wenn der Angreifer jahrelang kontinuierlich Passwörter versucht hat.
ZB bei 10 Kennwortversuchen pro Sekunde Brute - Force - Angriff auf einem 8 - stellige alphanumerisches Passwort würde 692.351 Jahre dauern: 62**8 / (10*3600*24*365).
Dies ist viel einfacher zu konfigurieren und kinderleichter als die Einrichtung einer "intelligenten" Anforderungsbegrenzung.
Ich glaube nicht, dass Nginx eine interne Einrichtung hat, um dies zu tun. Die Dokumentationsseite schlägt nicht vor, dass dies möglich ist.
Sie können Fail2Ban verwenden, um IP-Adressen zu blockieren, bei denen Anmeldeversuche wiederholt fehlgeschlagen sind.
Das Fail2Ban-Wiki enthält einige Nginx -spezifische Muster .
Fail2Ban sollte in den meisten großen Distributionen als Paket verfügbar sein.
Das Nginx-HTTP-Auth-Digest- Modul kann das grundlegende Auth-Modul durch viele zusätzliche Funktionen ersetzen. Zusätzliche Dokumentation finden Sie hier
Der einzige Nachteil ist, dass dies wahrscheinlich den Neuaufbau von Nginx erfordert
bcrypted-Passwörter mit der Basisauthentifizierung von Nginx verwenden könnten , aber anscheinend nicht .