Pour autant que je sache, le module Auth Basic ne prend pas en charge cette fonctionnalité, mais vous pouvez le faire en utilisant Fail2ban .
En testant avec un utilisateur inexistant, vous verrez quelque chose comme des belows dans le journal des erreurs:
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"
Créez ensuite le filtre nécessaire:
/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
Test des règles 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: Étant donné que Fail2ban récupère les fichiers journaux à bannir, assurez-vous que cela logpath
correspond à votre configuration.
bcrypt
mots de passe ed avec l'authentification de base de Nginx, mais apparemment vous ne pouvez pas .Je ne pense pas que nginx ait une installation interne pour le faire. La page de documentation ne suggère pas que c'est possible.
Vous pouvez utiliser Fail2Ban pour bloquer les adresses IP dont les tentatives de connexion ont échoué à plusieurs reprises.
Le wiki Fail2Ban a des modèles spécifiques à nginx .
Fail2Ban devrait être disponible sous forme de package sur la plupart des grandes distributions.
la source
Le module Nginx-HTTP-Auth-Digest peut remplacer le module d'authentification de base par de nombreuses fonctionnalités supplémentaires telles que la nouvelle tentative et le délai d'expiration. Une documentation supplémentaire est disponible ici
Le seul inconvénient est que cela nécessite probablement la reconstruction de nginx
la source