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

  1. Ubuntu 22.04.2 LTS

  2. Fail2ban v0.11.2

  3. Nginx


Catatan lain

  1. Buat yang Cloudflare proxy, silahkan ikuti post sebelumnya agar server bisa mendapatkan IP dari user (bukan IP Cloudflare)

How To

  1. Buka server, gunakan tail -f /var/log/nginx/access.log. Lalu masuk login page aplikasi kamu, perhatikan endpoint mana yang di akses

    App Pertama, Proses Login di Halaman yang  Sama dengan Login Page (/login)

    App Pertama, Proses Login di Halaman yang Sama dengan Login Page (/login)

    App Kedua, Proses Login di Endpoint /validate

    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

  2. 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

  3. 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
    
  4. Reload fail2ban service service fail2ban reload. To make sure it work, use fail2ban-client status login-page

  5. Test dengan cara mencoba login selama 3 kali, harusnya IP kamu akan kena block oleh fail2ban


Sumber:

  1. Gist/github fail2ban – stop HTTP(S) route abuse/brute forcing