Cara install dan Konfigurasi Fail2ban

Panduan cara install dan konfigurasi Fail2ban di Linux. Firewall dan Fail2ban sangat direkomendasikan untuk meningkatkan keamanan server.

Cara kerjanya siapa saja (IP) yang mencoba mengakses ke server akan diblokir apabila terindikasi flooding dan masalah autentikasi, jika melebihi batas percobaan (maxretry) yang telah ditetapkan di dalam aturan yang telah dibuat. Berikut tutorial.

Install Fail2ban

Untuk CentOS

yum install epel-release fail2ban -y

Untuk Debian/Ubuntu

apt install fail2ban

Start Fail2ban

systemctl start fail2ban
systemctl enable fail2ban

Konfigurasi Fail2ban

Buat konfigurasi berdasarkan aturan dasar fail2ban yang telah ada

cp /etc/fail2band/fail2ban.conf /etc/fail2band/fail2ban.local

Kemudian

nano /etc/fail2band/fail2ban.local

Edit LogLevel menjadi ERROR

Membuat aturan, mencontoh dari jail.conf

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Di dalam file jail.local tambahkan baris berikut untuk mengaktifkan aturan

nano /etc/fail2ban/jail.local
Perhatian: Ambil yang perlu saja, misalnya kalau pakai Nginx, aturan Apachenya tidak perlu.

Aktifkan aturan untuk proteksi SSH

# Block yang mencoba login gagal SSH sebanyak 3 untuk waktu 10 menit (600 - sec.)
[ssh]
enable = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
ignoreip = 127.0.0.1

Aktifkan aturan untuk Apache

Kalau Debian dan Ubuntu logpathnya /var/log/apache2/, berhubung saya pakai CentOS jadi /var/log/httpd, silahkan disesuaikan.

[apache]
enable = true
port = http, https
filter = apache-auth
logpath = /var/log/httpd/error.log
maxretry = 5
bantime = 600

[apache-overflows]
enable = true
port = http, https
filter = apache-overflows
logpath = /var/log/httpd/error.log
maxretry = 5
bantime = 600

[apache-noscript]
enable = true
port = http, https
filter = apache-noscript
logpath = /var/log/httpd/error.log
maxretry = 5
bantime = 600

[apache-badbots]
enable = true
port = http, https
filter = apache-badbots
logpath = /var/log/httpd/error.log
maxretry = 5
bantime = 600

Aktifkan aturan untuk Nginx

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 600

[nginx-noscript]
enabled = true
filter = nginx-noscript
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 600

[nginx-badbots]
enabled = true
filter = nginx-badbots
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 600

[nginx-noproxy]
enabled = true
filter = nginx-noproxy
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 600

[nginx-badbots]
enabled = true
filter = nginx-badbots
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 60

Untuk Nginx, selain nginx-http-auth file konfigurasi Nginx lainnya belum ada, maka harus dibuat terlebih dahulu di dalam direktori /etc/fail2ban/filter.d

Konfigurasi nginx-noscript

nano /etc/fail2ban/filter.d/nginx-noscript.conf

Isi baris berikut

[Definition]
failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)
ignoreregex =

Konfigurasi nginx-noproxy

nano /etc/fail2ban/filter.d/nginx-noproxy.conf

Isi baris berikut

[Definition]
failregex = ^<HOST> -.*GET http.*
ignoreregex =

File konfigurasi untuk nginx-badbots, bisa mencontoh dari apache-badbots

cp /etc/fail2ban/filter.d/apache-badbots.conf /etc/fail2ban/filter.d/nginx-badbots.conf

Aktifkan aturan untuk WordPress

Buat filenya untuk menyimpan log

mkdir-p /var/www/html/namadomain.com && touch /var/www/html/namadomain.com/access.log

Tambahkan baris berikut ke file /etc/fail2ban/jail.local

[wordpress]
enabled = true
filter = wordpress
port = http,https
logpath = /var/www/html/namadomian.com/access.log
maxretry = 5
bantime = 600

File konfigurasi Fail2ban untuk [wordpress]

nano /etc/fail2ban/filter.d/wordpress.conf

Isi baris berikut

[Definition]
failregex = <HOST> - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 - \d{4}\] "Post /wp-login.php HTTP/1.1" 200
ignoreregex =

Simpan.

Catatan:

  • Di semua aturan bisa ditambahkan pengecualian, misalnya IP kita sendiri (ignnoreip = IPnya)
  • Semua konfigurasi aturan umum Fail2ban sebenarnya sudah siap, hanya saja belum diaktifkan, bisa dicek di direktori /etc/fail2ban/filter.d
  • Tambahan: HTTP DOS dan Nginx DOS

Restart Fail2ban

systemctl restart fail2ban

Cek status Fail2ban

fail2ban-client status

Daftar perintahnya bisa dilihat di man fail2ban-client

Cek list banned IP

Misalnya melihat IP apa saja yang diblokir di SSH

fail2ban-client status ssh

Cek Firewall yang dibuat Fail2ban

iptables -L

Cara Unban client Fail2ban

Misalnya ada user yang mencoba login SSH dan masuk list banned

fail2ban-client set ssh unbanip IP-CLIENT

Stop Fail2ban

systemctl stop fail2ban

Selesai, semoga bermanfaat.

Butuh setup firewall dan Fail2ban? kontak 0812-3500-8433 (WA)

Dokumentasi detailnya cek: fail2ban.org

Leave a Reply

Your email address will not be published. Required fields are marked *