LINUXSEC

Menangkal Serangan Brute Force dengan Fail2ban

Serangan bruteforce termasuk serangan yang cukup berbahaya apalagi jika attacker dibiarkan bebas melakukan percobaan login hingga ribuan kali. Nah kali ini saya akan menulis tutorial bagaimana menangkal bruteforce menggunakan Fail2ban. Cara kerjanya, fail2ban akan “mengatur” rules di iptables dimana jika sebuah serangan bruteforce terjadi, ip dari penyerang akan diblock permanen atau hingga waktu yang ditentukan. Untuk tutorial ini saya mencoba mengamankan service pada ssh login dan juga login wordpress.

Pada tutorial ini saya menggunakan webserver nginx dengan sistem operasi Ubuntu 16.10 . Untuk sistem operasi lain mirip mirip jadi silahkan mengikuti saja.

Oke pertama kita install fail2ban.

sudo apt update
sudo apt install fail2ban

Sekarang kita konfigurasi fail2ban nya terlebih dahulu.

sudo nano /etc/fail2ban/jail.local

Ini pengaturan default saya :

[DEFAULT]  
ignoreip = 127.0.0.1/8  
ignorecommand =  
bantime  = 23600  
findtime  = 100  
maxretry = 2  
enabled = false

bantime menunjukkan berapa lama attacker akan dibanned. Satuannya adalah detik. Jika ingin melakukan banned permanen, isi value nya menjadi “-1” .

maxretry menunjukkan berapa kali percobaan gagal yang diijinkan. disini saya membuat rule jika dua kali gagal login maka ip akan di block.

enabled = false . Yup, disini memang defaultnya service yang dimanage oleh fail2ban hanya ssh. Dan memang lebih baik jangan diganti. Jika ingin menghidupkan service, edit saja di service yang ingin dihidupkan dengan value true.

findtime disini menunjukkan batasan waktu percobaan gagal yang dibolehkan sebelum dibanned. Dari contoh saya diatas, maksudnya jika ada percobaan gagal dua kali dalam kurun 100 detik, maka ip akan dibanned selama 23600 detik.

Untuk setingan lain silahkan sesuaikan sendiri ya, panjang soalnya. Atau kalau ada yang bingung bisa langsung tanya tanya di facebook saya yuyudhn1337 .

Oke kita lanjut ke service yang ingin dipasang fail2ban.

Disini saya akan memasang proteksi fail2ban di service login ssh. Dimana memang saat ini banyak hacker yang melakukan bruteforce pada port ssh.

[sshd]  
enabled = true  
port    = ssh  
action = iptables-multiport[name="bannedssh", port="80,443,22,48"]  
logpath = %(sshd_log)s  
maxretry = 3

Disini saya menggunakan bantime, maxretry dan findtime dari default yang sudah diatur diatas. Kalau kalian ingin menggunakan value berbeda bisa ditambahkan sendiri dibawahnya. Untuk port, disini “ssh” maksudnya adalah port default yang berada di port 22. Jika kalian menggunakan port lain untuk service ssh, tinggal diganti saja. Misal kalian login ssh di port 1337, maka isikan port = 1337 .

Oke sudah paham? Disini selain melindungi login ssh saya juga ingin memproteksi login wordpress dengan fail2ban.

Pertama install fail2ban plugins di WordPress kalian.

Oke jika sudah terinstall, copy rule yang dibuat plugin ini ke direktori filter fail2ban. Disini saya menggunakan hard filter.

sudo cp /path/to/wordpress/wp-content/plugins/wp-fail2ban/filters.d/wordpress-hard.conf /etc/fail2ban/filter.d/

Sekarang kita edit lagi jail.local nya.

sudo nano /etc/fail2ban/jail.local

Lalu tambahkan di paling bawah :

[wordpress-hard]  
enabled = true  
port = http, https  
filter = wordpress-hard  
action = iptables-multiport[name="fuck-lamers", port="http,https"]  
logpath = /var/log/auth.log  
maxretry = 3

Nama wordpress-hard disesuaikan dengan nama filter yang ada di folder filter.d . Jadi jangan ngasal. Untuk rule lain sudah saya jelaskan diatas jadi silahkan dipahami sendiri atau disesuaikan sendiri.

Oke, sekarang sedikit tweaking di iptables nya.

Matikan dulu fail2ban .

sudo service fail2ban stop

Lalu install iptables-persistent untuk menyimpan rule yang kita buat sehingga tersimpan meski server di reboot.

sudo apt install iptables-persistent

Berhubung tidak banyak service yang saya pakai di server, saya hanya mengijinkan port ssh, mail, http, dan https yang terbuka. Ini adalah rule iptables yang saya pakai.

sudo iptables -A INPUT -i lo -j ACCEPT  
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT  
sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT  
sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT  
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT  
sudo iptables -A INPUT -j DROP

Lalu cek menggunakan perintah

sudo iptables -S

Contoh putput :

-A INPUT -i lo -j ACCEPT  
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT  
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT  
-A INPUT -j DROP

Kalo dirasa sudah oke kita save konfigurasi iptables nya.

sudo dpkg-reconfigure iptables-persistent

Sekarang hidupkan lagi fail2ban nya.

sudo service fail2ban start

Cek lagi iptables nya.

sudo iptables -S

Output :

-A INPUT -p tcp -m multiport --dports 80,443 -j f2b-fuck-lamers  
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd  
-A INPUT -i lo -j ACCEPT  
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT  
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT  
-A INPUT -j DROP  
-A f2b-fuck-lamers -j RETURN  
-A f2b-sshd -j RETURN

Untuk melihat service fail2ban yang berjalan bisa di cek menggunakan perintah

sudo fail2ban-client status

Disini saya akan mencoba melakukan bruteforce pada service login wordpress dan melihat apakan fain2ban bekerja.

hasil dari /var/log/auth.log

hasil dari /var/log/fail2ban.log

Sekarang kita cek kembali rule iptables nya.

Yup, fain2ban bekerja dengan baik untuk mengamankan server yang kita kelola.

Lalu bagaimana jika kita ingin meng-unbanned ip yang di block oleh fain2ban?

Masukkan perintah :

fail2ban-client set jailname unbanip ipaddress

Contoh :

fail2ban-client set wordpress-hard unbanip 5.254.65.119

Oke sekian tutorial sederhana dari saya, jika ada yang ingin ditanyakan silahkan komentar . :)

Komentar

    Tinggalkan Komentar

    Silahkan tinggalkan komentar jika ada masukan, pertanyaan, kritik ataupun dukungan. Namun pastikan untuk berkomentar secara sopan.