Semua Panduan VPSTutorial LinuxWindows & RDPWebsite & WordPressOtomasi & BotTips Hemat Server
VPS Indonesia›Cara Mengamankan WordPress di VPS dari Serangan
Website & WordPress

Cara Mengamankan WordPress di VPS dari Serangan Brute Force 2026

✍️ Eva Rosida 📅 4 November 2026 ⏱️ 6 mnt baca 👁️ 0×
Cara Mengamankan WordPress di VPS dari Serangan Brute Force 2026

Pasang situs WordPress baru di VPS, biarkan satu jam, lalu buka log akses Anda. Hampir pasti Anda menemukan puluhan sampai ratusan permintaan POST ke wp-login.php dan xmlrpc.php dari alamat IP yang tidak dikenal. Pada situs yang sudah berumur beberapa bulan, angkanya bisa mencapai ribuan percobaan login per hari. Bot tidak peduli apakah situs Anda blog pribadi atau toko online besar. Mereka menyisir seluruh internet dan mencoba kombinasi username dan password yang umum.

Kabar baiknya, memiliki root access di VPS memberi Anda kendali penuh untuk menutup celah ini di beberapa lapisan sekaligus, sesuatu yang sulit dilakukan di shared hosting. Panduan ini ditulis untuk Anda yang sudah punya WordPress di VPS Linux (Ubuntu atau Debian dengan Nginx atau Apache) dan ingin serangan brute force berhenti membebani server serta mengancam akun admin Anda.

Mengapa Brute Force Berbahaya, Bukan Sekadar Mengganggu

Ada dua risiko nyata. Pertama, pembobolan akun: satu password lemah pada akun administrator berarti penyerang bisa memasang plugin berbahaya, menyisipkan backdoor, atau mengarahkan pengunjung ke situs judi dan phishing. Kedua, beban sumber daya: setiap percobaan login memanggil PHP dan database. Ratusan permintaan per menit bisa menghabiskan CPU dan RAM di VPS kecil, sehingga situs Anda lambat atau down padahal tidak ada yang berhasil masuk.

Karena itu pertahanan terbaik bersifat berlapis: batasi di level firewall, level web server, dan level aplikasi WordPress.

Prasyarat

  • VPS Linux dengan akses root atau user sudo (Ubuntu 22.04/24.04 atau Debian 12 dipakai pada contoh ini).
  • WordPress sudah terpasang dan berjalan di Nginx atau Apache.
  • Akses SSH ke server dan kebiasaan membuat cadangan sebelum mengubah konfigurasi.
  • Alamat IP publik Anda saat ini, agar tidak terkunci sendiri saat menguji aturan firewall.
  • Akses ke dashboard WordPress sebagai administrator.

Sebelum mulai, buat snapshot atau cadangan penuh. Kesalahan konfigurasi firewall adalah penyebab paling umum orang terkunci dari server sendiri, dan cadangan membuat Anda tenang saat bereksperimen.

