Sınırsız bir giriş sayfası, ağın izin verdiği hızda denenebilir. Bir sınır zayıf bir parolayı güçlü yapmaz; tahmin etmeyi, kimsenin bekleyemeyeceği kadar uzun sürdürür - ki uygulamada ikisi aynı kapıya çıkar.

Web sunucusunda

limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

location = /wp-login.php {
    limit_req zone=login burst=3 nodelay;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Dakikada beş, üçlük bir taşma payıyla: kimse bundan hızlı yazmaz ve bir makine olduğu yerde durur. Bunu uygulamada değil sunucuda yapın - burada reddedilen bir istek PHP'ye hiç ulaşmaz.

Dayatmadan önce izleyin

grep -c "limiting requests" /var/log/nginx/error.log
Fazla düşük ayarlanmış bir sınır gerçek insanları dışarıda bırakır ve onlar bunu bildirmez - çekip giderler. Sıkmadan önce cömert bir oranla kaydı bir hafta izleyin.

Israrla yineleyenleri yasaklayın

# /etc/fail2ban/jail.local
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 3600

Bir sınırın yapmadıkları

  • Her biri iki kez deneyen bin ayrı adresten gelen dağıtık bir denemeyi durdurmaz.
  • Parola zaten sızmışsa da işe yaramaz - saldırganın tek bir denemesi yeter.
İki aşamalı doğrulama hız sınırlamayı neredeyse gereksiz kılar, hız sınırlama ise iki aşamalı doğrulamayı gereksiz kılmaz. Yalnızca birini yapacaksanız iki aşamalı doğrulamayı yapın.