Blokir Brute Force dengan Fail2Ban

Fail2Ban adalah framework Intrusion Prevention System (IPS) open-source yang digunakan untuk melindungi server Linux dari serangan seperti brute-force atau upaya akses tidak sah lainnya yang dilakukan berulang kali dari alamat IP yang sama.
Fail2Ban bekerja dengan memantau file log sistem seperti log SSH, FTP, atau web server untuk mendeteksi pola aktivitas mencurigakan. Jika ditemukan percobaan gagal melebihi batas tertentu, Fail2Ban akan secara otomatis menjalankan aturan firewall (seperti iptables, nftables, atau firewalld) untuk memblokir alamat IP tersebut sementara waktu.
Prasyarat
- Server Linux (Ubuntu / Debian / CentOS / RHEL)
- Akses sudo atau root
- Fail2Ban sudah terpasang
Instalasi:
# Debian / Ubuntu sudo apt install fail2ban # CentOS / RHEL sudo dnf install fail2ban
Step-by-step instructions
Buat File Konfigurasi Lokal
Agar konfigurasi tidak tertimpa saat update paket:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Edit File Konfigurasi
sudo nano /etc/fail2ban/jail.local
Atur Parameter Dasar di Bagian [DEFAULT]
[DEFAULT] ignoreip = 127.0.0.1/8 192.168.1.0/24 bantime = 3600 findtime = 600 maxretry = 5 backend = auto
Keterangan:
- ignoreip → IP/subnet yang tidak akan diblokir
- bantime → Lama pemblokiran (detik)
- findtime → Rentang waktu penghitungan percobaan gagal
- maxretry → Maksimal percobaan gagal sebelum diblokir
- backend → Metode pembacaan log
Aktifkan Jail SSH
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 5 bantime = 3600
Untuk CentOS / RHEL, gunakan:
logpath = /var/log/secure
Tambahkan Jail untuk Apache (Opsional)
[apache-auth] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/error.log maxretry = 5 bantime = 1800
Sesuaikan lokasi log jika berbeda.
Aktifkan Jail Recidive
Digunakan untuk memblokir lebih lama pada alamat IP yang berulang kali terkena ban.
[recidive] enabled = true filter = recidive logpath = /var/log/fail2ban.log bantime = 1w findtime = 1d maxretry = 3
Restart Service Fail2Ban
sudo systemctl restart fail2ban
Atau Anda bisa reload konfigurasi tanpa restart service dengan perintah berikut
sudo fail2ban-client reload
Verifikasi Status
Melihat semua jail aktif
sudo fail2ban-client status
Melihat status jail SSH
sudo fail2ban-client status sshd
Manajemen IP
Membuka blokir IP tertentu
sudo fail2ban-client set sshd unbanip <IP_ADDRESS>
Memblokir IP secara manual
sudo fail2ban-client set sshd banip <IP_ADDRESS>
Pengujian Filter
Untuk menguji apakah filter Fail2Ban membaca log dengan benar:
sudo fail2ban-regex -v --print-all-missed /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Useful commands
- Cek daftar IP yang sudah diblokir fail2ban
for jail in $(fail2ban-client status | grep 'Jail list' | cut -d: -f2 | tr ',' '\n' | tr -d ' '); do echo "== Jail: $jail =="; fail2ban-client status "$jail" | grep 'Banned IP list'; echo; done
- Buka semua IP yang diblokir pada filter fail2ban:
for jail in $(fail2ban-client status | grep 'Jail list:' | cut -d: -f2 | tr -d ' ' | tr ',' ' '); do echo "Checking jail: $jail" banned_ips=$(fail2ban-client status "$jail" | grep 'Banned IP list' | cut -d: -f2) for ip in $banned_ips; do fail2ban-client set "$jail" unbanip "$ip" && echo "→ Unbanned $ip from $jail" done done
- Buka blokir khusus jail tertentu
for ip in $(sudo fail2ban-client status sshd | grep 'Banned IP list:' | awk -F': ' '{print $2}'); do sudo fail2ban-client set sshd unbanip $ip done
- Buka blokir khusus IP tertentu pada semua jail
IP="182.8.131.150" for jail in $(fail2ban-client status | grep 'Jail list:' | cut -d: -f2 | tr -d ' ' | tr ',' ' '); do echo "Checking jail: $jail" if fail2ban-client status "$jail" | grep -q "$IP"; then fail2ban-client set "$jail" unbanip "$IP" && echo "→ Unbanned $IP from $jail" else echo "No ban for $IP in $jail" fi done


