
Halo, kalau kamu merasa tulisan saya ngebantu, kamu bisa ucapkan terima kasih lewat saweria .
If you feel this website help you, you can donate at saweria .
Pengantar
Kenapa harus setup fail2ban buat login page? Kalau kamu punya aplikasi lama atau tidak ada security setup sama sekali, tidak ada ruginya buat setup fail2ban di halaman login .
Settingannya simpel, jika user salah login selama 3 kali, maka IP nya akan di block.
Fail2ban ini tidak hanya bisa digunakan untuk setup di login page, bisa juga digunakan sebagai tambahan dari botblocker , bila ada orang iseng hit non exist/forbidden endpoint selama beberapa kali, maka IP user iseng itu akan di block oleh fail2ban
Tools yang Digunakan
-
Ubuntu 22.04.2 LTS
-
Fail2ban v0.11.2
-
Nginx
Catatan lain
- Buat yang Cloudflare proxy, silahkan ikuti post sebelumnya agar server bisa mendapatkan IP dari user (bukan IP Cloudflare)
How To
-
Buka server, gunakan
tail -f /var/log/nginx/access.log
. Lalu masuk login page aplikasi kamu, perhatikan endpoint mana yang di aksesApp Pertama, Proses Login di Halaman yang Sama dengan Login Page (/login)
App Kedua, Proses Login di Endpoint /validate
Bila diperhatikan app pertama memberi feedback error 401 (Unauthorized) dan yang kedua [302 (found but move temporary)]((https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) . Baiknya adalah meminta programmer untuk memberi error 401 semua di login page agar pesan lebih jelas/sama
-
Buat 1 file baru di
/etc/fail2ban/filter.d/login-page.conf
, isi dengan[Definition] failregex = ^<HOST> .* "POST /login ^<HOST> .* "POST /validate ignoreregex =
atau kamu bisa buat 2 file terpisah untuk 2 aplikasi, misal
/etc/fail2ban/filter.d/login-page-laravel.conf
dan/etc/fail2ban/filter.d/login-page-codeigniter.conf
-
Buka file
/etc/fail2ban/jail.local
, tambahkan[login-page] enabled = true filter = login-page action = iptables-multiport[name=NoAuthFailures, port="http,https"] #to add new log, add new line # or you can use /var/log/nginx/access*.log logpath = /var/log/nginx/wordpress/access.log /var/log/nginx/access.log banTime = 3600 #error attempt at 180 second findtime = 180 maxRetry = 3
-
Reload fail2ban service
service fail2ban reload
. To make sure it work, usefail2ban-client status login-page
-
Test dengan cara mencoba login selama 3 kali, harusnya IP kamu akan kena block oleh fail2ban
Sumber: