Skip to main content
  1. Posts/

Blokir Brute Force dengan Fail2Ban

·3 mins·
Table of Contents

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

Related