Apa itu Fail2ban? Fail2ban adalah sebuah Intrusion Prevention System alias IPS di sistem operasi berbasis Linux. Fail2ban memiliki fungsi untuk melindungi sebuah server dari Brute-Force Attack (percobaan login berulang-ulang) dengan beberapa cara, termasuk memantau log file (eg, /var/log/auth.log untuk SSH, /var/log/nginx/error.log untuk web server), kemudian jika ada banyak percobaan gagal dari 1 alamat IP dalam jangka waktu tertentu maka Fail2ban akan otomatis memblokir IP tersebut, dan pemblokiran biasanya dilakukan lewat rule Firewall (eg, UFW maupun Iptables).
Contoh kerja dari Fail2ban adalah jika ada orang mencoba login melalui SSH ke server Anda 20 kali gagal dalam 5 menit, maka Fail2ban akan mendeteksi pola ini di log, dan kemudian IP penyerang alias attacker akan diblokir selama jangka waktu misalnya 15 menit tidak bisa konek lagi ke SSH server.
Dengan demikian, Fail2ban memberikan manfaat melindungi server Anda dari upaya jahat brute-force login, mengurangi spam bot scanning di web server, serta bisa diterapkan ke banyak service seperti SSH, web server Nginx/Apache, Postfix, Dovecot, dan lain sebagainya. Secara singkat Fail2ban merupakan “penjaga gerbang” yang baca log, lalu otomatis ban IP penyerang di tingkat firewall kalau ada upaya serangan brute-force.
Berikut panduan instalasi dan konfigurasi Fail2ban di sistem operasi Debian/Ubuntu. Untuk langkah-langkahnya sangat mudah, cukup ikuti panduan berikut ini. Namun, pastikan Anda memiliki hak akses root penuh agar dapat menjalankan semua command di bawah ini.
1.) Install Fail2ban
Di kedua distro baik itu Debian maupun Ubuntu, paket resmi Fail2ban sudah tersedia di repositori.
$ sudo apt update $ sudo apt install fail2ban -y
2.) Struktur Konfigurasi Fail2ban
File config bawaan terletak di /etc/fail2ban/jail.conf
Namun, jangan Anda edit langsung, silahkan custom confignya di /etc/fail2ban/jail.local atau /etc/fail2ban/jail.d/*.conf
Itu karena Fail2ban akan membaca file “jail.local” maupun file config di di direktori jail.d yang akan meng-override config defaultnya.
3.) Konfigurasi Dasar Fail2ban (/etc/fail2ban/jail.local)
Buat file baru dengan editor nano yang paling mudah:
$ sudo nano /etc/fail2ban/jail.local
Kemudian isikan sintaks atau variabel rule berikut ini, yang merupakan contoh aman untuk proteksi SSH dan web server Nginx, namun tetap bisa disesuaikan:
[DEFAULT] # Ban selama 15 menit bantime = 15m # Waktu window percobaan login (10 menit) findtime = 10m # Percobaan gagal maksimal sebelum ban maxretry = 5 # Gunakan UFW untuk block banaction = ufw # Catat log backend = systemd [sshd] enabled = true port = 59105 ; ganti dengan port SSH custom kamu logpath = %(sshd_log)s backend = systemd [nginx-http-auth] enabled = true [nginx-botsearch] enabled = true
CATATAN:
- banaction = ufw, maka Fail2ban akan otomatis menambahkan IP penyerang ke UFW block list.
- Kalau pakai iptables langsung (tanpa UFW), ganti banaction = iptables-multiport.
4.) Konfigurasi Tambahan (opsional)
Ini merupakan konfigurasi tambahan untuk melindungi web server Nginx dari 404 brute force attack, misalnya scan bot jahat.
Tambahkan file jail khusus:
$ sudo nano /etc/fail2ban/jail.d/nginx-404.conf
Isikan rule berikut ini:
[nginx-404] enabled = true port = http,https filter = nginx-404 logpath = /var/log/nginx/access.log maxretry = 10 findtime = 10m bantime = 1h
Lalu buat filter:
$ sudo nano /etc/fail2ban/filter.d/nginx-404.conf
Dan paste rule di bawah ini:
[Definition] failregex = ^ - .* "(GET|POST).*" 404 ignoreregex =
5.) Rule Advanced untuk Apache Proxy + PHP-FPM + Node.js & PM2 Manager
Buat file jail.local dengan editor nano seperti di atas dan kemudian pastekan rule berikut ini:
$ nano /etc/fail2ban/jail.local
[DEFAULT] # Email admin (opsional kalau mau dapat notifikasi) destemail = [email protected] sender = [email protected] mta = sendmail # Lama ban (detik) atau 30 menit bantime = 1800 bantime.increment = true bantime.factor = 2 bantime.formula = bantime * (factor ** (failures / 2)) # Waktu pencatatan percobaan (detik) atau 10 menit findtime = 600 # Jumlah percobaan gagal sebelum diban maxretry = 5 # Action default (drop iptables) backend = systemd banaction = ufw action = %(action_)s [Definition] allowipv6 = false # --------- JAILS --------- [sshd] enabled = true port = 59105 ; ganti dengan port SSH custom kamu logpath = %(sshd_log)s backend = systemd [apache-auth] enabled = true [apache-badbots] enabled = true [apache-noscript] enabled = true [apache-overflows] enabled = true [apache-nohome] enabled = true [apache-botsearch] enabled = true # (Opsional) Proteksi DoS/scan sederhana [apache-fakegooglebot] enabled = true [apache-modsecurity] enabled = false # Aktifkan kalau ada mod_security [node-4xx-apache] enabled = true filter = apache-4xx-hard logpath = /var/log/apache2/server_access.log backend = auto findtime = 600 ; 10 menit maxretry = 15 ; mis. >15 kesalahan 4xx dlm 10 menit bantime = 3600 ; ban 1 jam [node-4xx-apache-ip] enabled = true filter = apache-4xx-hard logpath = /var/log/apache2/server_ip_access.log backend = auto findtime = 600 maxretry = 15 bantime = 3600
6.) Restart & Enable Fail2ban Service
Jika config di atas sudah Anda terapkan di sistem Debian/Ubuntu Anda, kemudian jangan lupa untuk mengkatifkan dan restart layanan Fail2ban di server Anda dengan command berikut ini:
$ sudo systemctl enable fail2ban $ sudo systemctl restart fail2ban
7) Verifikasi Service Fail2ban
Kita dapat memverifikasi layanan status Fail2ban dengan perintah-perintah berikut ini:
# Cek Status global: $ sudo systemctl status fail2ban $ sudo fail2ban-client status # Cek Status Jail SSH: $ sudo fail2ban-client status sshd # Lihat Daftar Alamat IP yang Terban: $ sudo fail2ban-client banned # Unban Alamat IP Tertentu: $ sudo fail2ban-client set sshd unbanip 1.2.3.4
KESIMPULAN:
- Kustom Port SSH yakni 59105 aman dan jika ada upaya brute force maka IP penyerang langsung diban.
- Nginx Web Server (login HTTP basic, scanning bot, 404 flood) aman.
- Dengan UFW Integration, dimana IP penyerang otomatis diblokir di tingkat firewall.
Referensi: AI





























