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.