Langkah-Langkah Mengamankan WordPress dari Brute Force

  1. Perbarui sistem, WordPress, tema, dan plugin

    Banyak serangan yang berawal dari brute force lalu berlanjut ke eksploitasi plugin usang. Jalankan:

    sudo apt update && sudo apt upgrade -y

    Lalu perbarui inti WordPress, tema, dan plugin dari dashboard. Hapus plugin dan tema yang tidak dipakai, bukan sekadar menonaktifkannya.

  2. Hapus username default dan gunakan password kuat

    Penyerang hampir selalu mencoba username admin lebih dulu. Buat akun administrator baru dengan nama yang tidak mudah ditebak, pindahkan semua konten ke akun itu, lalu hapus akun lama. Pastikan juga nama tampilan publik berbeda dari username login, karena WordPress bisa membocorkan username lewat URL penulis (/?author=1).

    • Gunakan password minimal 16 karakter, sebaiknya dari pengelola password.
    • Jangan memakai ulang password dari layanan lain.
  3. Aktifkan autentikasi dua faktor (2FA)

    2FA membuat password yang bocor tidak cukup untuk masuk. Pasang plugin 2FA berbasis aplikasi autentikator (TOTP) dan wajibkan untuk semua akun dengan peran editor ke atas. Simpan kode cadangan di tempat aman.

  4. Pasang dan konfigurasi Fail2ban

    Fail2ban membaca log dan memblokir IP yang berulang kali gagal login langsung di level firewall, sebelum permintaan menyentuh PHP.

    sudo apt install fail2ban -y

    Buat filter khusus WordPress di /etc/fail2ban/filter.d/wordpress-login.conf:

    [Definition]
    failregex = ^<HOST> .* "POST /wp-login\.php.*" 200
                ^<HOST> .* "POST /xmlrpc\.php.*" 200
    ignoreregex =

    Respons 200 pada POST ke wp-login.php berarti login gagal (login sukses biasanya 302), sehingga filter ini menargetkan kegagalan. Lalu buat jail di /etc/fail2ban/jail.local:

    [wordpress-login]
    enabled  = true
    port     = http,https
    filter   = wordpress-login
    logpath  = /var/log/nginx/access.log
    maxretry = 5
    findtime = 10m
    bantime  = 1h
    ignoreip = 127.0.0.1/8 IP_ANDA

    Ganti IP_ANDA dengan IP publik Anda, sesuaikan logpath jika memakai Apache, lalu aktifkan:

    sudo systemctl restart fail2ban
    sudo fail2ban-client status wordpress-login

  5. Batasi laju permintaan dengan rate limiting Nginx

    Fail2ban bereaksi setelah log tertulis; rate limiting menahan lonjakan secara real-time. Tambahkan di blok http:

    limit_req_zone $binary_remote_addr zone=wplogin:10m rate=1r/s;

    Lalu di blok server:

    location = /wp-login.php {
        limit_req zone=wplogin burst=3 nodelay;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    Satu permintaan per detik dengan burst kecil sudah cukup untuk manusia, tetapi memukul mundur bot. Uji konfigurasi dengan sudo nginx -t sebelum sudo systemctl reload nginx.

  6. Nonaktifkan XML-RPC bila tidak dipakai

    Fitur xmlrpc.php memungkinkan banyak percobaan password dalam satu permintaan (metode system.multicall). Jika Anda tidak memakai aplikasi seluler WordPress atau Jetpack, blokir:

    location = /xmlrpc.php {
        deny all;
        return 403;
    }
  7. Lindungi halaman login dengan pembatas tambahan

    Pilih salah satu atau gabungkan:

    • Batasi berdasarkan IP: jika Anda punya IP tetap, izinkan hanya IP itu ke /wp-login.php dengan allow dan deny all.
    • HTTP Basic Auth: tambahkan lapisan password server di depan halaman login lewat auth_basic dan file .htpasswd.
    • CAPTCHA: pasang pada formulir login untuk menyaring bot sederhana.

    Basic Auth adalah favorit saya untuk tim kecil, karena bot bahkan tidak sampai ke PHP.

  8. Kunci akses SSH dengan kunci publik

    Brute force tidak hanya menyasar WordPress, tetapi juga SSH di port 22. Buat key pair di komputer Anda (ssh-keygen -t ed25519), salin dengan ssh-copy-id, lalu edit /etc/ssh/sshd_config:

    PasswordAuthentication no
    PermitRootLogin prohibit-password
    PubkeyAuthentication yes

    Jalankan sudo systemctl restart ssh, dan jangan tutup sesi lama sebelum memastikan Anda bisa login dari sesi baru.

  9. Aktifkan firewall dengan UFW

    Buka hanya port yang diperlukan:

    sudo ufw default deny incoming
    sudo ufw allow OpenSSH
    sudo ufw allow 80,443/tcp
    sudo ufw enable

    Pastikan aturan SSH ditambahkan sebelum ufw enable. Jika ingin lebih rapat, batasi SSH hanya dari IP Anda dengan sudo ufw allow from IP_ANDA to any port 22.

  10. Pantau log dan uji hasilnya

    Periksa apakah pertahanan benar-benar bekerja:

    • sudo fail2ban-client status wordpress-login untuk melihat IP yang diblokir.
    • sudo grep "POST /wp-login.php" /var/log/nginx/access.log | tail untuk melihat pola serangan.
    • Coba gagal login enam kali dari jaringan lain (misalnya data seluler) dan pastikan IP tersebut diblokir.

    Jadwalkan pengecekan mingguan singkat. Lonjakan permintaan yang tiba-tiba sering menjadi tanda awal serangan yang lebih serius.

Perbandingan Singkat Lapisan Pertahanan

LapisanBekerja diKelebihanKeterbatasan
Fail2banFirewall (berdasarkan log)Memblokir IP penyerang sepenuhnyaBereaksi setelah percobaan terjadi
Rate limiting NginxWeb serverMenahan lonjakan secara instanBotnet terdistribusi bisa lolos
Basic Auth / batas IPWeb serverBot tidak menyentuh PHPKurang praktis untuk banyak pengguna
2FAAplikasi WordPressPassword bocor tidak cukupPerlu disiplin pengguna

Mengatasi Masalah Umum

Saya terkunci dari situs atau server sendiri

Masuk lewat konsol VNC atau konsol darurat dari panel VPS Anda, lalu hapus IP Anda dari daftar blokir dengan sudo fail2ban-client set wordpress-login unbanip IP_ANDA. Tambahkan IP tersebut ke ignoreip agar tidak terulang.

Fail2ban tidak memblokir apa pun

Penyebab paling umum adalah logpath salah atau format log tidak cocok dengan regex. Uji dengan sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress-login.conf. Jika hasil kecocokan nol, sesuaikan pola. Jika situs Anda berada di belakang proxy atau CDN, log hanya menampilkan IP proxy, sehingga Anda perlu mengonfigurasi real IP terlebih dahulu.

Aplikasi atau plugin berhenti bekerja setelah XML-RPC diblokir

Jetpack, aplikasi seluler WordPress, dan beberapa layanan integrasi memerlukan XML-RPC. Cabut blokir total dan ganti dengan rate limiting khusus pada lokasi tersebut.

Nginx gagal reload setelah menambah rate limit

Pastikan limit_req_zone berada di konteks http, bukan di dalam blok server. Jalankan sudo nginx -t untuk melihat baris yang bermasalah.

Server tetap lambat padahal serangan terblokir

Periksa penggunaan sumber daya dengan htop dan tinjau slow query database. Jika beban berasal dari ribuan IP berbeda, pertimbangkan lapisan perlindungan di depan server atau tingkatkan spesifikasi VPS agar punya ruang napas.

Penutup

Tidak ada satu pengaturan yang membuat WordPress kebal, tetapi kombinasi password kuat, 2FA, Fail2ban, rate limiting, firewall, dan SSH berbasis kunci sudah menutup sebagian besar serangan brute force yang beredar. Keuntungan terbesar VPS dengan root access adalah Anda bisa menerapkan semuanya sendiri tanpa menunggu izin penyedia hosting.

Jika Anda belum punya server untuk berlatih, VPS Indonesia menyediakan VPS KVM NVMe di Jakarta dengan root access penuh, pilihan Linux dan Windows, mulai dari 20 ribu rupiah per bulan. Cukup untuk membangun lingkungan WordPress yang aman sejak hari pertama.

Pesan VPS Indonesia
Terapkan yang Anda baca langsung di VPS Indonesia.
Kunjungi VPS Indonesia ↗