All Newbie, Semua Tentang Ilmu

Recent

Cara Mengamankan SSH dengan fail2ban di Ubuntu Server

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.

Rak server di balik pintu kaca, ilustrasi pembatasan akses ke server
Foto: Jemimus, CC BY 2.0, via Wikimedia Commons

Ringkasan singkat

  • Ubah setelan di jail.local, bukan jail.conf.
  • Lima gagal dalam 10 menit = blokir 1 jam.
  • Isi ignoreip dengan IP tetapmu.
  • backend = systemd untuk 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.

Alur fail2ban: log SSH, filter, jail, dan blokir iptablesKlien / botSSH :22auth.logjournalfilter sshdpola regexjail sshdmaxretry=5iptablesDROP 1 jamkoneksi ditolak
Diagram: Alur fail2ban: log SSH, filter, jail, dan blokir iptables

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

GejalaPenyebabSolusi
Jail sshd tidak munculNama jail salah atau file tidak terbacafail2ban-client -d untuk melihat konfigurasi efektif
Tidak ada IP yang pernah diblokirLog tidak terbacaCek backend = systemd dan journalctl -u ssh
Kamu ikut terblokirIP tidak masuk ignoreipUnban lewat konsol darurat, lalu perbaiki whitelist
Blokir tidak berpengaruhfail2ban tidak berjalansystemctl status fail2ban, cek log /var/log/fail2ban.log
Konfigurasi hilang setelah upgradeMengedit jail.confPindahkan 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.





0 comments:

Post a Comment