Yanıtlar:
Bildiğim kadarıyla, Auth Basic modülü bu özelliği desteklemiyor, ancak bunu Fail2ban kullanarak yapabilirsiniz .
Var olmayan bir kullanıcıyla test yaparken, hata günlüğünde belows gibi bir şey görürsünüz:
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"
Ardından gerekli filtreyi oluşturun:
/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 Fail2Ban kuralları:
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]
Not: Fail2ban günlük dosyalarını yasaklamak için getirdiğinden logpath
, yapılandırmanızla eşleştiğinden emin olun .
Bu çözüm / geçici çözümü başka hiçbir şeye vermediğine şaşırdım.
Nginx basic-auth ve htpasswd
isteğe bağlı bir maliyet değişkeni ile bcrypt şifre şifrelemesini destekler. Bcrypt yavaş olacak şekilde tasarlanmıştır, böylece farklı parolaları ne kadar hızlı deneyebileceğiniz konusunda katı bir sınır sağlar.
Temel kimlik doğrulama kullanıcı adınızı / şifre kullanımınızı oluştururken
htpasswd -B -C 12 path/to/users.db <username>
12'lik bir maliyetle, sunucunuz muhtemelen saniyede birkaç kereden fazla şifreleri deneyemeyecektir, bunu 14'e yükseltin ve muhtemelen şifre girişimi başına yaklaşık 1 saniyeye bakacaksınız.
Bu yapılandırılmışken, saldırgan yıllarca sürekli olarak şifreleri denese bile makul bir şifre kaba kuvvet saldırısına karşı bağışık olacaktır.
8 karakter alfanümerik şifre ikinci kaba kuvvet saldırısı başına 10 şifre girişimleri de Örn 692.351 yıl alırdı: 62**8 / (10*3600*24*365)
.
Bu, yapılandırılması ve "akıllı" istek sınırlaması ayarlamasından çok daha basittir.
Nginx'in bunu yapmak için herhangi bir dahili tesisi olduğuna inanmıyorum. Dokümantasyon sayfasından bu mümkün önermez.
Hatalı oturum açma girişimlerini tekrarlayan IP adreslerini engellemek için Fail2Ban kullanabilirsiniz.
Fail2Ban wiki'sinde nginx'e özgü bazı desenler bulunur .
Fail2Ban, büyük dağıtımların çoğunda bir paket olarak mevcut olmalıdır.
Nginx-HTTP-Auth-Digest modülü, temel kimlik doğrulama modülünü, yeniden deneme ve zaman aşımı gibi emilen birçok ek özellikle değiştirebilir. Ek belgeler burada bulunabilir
Tek dezavantajı, bu muhtemelen nginx'i yeniden inşa etmeyi gerektiriyor
bcrypt
Ed şifreleri Nginx'in temel yetkilendirmesi ile kullanabiliyorsanız faydalı olabilir , ancak görünüşe göre kullanamazsınız .