Nginx Auth_Basic yeniden denemelerini nasıl sınırlayabilirim?


14

Bir web klasörünü Nginx'in Auth_Basic modülü ile korudum. Sorun şu ki, işe yarayana kadar birkaç şifre deneyebiliriz (kaba kuvvet saldırıları). Başarısız yeniden deneme sayısını sınırlamanın bir yolu var mı?

Yanıtlar:


29

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 .


5

Bu çözüm / geçici çözümü başka hiçbir şeye vermediğine şaşırdım.

Nginx basic-auth ve htpasswdisteğ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.


2
bcryptEd şifreleri Nginx'in temel yetkilendirmesi ile kullanabiliyorsanız faydalı olabilir , ancak görünüşe göre kullanamazsınız .
keune

Denedim, benim için kesinlikle iyi çalışıyor. Şimdi üretimde kullanmak.
SColvin

@Keune dediği gibi ubuntu üzerinde vanilya ngix üzerinde çalışmıyor
Fabian Thommen

4
Bunun şifre girişimlerini sınırlayacağından bahsetmeye değer, ancak sadece sunucunuz pahalı karmaları hesaplamaktan aşırı yükleneceği için. Bir üretim ortamında, bu muhtemelen istediğiniz şey değildir.
Tomasz P. Szynalski

Sağlam ve kolay, evet. CPU kullanımına karşı DoS saldırılarına izin verir.
Rainer Rillke

1

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.


0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.