Halaman masuk tanpa batas bisa dicoba secepat yang diizinkan jaringan. Sebuah batas tidak membuat kata sandi lemah menjadi kuat; ia membuat menebaknya makan waktu lebih lama daripada kesabaran siapa pun - yang dalam praktiknya sama saja.
Di server web
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;
}
Lima semenit dengan luapan tiga: tak ada yang mengetik lebih cepat dari itu, dan sebuah mesin berhenti di tempat. Kerjakan ini di server, bukan di aplikasi - permintaan yang ditolak di sini tak pernah sampai ke PHP sama sekali.
Amati dulu sebelum Anda memberlakukannya
grep -c "limiting requests" /var/log/nginx/error.log
Batas yang disetel terlalu rendah mengunci orang sungguhan di luar, dan mereka tidak melapor - mereka pergi. Amati catatannya seminggu dengan laju yang longgar sebelum mengetatkannya.
Larang yang berulang kali mengulang
# /etc/fail2ban/jail.local
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 3600
Apa yang tidak dikerjakan sebuah batas
- Ia tidak menghentikan percobaan tersebar dari seribu alamat yang masing-masing mencoba dua kali.
- Ia juga tak menolong kalau kata sandinya sudah bocor - penyerangnya cuma butuh satu percobaan.
Dua faktor membuat pembatasan laju nyaris tak diperlukan, sedangkan pembatasan laju tidak membuat dua faktor jadi tak diperlukan. Kalau hanya satu yang Anda kerjakan, kerjakan yang dua faktor.
