Server yang terbuka ke internet akan menerima percobaan login SSH setiap hari. Sebagian besar otomatis: bot mencoba daftar kata sandi umum, ribuan kali. fail2ban membaca log, mengenali pola kegagalan, lalu memblokir alamat IP tersebut untuk sementara.

Ringkasan singkat
- Ubah setelan di
jail.local, bukanjail.conf. - Lima gagal dalam 10 menit = blokir 1 jam.
- Isi
ignoreipdengan IP tetapmu. backend = systemduntuk Ubuntu 24.04.
Panduan ini memasang fail2ban di Ubuntu Server, mengatur lama blokir, dan cara membatalkan blokir saat kamu sendiri terkunci.
Yang perlu disiapkan
- Ubuntu Server 24.04 dengan akses
sudo. - SSH aktif dan log di
/var/log/auth.log. - IP publik atau IP kantor yang ingin dikecualikan.
1. Pasang fail2ban
sudo apt update
sudo apt install -y fail2ban
Konfigurasi bawaan berada di /etc/fail2ban/jail.conf. Berkas itu jangan diedit langsung karena akan tertimpa saat pembaruan paket. Semua perubahan ditulis di jail.local.
2. Buat jail.local
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 IP_KANTOR_KAMU
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd
Artinya: lima kegagalan dalam sepuluh menit dari satu IP akan memicu blokir selama satu jam. backend = systemd dipakai karena Ubuntu 24.04 menulis log SSH ke journal, bukan hanya ke berkas.
3. Nyalakan dan periksa
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
sudo fail2ban-client status
sudo fail2ban-client status sshd
Status sshd menampilkan jumlah kegagalan saat ini dan daftar IP yang sedang diblokir. Kalau jail tidak muncul, berarti namanya salah atau berkas konfigurasi tidak terbaca.
4. Uji tanpa menunggu bot
Dari komputer lain, coba login dengan kata sandi salah beberapa kali, lalu lihat hasilnya:
sudo fail2ban-client status sshd
Alternatif yang lebih aman: uji filter terhadap log yang sudah ada.
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Bagian Failregex harus menemukan kecocokan. Kalau nol, format log di sistemmu berbeda dari filter bawaan.
5. Membatalkan blokir
sudo fail2ban-client set sshd unbanip 203.0.113.10
Kalau kamu sendiri terkunci, masuk lewat konsol darurat penyedia VPS atau VirtualBox, lalu jalankan perintah di atas. Inilah alasan ignoreip sebaiknya diisi IP tetap yang kamu pakai mengelola server.
6. Bersama UFW
fail2ban menulis aturannya sendiri ke iptables, jadi tetap bekerja meski UFW aktif. Jangan mencoba "menyatukan" keduanya dengan mematikan UFW: UFW mengatur port apa yang terbuka, fail2ban mengatur siapa yang diblokir sementara. Dua lapisan berbeda.
Batasi juga percobaan koneksi di level UFW sebagai lapisan tambahan:
sudo ufw limit ssh
7. Merawat daftar blokir
sudo fail2ban-client get sshd banip
sudo fail2ban-client get sshd ignoreip
Blokir sementara lebih baik daripada permanen: alamat IP dinamis bisa berpindah tangan, dan memblokir permanen berisiko menutup akses pengguna sah di kemudian hari.
8. Jail untuk Nginx
Percobaan login ke panel admin juga bisa dibatasi dengan jail bawaan:
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
Jail ini hanya bekerja kalau log Nginx benar-benar mencatat kegagalan autentikasi (user ... was not found atau password mismatch). Kalau log-nya bersih, tidak ada yang bisa diblokir — itu bukan kesalahan fail2ban.
9. Menghadapi serangan lambat
Bot yang pintar mencoba satu kali per jam. Untuk pola seperti itu, rentangkan jendela pengamatan:
findtime = 1d
maxretry = 3
Konsekuensinya, pengguna sah yang salah mengetik tiga kali dalam sehari juga ikut terblokir. Di sinilah ignoreip berperan: masukkan IP kantor atau IP tetapmu agar tidak pernah terkena aturan ini.
10. Membaca log fail2ban
sudo tail -f /var/log/fail2ban.log
sudo fail2ban-client -d | head -20
Log mencatat setiap ban dan unban beserta nama jail. -d mencetak konfigurasi efektif setelah semua berkas digabung, cara tercepat memastikan nilai maxretry yang benar-benar berlaku — bukan yang kamu kira sudah diubah.
Masalah yang sering muncul
| Gejala | Penyebab | Solusi |
|---|---|---|
| Jail sshd tidak muncul | Nama jail salah atau file tidak terbaca | fail2ban-client -d untuk melihat konfigurasi efektif |
| Tidak ada IP yang pernah diblokir | Log tidak terbaca | Cek backend = systemd dan journalctl -u ssh |
| Kamu ikut terblokir | IP tidak masuk ignoreip | Unban lewat konsol darurat, lalu perbaiki whitelist |
| Blokir tidak berpengaruh | fail2ban tidak berjalan | systemctl status fail2ban, cek log /var/log/fail2ban.log |
| Konfigurasi hilang setelah upgrade | Mengedit jail.conf | Pindahkan semua perubahan ke jail.local |
Pertanyaan yang sering diajukan
Apakah fail2ban menggantikan kunci SSH?
Tidak. Kunci SSH menghilangkan kata sandi sebagai faktor; fail2ban mengurangi jumlah percobaan. Pakai keduanya.
Berapa lama sebaiknya bantime?
Satu jam sudah cukup untuk menghentikan bot. Untuk serangan berulang, 24 jam masuk akal. Hindari permanen.
Apakah fail2ban membebani server?
Hampir tidak. Ia membaca log secara bertahap dan menulis satu aturan firewall saat memblokir.
Bisa memblokir percobaan ke layanan lain?
Bisa, misalnya Nginx atau layanan mail, dengan mengaktifkan jail yang sesuai dan memastikan format log cocok.
Baca juga:
0 comments:
Post a Comment