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 fail2banStep-by-step instructions #
Buat File Konfigurasi Lokal #
Agar konfigurasi tidak tertimpa saat update paket:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localEdit File Konfigurasi #
sudo nano /etc/fail2ban/jail.localAtur Parameter Dasar di Bagian [DEFAULT]
#
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.0/24
bantime = 3600
findtime = 600
maxretry = 5
backend = autoKeterangan:
- 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 = 3600Untuk CentOS / RHEL, gunakan:
logpath = /var/log/secureTambahkan Jail untuk Apache (Opsional) #
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 1800Sesuaikan 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 = 3Restart Service Fail2Ban #
sudo systemctl restart fail2banAtau Anda bisa reload konfigurasi tanpa restart service dengan perintah berikut
sudo fail2ban-client reloadVerifikasi Status #
Melihat semua jail aktif #
sudo fail2ban-client statusMelihat status jail SSH #
sudo fail2ban-client status sshdManajemen 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.confUseful 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