Bali, Indonesia
Insights

Memilih Blokir Bot Login di Level Cloudflare atau Plugin WordPress

October 19, 2026
0:00
Website berbasis WordPress tiba-tiba melambat drastis, memicu galat 504 Gateway Timeout, atau penggunaan CPU server menyentuh 100% tanpa ada lonjakan transaksi pembeli. Saat log web server diperiksa, penyebabnya sering kali sangat sederhana: ratusan request per menit yang mengincar file wp-login.php. Masalah umum yang membingungkan banyak pengelola web adalah mengapa server tetap kolaps padahal mereka sudah memasang plugin keamanan populer untuk membatasi percobaan login. Memahami perbedaan titik eksekusi antara plugin WordPress dan edge network seperti Cloudflare adalah kunci untuk menjaga server tetap bernapas tanpa harus terus menambah kapasitas RAM atau CPU.
Plugin keamanan bekerja di dalam lingkungan WordPress. Ketika bot mengirimkan HTTP POST atau GET ke wp-login.php, alur proses di server origin sudah berjalan jauh sebelum plugin memutuskan untuk menolak bot tersebut. Pertama, web server (seperti Nginx, Apache, atau LiteSpeed) harus menerima koneksi TCP dan melakukan negosiasi SSL/TLS. Setelah itu, web server menyerahkan request tersebut ke PHP handler, baik melalui PHP-FPM maupun modul bawaan server. PHP kemudian mengalokasikan satu PHP worker—yaitu proses komputasi yang bertugas mengeksekusi kode script PHP—untuk memuat file wp-config.php, inisialisasi basis data, memuat file inti WordPress, dan menjalankan seluruh plugin aktif hingga mencapai script plugin keamanan. Baru pada tahap inilah plugin memeriksa apakah IP pengirim telah melampaui batas percobaan login. Jika ya, plugin akan mengembalikan respons HTTP 403 atau pesan penolakan. Meskipun bot berhasil digagalkan untuk menebak kata sandi, satu siklus PHP worker dan koneksi database MySQL sudah terpakai habis selama puluhan hingga ratusan milidetik. Jika ada 50 bot menyerang bersamaan dan server hanya memiliki 20 alokasi PHP worker yang tersedia, antrean worker akan penuh seketika. Pengunjung manusia yang ingin membuka halaman beranda atau menyelesaikan checkout toko online akan tertahan dalam antrean sampai waktu request habis (timeout). Plugin keamanan berhasil menjaga keamanan kredensial, tetapi gagal menjaga ketersediaan layanan. Pola serangan ini tidak hanya menargetkan form login standar. Bot modern sering memanfaatkan berkas XML-RPC untuk mencoba ratusan kombinasi sandi sekaligus dalam satu request, seperti yang diulas dalam panduan Spotting XML-RPC Multicall Attacks in Web Server Access Logs.
Cloudflare bertindak sebagai reverse proxy yang berada di antara pengunjung dan server origin milikmu. Artinya, domain harus menggunakan nameserver Cloudflare atau memanfaatkan mode proxy (awan oranye) agar seluruh trafik masuk terlebih dahulu melewati jaringan edge mereka. Ketika bot melancarkan serangan brute-force ke wp-login.php, request bot tiba di server Cloudflare terdekat, bukan di server hosting milikmu. Jika kamu mengatur aturan keamanan (WAF Rule) di Cloudflare, filter langsung dievaluasi di edge network. Cloudflare dapat langsung menyajikan tantangan (Managed Challenge atau Cloudflare Turnstile) atau memblokir IP tersebut dengan respons HTTP 403 langsung dari server edge. Request jahat tersebut dihentikan sepenuhnya di luar infrastruktur hosting. Server web milikmu tidak pernah menerima paket TCP, tidak pernah meluncurkan PHP worker, dan tidak ada query basis data yang dijalankan. CPU dan RAM server origin tetap berada pada kondisi normal seolah serangan tersebut tidak pernah terjadi. Selain itu, menghentikan bot di level edge juga mencegah penumpukan file log akses dan log error di server lokal. Pada serangan yang berlangsung berhari-hari, lonjakan pencatatan log di level lokal bisa memicu konsumsi storage berlebih dan berisiko menghabiskan kapasitas disk maupun alokasi inode server.
Untuk menentukan di mana pertahanan harus diletakkan, kita perlu membandingkan beberapa parameter teknis operasional harian:
ParameterPlugin WordPress (Lokal)Cloudflare WAF (Edge)KeteranganCatatan Praktis
Konsumsi Resource ServerSangat tinggi saat diserangNol di sisi server originPlugin membebani alokasi worker PHPEdge memblokir trafik sebelum masuk hosting
Konteks Data PenggunaSangat tinggiRendah / TerbatasPlugin mengenali role admin, editor, pembeliEdge hanya membaca header HTTP dan IP
Kebutuhan Akses DNSTidak butuh akses DNSWajib mengubah nameserver/DNSPlugin aktif langsung dari wp-adminCloudflare butuh kontrol domain penuh
Pencegahan False PositiveMudah direset via databasePerlu bypass rule via dashboard WAFPlugin mudah dinonaktifkan via FTP/SSHWAF salah konfigurasi bisa mengunci admin
Jika website berada pada shared hosting atau paket VPS kecil dengan jumlah PHP worker terbatas (misalnya di bawah 10 hingga 20 worker), mengandalkan plugin lokal untuk menahan bot brute-force hampir pasti membuat web sering tidak bisa diakses saat serangan berlangsung. Dalam kondisi resource yang ketat, memindahkan blokir ke level edge adalah opsi paling masuk akal. Sebaliknya, jika server origin memiliki spesifikasi mandiri yang besar dengan kapasitas worker melimpah dan trafik login tergolong sangat jarang, plugin lokal mungkin terasa cukup tanpa perlu repot mengalihkan rute DNS.
Plugin lokal memiliki keunggulan yang tidak dimiliki Cloudflare: kesadaran kontekstual terhadap aplikasi. Plugin tahu persis apakah pengguna yang sedang login adalah administrator, editor, atau pelanggan WooCommerce biasa. Plugin juga dapat menerapkan autentikasi dua faktor (2FA) berbasis aplikasi authenticator, memverifikasi status sesi cookie, dan memeriksa rekam jejak akun di tabel database internal. Cloudflare hanya melihat request dari sudut pandang protokol HTTP. Cloudflare mengetahui alamat IP, User-Agent, URI path, negara asal, dan header HTTP, tetapi tidak mengetahui apakah username yang dimasukkan bot benar-benar ada di database WordPress kamu.
Sebagian besar fitur pemblokiran brute-force bawaan plugin WordPress tersedia tanpa biaya lisensi. Di sisi Cloudflare, fitur WAF kustom dasar dan verifikasi Managed Challenge juga tersedia di paket gratis dengan kuota aturan terbatas (biasanya hingga 5 aturan aktif pada paket Free). Namun, jika kamu membutuhkan pembatasan frekuensi canggih (Rate Limiting dinamis berbasis waktu menit per IP) di Cloudflare, fitur tersebut sering kali memerlukan kuota berbayar atau paket langganan tambahan. Jika anggaran menjadi kendala utama dan kamu butuh pembatasan laju request yang sangat spesifik berdasarkan ID pengguna, plugin lokal menawarkan fleksibilitas kontrol tanpa biaya langganan bulanan.
Jika kamu memutuskan untuk menggunakan Cloudflare, kamu tidak harus langsung memblokir semua orang dari halaman login. Praktik yang paling aman dan ramah pengguna adalah menggunakan aksi Managed Challenge khusus pada URI login. Dengan cara ini, bot otomatis akan tereliminasi karena tidak bisa menyelesaikan tantangan JavaScript atau CAPTCHA di level edge, sementara pengguna manusia asli hanya akan melihat layar verifikasi sejenak sebelum form login muncul. Berikut contoh ekspresi aturan yang umum diterapkan pada menu WAF Custom Rules di Cloudflare:
TEXT
(http.request.uri.path eq "/wp-login.php") and not (ip.src in {192.0.2.1}) and (http.request.method eq "POST")
(Catatan: ganti 192.0.2.1 dengan IP statis kantormu atau IP rumah jika kamu memiliki IP tetap untuk pengecualian). Dengan aturan tersebut, Cloudflare hanya akan memicu aksi terhadap request POST yang ditujukan ke endpoint login bagi IP di luar daftar putih. Halaman login tetap bisa dibuka, tetapi upaya submit kredensial dari bot asing akan langsung ditahan di edge network.
Pendekatan terbaik di lapangan sebenarnya bukan memilih salah satu dan membuang yang lain, melainkan memadukan peran keduanya sesuai fungsi terbaiknya. Gunakan Cloudflare di garis terdepan untuk menyaring sampah trafik massal. Pasang aturan Managed Challenge pada /wp-login.php agar ribuan bot acak yang memindai internet gugur sebelum sempat menyentuh Nginx atau Apache. Ini menjaga PHP worker tetap senggang dan siap melayani pengunjung nyata. Di saat yang sama, tetap pasang perlindungan ringan di level WordPress—seperti penerapan Autentikasi Dua Faktor (2FA) atau penggantian alur login administrator—untuk menjaga pintu tetap aman seandainya ada penyerang bertarget yang berhasil melewati filter edge. Dengan pembagian tugas ini, server hosting tidak lagi kehabisan resource, dan keamanan akun WordPress tetap terjaga secara menyeluruh.