Melindungi akses server dengan Fail2ban
Namanya server yang online jelas bisa diakses dari seluruh dunia dan ini membuat celah keamanan dimana ada yang berusaha masuk lewat SSH dengan cara brute force password root atau akun lainnya yang ada. Berbahaya bukan? Walau kita sudah menggunakan password yang kuat tapi kalau tidak dicegah ya ada resiko jebol juga, dan proses brute force ini sendiri akan menggunakan resource VPSnya untuk validasi login. Jelas banyak ruginya. Karena itu jangan dibiarkan saja, dan cegah sebelum terlanjur menjadi musibah.
Nah… di Linux anda bisa memanfaatkan paket aplikasi fail2ban
untuk otomatis melakukan blokir sementara kalau ada usaha login yang gagal berulang kali atau sekalian saja permanen. Fail2ban sendiri memanfaatkan IPTables
untuk melakukan filter atau blokir akses, dan ini biasanya sudah terinstall secara default. Yang dilakukan sebenarnya menambahkan aturan baru sesuai kasus anda.
Ya seperti biasa langkah pertama jelas menginstallnya:
Debian/Ubuntu
apt-get install fail2ban
RHEL/CentOS/Fedora
yum install fail2ban
Setelah ini kita atur konfigurasi fail2ban, dan ini agak berbeda karena yang kita edit bukanlah file aslinya (jail.conf
) melainkan khusus untuk server tersebut (jail.local
). Tapi masih mirip dengan sumbernya, jadi mari dicopy dulu:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Kemudian didalamnya langsung cari bagian yang bernama Jail
:
nano /etc/fail2ban/jail.local
Minimal pastikan SSH terproteksi, dan secara default memang aktif tapi siapa tahu saja:
Debian/Ubuntu
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
RHEL/CentOS/Fedora
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sende[email protected]]
logpath = /var/log/secure
maxretry = 5
Untuk memahaminya dan supaya bisa membuat aturan baru saya jelaskan:
- [] – Yang didalam kurung kotak itu nama atau label aturannya.
- enabled – Nilainya bisa
true
untuk aktif ataufalse
untuk mati. - port – Port dimana aturan tersebut aktif dan bisa mereferensikan nama proses/protokol yang sudah dikenal.
- filter – Akan melakukan filter menggunakan aturan yang sudah ditetapkan, lokasinya ada di
/etc/fail2ban/filter.d/
dan cukup menggunakan nama filenya tanpa perlu ekstensinya (misal: sshd.conf). - action – Aksi apa yang perlu dilakukan saat ada kondisi yang memicu filternya. Bisa dicek di
/etc/fail2ban/action.d/
. - maxretry – Diberi kesempatan berapa kali mencoba sebelum diblokir.
logpath – Disimpan dimana catatan (log) aktivitas fail2ban, terutama kalau ada yang gagal.
Setiap kali anda memodifikasi konfigurasi fail2ban maka perlu direstart prosesnya:
service fail2ban restart
Anda bisa melihat sendiri ada aturan fail2ban di IPTables, eksekusi saja perintah:
iptables -L
Akan muncul informasi seperti berikut:
Chain INPUT (policy DROP)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
fail2ban-SSH tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:27868
DROP tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere multiport dports http,https
ACCEPT tcp -- anywhere anywhere multiport dports ftp,12000:12100
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere multiport dports smtp,ssmtp,submission,2525
ACCEPT tcp -- anywhere anywhere multiport dports pop3,pop3s
ACCEPT tcp -- anywhere anywhere multiport dports imap2,imaps
ACCEPT tcp -- anywhere anywhere multiport dports mysql,postgresql
ACCEPT tcp -- anywhere anywhere tcp dpt:8083
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- servernesia anywhere
ACCEPT all -- localhost.localdomain anywhere
Saya potong karena panjang, tapi saya yakin anda paham maksudnya. 🙂
Sudah, itu saja untuk dasar – dasarnya. 🙂 Tinggal belajar saja menerapkan aturan baru untuk kasus – kasus spesifik.
selesai masalah sebelumnya muncul masalah baru hehe 😀
mas chandra, saya instal fail2ban di centos 7, berikut langkah2nya:
saat eksekusi perintah
, muncul pesan error :
saya coba cek sesuai petunjuk error di atas:
muncul pesan berikut:
tambah mumet 😀
Lognya ga menjelaskan. 😀
Gagal karena gagal kalau dibaca. Nanti jadi PR saya mbak. 🙂
saya coba reboot vps dan cek :
statusnya aktif :
aneh 😀
Asyik mbak. Haha 😀
Cek kalau bekerja atau ga lewat lognya mbak:
tail /var/log/fail2ban.log
mas chandra, di bagian
iptables[name=SSH, port=ssh, protocol=tcp]
khususnya diport=ssh
, itu diganti sesuai port ssh kan ya (port=12345) atau dibiarkan seperti itu?trims.
Betul mbak.
Saya ada pikiran apa mungkin ada masalah fail2ban dengan firewalld ya, kan mbak pakai CentOS 7 sekarang. Sedangkan asumsi tutorial diatas masih pakai iptables.
Pagi mas,
Saya sudah menggunakan iptables hanya buka port tententu saja selain itu diblock, kalau saya install fail2ban apakah ada konflik nanti. Bisa tidak iptables dan fail2ban di kombinasi jadi berjalan bersamaan dengan tujuan berbeda, maksud saya fail2ban pencegahan tapi kalau orang akses berlebih langsung iptables untuk blok? Minta link kalau boleh soalnya link yang saya dapat baru config fail2ban atau iptables, belum nemu yang kominasi keduanya. Makasih sebelumnya mas
Tidak konflik mas. Fail2ban itu melengkapi iptables. Jadi kalau iptables bisa dikatakan pasif, aturan yang kita tuliskan yang dijalankan. Nah dengan fail2ban ada perilaku akses tertentu yang dianggap berbahaya (seperti contoh diatas brute force SSH) akan ditanggapi dengan blokir, jadi dinamis sifatnya.
Nah fail2ban menerapkan blokirnya dengan mengedit aturan iptables, ini terjadi secara otomatis.
Makasih mas chandra atas jawabannya, saya coba dulu nanti kalau error saya balik lagi.
Haha… 😀 Silahkan mas.
Om Chandra,
Saya pakai VPS Linode 2core 4GB, memory usage stabil di 3.50/3.80, swap 60M/512M, stabil mas walau ngga ada yang online, kalau ada yang online memory naik ke 3.7.
CPU sih 0%-0.7% kalau ngga ada yang online, cuma memory dan swap koq stabil di 3.5 ya? ngga bergerak gitu om.
Oiya kemarin malam tiba2 load average besar banget sampai database error, di reboot normal lagi.
Kalo di check di htop, fail2ban itu jalan terus setiap detik. Apakah itu wajar?
Situs wordpress, UV 5000/month, pakai bulletproof security dan loginizer pro, keyCDN dan cloudflare.
Apakah saya harus upgrade ke 8GB? mengingat mahal harganya agak berat nih. hahaha.
Btw, apakah admin orang yang sama dengan?
Pakai stack apa mas? Dibuat hosting web jenis apa kok trafik cuma 5000 UV per bulan bisa KO? Atau maksudnya 5000 UV per satu menit seperti di Google Analytics?
Kalau bisa, solusi keamanan WordPressnya, misal ada yang bukan PHP sebaiknya dipakai. Seperti menggabungkan fail2ban dengan login WordPress: https://servernesia.com/2619/melindungi-wordpress-fail2ban/
Soalnya proses PHP itu mahal dari segi resource yang terpakai, lebih baik langsung iptables dan fail2ban yang proses. Daripada PHP lagi yang blokir.
Sekalian pada halaman login diberi keamanan ganda pakai password: https://servernesia.com/3232/lindungi-situs-password-nginx/
fail2ban bekerja setiap detik itu wajar memang tugasnya, tapi kalau seringnya ini berarti perlu pengamanan lebih, ada yang berusaha bruteforce tampaknya.
Itu habis di CPU daripada RAM mestinya kalau sampai error.
Saran saya kalau sudah niat upgrade mending langsung ke dedicated, bisa sama mahalnya.
🙂
om chanda saya punya masalah dengan kombinasi antara fail2ban, csf dan firewalld, tiba2 setelah restart firewalld di centos 7 saya tidak bisa aktif kira2 apa masalahnya ya?
CSF punya fitur yang diberikan Fail2Ban mas. Dan firewalld perlu diuninstall juga. Jadi memang ketiga aplikasi itu tidak bisa digabung.
Kalau perlu salah satu, saya sarankan cukup CSF saja. Atau firewalld+fail2ban.
lebih bagus mana mas untuk hardeningnya antara firewalld+fail2ban dengan csf saja? sy juga pake maldet+rkhunter (mgkn perlu dibahas jg ini mas utk keoptimalan, kegunaan & live realtimenya hehe.
owh iya mas, ini lagi. kalau mas lagi butuh topik(mudah2an di acc), bahas load balancing mas, ada yang make haproxy, nginx, modproxy dll.
Lebih bagus pakai mana saja daripada tidak sama sekali mas.
Paling gampang ya pakai apapun firewall yang diinstall default dan ditambahkan fail2ban.
Kalau mau agak ketat, baru pertimbangkan CSF. Tapi lebih repot sedikit pemasangannya.
Halo, Mas Chandra.
Kalau loginnya pakai SSH Key apakah masih perlu fail2bain?
Terima kasih
mas chandra mau tanya dong.. fail2ban bisa cegah request berlebih engga ya terhadap server ?? atau bisa blok serangan dos diport 80 engga yaa ??.. untuk cegah dos di port 22 sudah terbukti si fail2ban bisa blokk
mohon pencerahannya
tanya donk, setelah sy setting fail2ban, keesokan harinya ada yg mencoba masuk ke server, sy cek pake
cat /var/log/auth.log
eh ketemu
sshd[569996]: Unable to negotiate with xxx.xx.xxx.68 port 45428: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 [preauth]
ada banyak yg lolos ya, tidak kena ban, padahal jail.local sshd hanya maxretry =3