Fail2ban melawan brute force kata sandi
Cara memasang dan mengonfigurasi Fail2ban: memblokir brute force SSH dan formulir web, memasukkan alamat Anda sendiri ke whitelist, memeriksa bahwa itu berfungsi, dan membuka blokir diri sendiri.
Diperbarui 23 Agustus 2026
Fail2ban membaca log, menghitung percobaan login yang gagal dari satu alamat, lalu memblokirnya sementara dengan aturan firewall. Ini tidak menggantikan login berbasis kunci, tetapi menghilangkan sebagian besar lalu lintas brute-force di latar belakang dan mengurangi beban pada log Anda.
Instalasi dan konfigurasi dasar
apt install -y fail2ban
Gunakan file Anda sendiri, /etc/fail2ban/jail.local — perubahan pada jail.conf akan ditimpa oleh pembaruan:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.5
banaction = ufw
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 24h
systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd
Masukkan alamat rumah atau kantor Anda ke ignoreip — ini adalah jaminan Anda agar tidak memblokir diri sendiri. Jika alamat Anda berubah, konsol di panel pada /hosting/vds/m/<id> tetap menjadi jaring pengaman Anda: konsol ini berfungsi terlepas dari jaringan dan aturan.
banaction harus sesuai dengan firewall Anda: ufw untuk ufw, nftables-multiport untuk nftables.
Di mana memeriksa hasilnya
fail2ban-client status sshd
tail -f /var/log/fail2ban.log
journalctl -u fail2ban -n 50
Status menampilkan jumlah percobaan yang gagal dan daftar alamat yang diblokir. Pada alamat publik, jumlah harian dalam ratusan adalah hal normal, bukan tanda serangan yang tertarget.
Buka blokir sebuah alamat (termasuk milik Anda sendiri):
fail2ban-client set sshd unbanip 203.0.113.5
Perlindungan di luar SSH
Fail2ban dapat bekerja dengan log apa pun yang menampilkan percobaan yang gagal.
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log
[postfix-sasl]
enabled = true
Untuk aplikasi Anda sendiri, Anda memerlukan filter — sebuah file di /etc/fail2ban/filter.d/ dengan ekspresi reguler yang alamatnya ditandai sebagai <HOST>:
[Definition]
failregex = ^.*login failed.*ip=<HOST>.*$
ignoreregex =
Uji ekspresi tersebut terhadap log yang nyata:
fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf
Perintah ini menunjukkan berapa banyak baris yang cocok. Nol kecocokan berarti aturannya salah — dan perlindungan yang gagal secara diam-diam lebih buruk daripada tidak ada perlindungan sama sekali.
Kesalahan umum
| Kesalahan | Akibat | Solusi |
|---|---|---|
Mengubah jail.conf | Hilang saat pembaruan | Tulis ke jail.local |
Alamat Anda tidak ada di ignoreip | Suatu hari Anda akan memblokir diri sendiri | Tambahkan, atau sambungkan melalui konsol panel |
banaction tidak sesuai dengan firewall Anda | Blokir tidak diterapkan | Sesuaikan dengan ufw atau nftables |
| Filter tidak cocok dengan format log | Diam alih-alih perlindungan | Periksa dengan fail2ban-regex |
| Layanan tidak dapat membaca log systemd | Status kosong | Setel backend = systemd |
Uji secara nyata: sengaja masukkan kata sandi yang salah sebanyak jumlah yang diperlukan dari alamat luar dan pastikan alamat itu masuk ke daftar yang diblokir. Fail2ban yang tidak dikonfigurasi menciptakan rasa aman yang palsu.
Lengkapi dengan pembatasan laju koneksi di firewall itu sendiri — ufw limit 22/tcp.