Cara Pasang Fail2ban di VPS Linux untuk Proteksi Brute Force Login WordPress
Setiap hari, website WordPress yang terhubung ke internet menghadapi ratusan hingga ribuan percobaan login otomatis dari bot. Bot-bot ini mencoba kombinasi username dan password secara acak — metodologi yang disebut brute force attack.
Di shared hosting, proteksi semacam ini biasanya sudah ada di level server. Tapi di VPS Linux yang Anda kelola sendiri, perlindungan ini tidak otomatis hadir. Fail2ban adalah solusi gratis yang terbukti efektif: ia memantau log gagal login, dan secara otomatis memblokir IP yang terlalu sering mencoba.

Mengapa Ini Penting untuk VPS WordPress?
Jika Anda menjalankan WordPress di VPS Nginx/Apache di Ubuntu atau Debian, log akses server Anda penuh dengan baris seperti:
POST /wp-login.php HTTP/1.1 200 - [IP: 45.33.32.156]
POST /xmlrpc.php HTTP/1.1 200 - [IP: 45.33.32.156]
Tanpa pembatasan, bot ini bisa mencoba jutaan kombinasi kata sandi selama berhari-hari. Mereka juga memakan bandwidth dan resource server.
Fail2ban bekerja dengan cara: 1. Memantau file log (Nginx access log, auth log) 2. Mendeteksi pola percobaan login gagal berulang dari IP yang sama 3. Menambahkan aturan firewall (iptables/nftables) untuk memblokir IP tersebut selama periode tertentu
Langkah 1: Install Fail2ban di Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
Verifikasi instalasi: “bash sudo fail2ban-client status “
Langkah 2: Buat Konfigurasi Jail untuk WordPress
Jangan edit langsung /etc/fail2ban/jail.conf — file ini akan tertimpa saat update. Buat file konfigurasi lokal:
sudo nano /etc/fail2ban/jail.local
Tambahkan konfigurasi berikut:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[nginx-wp-login]
enabled = true
port = http,https
filter = nginx-wp-login
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 86400
findtime = 300
Penjelasan parameter: – bantime = 86400 — IP diblokir selama 24 jam (dalam detik) – maxretry = 5 — blokir setelah 5 percobaan gagal – findtime = 300 — hitungan percobaan dalam 5 menit terakhir

Langkah 3: Buat Filter Regex untuk wp-login.php
sudo nano /etc/fail2ban/filter.d/nginx-wp-login.conf
Isi dengan:
[Definition]
failregex = ^<HOST> .* "POST /(wp-login\.php|xmlrpc\.php) HTTP/.*" [45][0-9]{2}
ignoreregex =
Filter ini menangkap: – POST request ke wp-login.php (halaman login WordPress) – POST request ke xmlrpc.php (sering disalahgunakan untuk brute force) – Hanya respons dengan kode HTTP 4xx atau 5xx (gagal)
Langkah 4: Restart dan Aktifkan Fail2ban
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Verifikasi jail aktif: “bash sudo fail2ban-client status nginx-wp-login “
Output yang diharapkan: “ Status for the jail: nginx-wp-login |- Filter | |- Currently failed: 2 | |- Total failed: 47 – Actions |- Currently banned: 3 |- Total banned: 12 “`
Langkah 5: Cek dan Kelola IP yang Diblokir
Lihat daftar IP yang sedang diblokir: “bash sudo fail2ban-client status nginx-wp-login “
Buka blokir IP tertentu (misalnya IP kantor Anda yang salah terblokir): “bash sudo fail2ban-client set nginx-wp-login unbanip 192.168.1.100 “
Blokir IP secara manual: “bash sudo fail2ban-client set nginx-wp-login banip 45.33.32.156 “
Tambahan: Proteksi wp-login.php via Nginx
Sebagai lapisan tambahan, batasi akses ke wp-login.php langsung di konfigurasi Nginx:
location = /wp-login.php {
# Batasi ke IP tertentu (opsional)
# allow 203.0.113.5;
# deny all;
# Batasi jumlah request
limit_req zone=login burst=5 nodelay;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Tambahkan di blok http di nginx.conf: “nginx limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m; “
| Serangan | Proteksi |
|---|---|
| Brute force wp-login.php | Fail2ban + rate limit Nginx |
| xmlrpc.php spam | Fail2ban filter + nonaktifkan xmlrpc |
| Distributed brute force | Cloudflare WAF (lapisan tambahan) |
| User enumeration via URL | Blokir ?author=N di .htaccess |

Monitoring Berkala
Tambahkan perintah ini ke jadwal cron harian untuk laporan singkat:
# Tambahkan ke crontab -e
0 8 * * * fail2ban-client status nginx-wp-login >> /var/log/fail2ban-report.log
Cek log ini setiap minggu untuk memahami pola serangan ke server Anda.
—
Setup Fail2ban adalah satu langkah kecil tapi dampaknya besar dalam keamanan VPS jangka panjang. Jika Anda baru pindah ke VPS atau ingin audit keamanan server WordPress yang lebih menyeluruh, antond.net menyediakan layanan setup dan hardening VPS untuk bisnis yang butuh server andal dan aman.