TUTORIAL FAIL2BAN PADA DEBIAN 13

Melindungi Apache dari Brute Force, Bot, Scanning, dan HTTP Flood

Alur kerja sederhana :

Instalasi :
su -
apt update
apt install fail2ban nftables -y

Aktifkan Fail2ban agar berjalan sekarang dan otomatis ketika server boot:

systemctl enable --now fail2ban

Periksa status:

systemctl status fail2ban --no-pager

Kondisi yang diharapkan adalah service berstatus:

Active: active (running)
Pastikan APache mencatat log

Fail2ban bergantung pada log. Pastikan file log Apache tersedia:

ls -lh /var/log/apache2/

File yang umum antara lain:

  • /var/log/apache2/access.log
  • /var/log/apache2/error.log
  • /var/log/apache2/other_vhosts_access.log

Pantau access log secara real-time:

tail -f /var/log/apache2/access.log

Contoh baris log:

103.10.20.30 - - [08/Sep/2026:10:10:22 +0700] "GET /index.php HTTP/1.1" 200 5812
Prinsip konfigurasi fail2ban

Hindari mengubah /etc/fail2ban/jail.conf secara langsung. Simpan kustomisasi di jail.local atau di direktori /etc/fail2ban/jail.d/. Pada tutorial ini digunakan:

/etc/fail2ban/jail.d/apache.local
Aktifkan jail apache bawaan

Buat file konfigurasi:

nano /etc/fail2ban/jail.d/apache.local

Contoh baseline:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

bantime.increment = true
bantime.factor = 2
bantime.maxtime = 1d

banaction = nftables

[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/*error.log
maxretry = 5

[apache-badbots]
enabled = true
port = http,https
logpath = /var/log/apache2/*access.log
maxretry = 1
bantime = 24h

[apache-botsearch]
enabled = true
port = http,https
logpath = /var/log/apache2/*error.log
maxretry = 2

[apache-noscript]
enabled = true
port = http,https
logpath = /var/log/apache2/*error.log
maxretry = 3

[apache-overflows]
enabled = true
port = http,https
logpath = /var/log/apache2/*error.log
maxretry = 2
Membuat filter http flood

Untuk menghitung request HTTP dari alamat IP yang sama, buat filter khusus:

nano /etc/fail2ban/filter.d/apache-rate-limit.conf
[Definition]
failregex = ^(?:\S+:\d+\s+)?<HOST>\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?:GET|POST|HEAD|OPTIONS|PUT|DELETE|PATCH)\s+\S+(?:\s+HTTP/\d(?:\.\d+)?)?"\s+\d{3}\s+
ignoreregex =

Perhatian: Regex harus sesuai dengan format LogFormat Apache yang digunakan. Selalu uji dengan fail2ban-regex sebelum mengandalkannya di server produksi.

Membuat jail rate limit apache

Tambahkan ke /etc/fail2ban/jail.d/apache.local:

[apache-rate-limit]
enabled = true
filter = apache-rate-limit
port = http,https
protocol = tcp
logpath = /var/log/apache2/*access.log

findtime = 10
maxretry = 150
bantime = 1h

banaction = nftables
ParameterContohMakna
findtime10Jendela waktu pengamatan 10 detik.
maxretry150Jika 150 kecocokan terjadi dalam jendela waktu, IP dapat diban.
bantime1hIP diblokir selama 1 jam.
banactionnftablesAction firewall yang digunakan untuk memasang blokir.

Nilai 150 request/10 detik bukan angka universal. Website API, AJAX-heavy, reverse proxy, atau banyak pengguna di balik NAT mungkin membutuhkan threshold lebih tinggi untuk mengurangi false positive.

ISI FILE nftables.conf

/etc/nftables.conf

table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                iifname "lo" accept
                ct state established,related accept
                ct state invalid drop
                ip protocol icmp accept
                ip6 nexthdr ipv6-icmp accept
                tcp dport 22 accept
                tcp dport 80 accept
                tcp dport 443 accept
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
Whitelist Alamat IP Administrator

Tambahkan pada bagian [DEFAULT] bila diperlukan:

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

Jika memiliki IP publik administrator statis, tambahkan hanya IP tersebut. Hindari whitelist subnet publik yang terlalu luas.

Validasi Konfigurasi

Sebelum restart Fail2ban, lakukan test konfigurasi:

fail2ban-client -t

Kondisi yang diharapkan:

OK: configuration test is successful
Uji Regex
fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-rate-limit.conf

Periksa jumlah matched. Jika selalu 0 meskipun access.log berisi request, kemungkinan format log tidak cocok dengan regex.

Restart dan Verifikasi Jail
systemctl restart fail2ban
systemctl status fail2ban --no-pager
fail2ban-client status

Periksa jail rate limit:

fail2ban-client status apache-rate-limit

Contoh informasi penting: Currently failed, Total failed, Currently banned, Total banned, dan Banned IP list.

Melihat Log Fail2ban
tail -f /var/log/fail2ban.log
# atau
journalctl -u fail2ban -f

Ketika ban terjadi, biasanya muncul baris dengan nama jail dan alamat IP yang diblokir.

Melihat Rule nftables
nft list ruleset
# atau lebih spesifik
nft list ruleset | grep -i f2b

Poin penting: Jika nft list ruleset menghasilkan output kosong, itu berarti belum ada ruleset nftables aktif pada saat perintah dijalankan. Hal ini bisa terjadi meskipun paket nftables sudah terinstal. Fail2ban harus memiliki jail aktif dan action firewall yang benar agar rule terkait Fail2ban muncul.

Troubleshooting : nft list ruleset Kosong

Lakukan pemeriksaan berurutan berikut.

Periksa service Fail2ban :

systemctl status fail2ban --no-pager

Pastikan Active: active (running).

Periksa konfigurasi :

fail2ban-client -t

Perbaiki error konfigurasi jika test gagal.

Periksa daftar jail :

fail2ban-client status

Jika Number of jail: 0, maka tidak ada jail yang aktif.

Periksa jail Apache :

fail2ban-client status apache-rate-limit

Jika jail tidak ditemukan, konfigurasi belum termuat.

Periksa action nftables :

fail2ban-client get apache-rate-limit actions

Pastikan jail mempunyai action firewall.

Cari konfigurasi nftables :

fail2ban-client -d | grep -i nft

Membantu melihat action/config yang di-resolve Fail2ban.

Periksa ruleset :

nft list ruleset

Setelah jail/action aktif, rule Fail2ban seharusnya dapat muncul.

Pengujian Ban Manual

Untuk memastikan action firewall benar-benar bekerja, gunakan IP dokumentasi berikut sebagai target uji:

fail2ban-client set apache-rate-limit banip 192.0.2.100

Periksa status jail:

fail2ban-client status apache-rate-limit

Kemudian periksa nftables:

nft list ruleset

Jika rule muncul dan IP terdaftar sebagai banned, jalur Fail2ban -> nftables bekerja.

Hapus ban setelah pengujian:

fail2ban-client set apache-rate-limit unbanip 192.0.2.100
Jail Recidive untuk Penyerang Berulang

Recidive dapat digunakan untuk memberi ban lebih lama kepada IP yang berkali-kali terkena ban.

[recidive]
enabled = true
logpath = /var/log/fail2ban.log
findtime = 1d
maxretry = 5
bantime = 7d
banaction = nftables[type=allports]
Setelah menambah konfigurasi:
fail2ban-client -t
systemctl restart fail2ban

Leave a Reply

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