Keamanan WP: Keamanan wp-admin | Ganti URL Login·Batasi Login·XML-RPC

Pemberitahuan afiliasi Ver 3.1
Pemberitahuan afiliasi Ver 3.2 (khusus seluler)

Keamanan wp-admin adalah pengaturan untuk memblokir serangan brute force yang masuk lewat layar admin dan layar login WordPress. Dari log akses server Nginx + Apache yang menjalankan beberapa situs WordPress, permintaan otomatis ke xmlrpc.php tetap berlanjut meski URL login sudah diganti, sehingga pembatasan kecepatan di tingkat server pun ikut diterapkan.

1️⃣ Mengapa wp-admin dan wp-login.php Diserang

Alamat admin WordPress yang sudah diketahui umum memang kelemahan, tetapi bisa ditutupi dengan memperkuat keamanan. Semua situs WordPress memakai /wp-admin/ dan [wp-login.php] yang sama, dan jika /wp-admin/ dibuka saat belum login, Anda diarahkan ke layar login [wp-login.php].

Serangan datang sebagai brute force, yaitu memasukkan nama pengguna dan kata sandi berulang-ulang ke layar login ini. Karena itu, keamanan wp-admin lebih dulu soal mencegah percobaan login, bukan menyembunyikan alamat.

Dua pintu masuk login WordPress
Akses lewat browser
/wp-admin/
Jika belum login, dialihkan ke layar login (302)
wp-login.php
Layar login · masukkan nama pengguna dan kata sandi
Aplikasi · permintaan otomatis
xmlrpc.php
Nama pengguna dan kata sandi dikirim lewat permintaan POST tanpa layar login
Tidak melewati layar login
system.multicall mencoba banyak kata sandi dalam satu permintaan · alamatnya tetap meski URL login diganti
Pemeriksaan nama pengguna·kata sandi yang sama
Kedua pintu memeriksa akun dengan fungsi autentikasi WordPress yang sama
Serangan brute force masuk lewat pintu yang terbuka di antara keduanya. Mengganti URL login hanya berlaku untuk pintu atas, jadi xmlrpc.php harus ditutup terpisah atau dibatasi jumlah permintaannya.

2️⃣ Efek dan Batas Mengganti URL Login

Jika URL login diganti dengan plugin keamanan, [wp-login.php] bawaan akan mengembalikan galat 404, sehingga serangan otomatis yang terus mengetuk alamat bawaan tidak sampai ke layar login. URL baru harus diberitahukan terpisah kepada pemilik akun admin.

🧭 Pintu masuk login WordPress
Diagram penjelasan
⬜ Tanpa plugin
🛡️ Hide My WP
🚪 Pintu masuk login
/wp-login.php · /wp-admin/Alamat sama di semua WordPress
Layar login404
/newloginAlamat baru · hanya admin yang tahu
Layar login
POST /xmlrpc.phpMemeriksa kata sandi tanpa layar login
Menjawab pemeriksaan kata sandiNonaktif 405
Diukur di situs uji · permintaan saat belum login
→
🤖 Serangan otomatis
Pintu tempat kata sandi bisa dicoba di alamat yang diketahui
2
1
Tidak ada
Tanpa plugin, kata sandi bisa dicoba di dua tempat: [wp-login.php] yang sama dengan semua situs WordPress, dan [xmlrpc.php] yang memeriksa kata sandi tanpa layar login.
Jika URL login diganti, [wp-login.php] dan /wp-admin/ mengembalikan 404, tetapi [xmlrpc.php] tetap menjawab apakah nama pengguna dan kata sandi benar.
Jika XML-RPC juga dimatikan, permintaan login ke [xmlrpc.php] berakhir dengan jawaban bahwa layanan XML-RPC nonaktif, sehingga kata sandi tidak bisa dicoba di alamat yang diketahui.

Cara ini tidak merepotkan, tetapi jika URL baru terlupa, Anda tidak bisa masuk ke layar admin dan harus menonaktifkan plugin itu dengan mengganti nama foldernya lewat FTP atau pengelola file. Untuk situs yang dikelola beberapa orang, sebaiknya alamat itu dicatat di satu tempat.

3️⃣ Membatasi Percobaan Login dan Autentikasi Dua Langkah

Meski URL login diganti, jika alamat baru tersebar, percobaan menebak kata sandi tetap berlanjut. Inti WordPress tidak membatasi jumlah login gagal, jadi berapa kali pun kata sandi salah dimasukkan, layar login yang sama terbuka lagi.

🧭 Batasi percobaan login dan autentikasi dua langkah
Diagram penjelasan
⬜ Tanpa plugin
🛡️ Plugin keamanan
🔑 Login dari IP yang sama
Ke-1Kata sandi salah
Layar login lagiSisa 3 kali
Ke-2Kata sandi salah
Layar login lagiSisa 2 kali
Ke-3Kata sandi salah
Layar login lagiSisa 1 kali
Ke-4Kata sandi salah
Layar login lagiDiblokir 20 menit
Ke-5Sedang diblokirKata sandi salahPermintaan login · XML-RPC
Layar login lagixmlrpc.php juga 403
Masukkan kata sandiKata sandi benar
Layar input kode
Authentication Code6 digit dari aplikasi autentikator · berganti tiap 30 detik
Layar admin
Penyerang yang hanya tahu kata sandiTidak tahu kodenya
Berhenti di layar kode
Diukur di situs uji · permintaan beruntun dari IP yang sama
→
🤖 Serangan otomatis
Bisakah kata sandi terus dicoba?
Tanpa batas
Diblokir pada percobaan ke-4
Berhenti di kode
Tanpa plugin, meski kata sandi salah dimasukkan enam kali dari IP yang sama, layar login yang sama terbuka lagi setiap kali.
Jika pembatasan percobaan login diaktifkan, sisa kesempatan ditampilkan setiap kali salah, dan setelah salah keempat kalinya IP itu tidak bisa login selama 20 menit. Selama diblokir, permintaan xmlrpc.php juga berakhir dengan 403.
Jika autentikasi dua langkah diaktifkan, meski kata sandi benar, layar admin baru terbuka setelah [Authentication Code] 6 digit yang dibuat ulang aplikasi autentikator setiap 30 detik dimasukkan.

Plugin pembatas percobaan login memblokir IP yang melewati jumlah tertentu selama waktu tertentu, sedangkan autentikasi dua langkah meminta kode dari aplikasi autentikator di ponsel sekali lagi meski kata sandi benar. Saat mengaktifkan autentikasi dua langkah, simpan juga kode cadangan untuk dipakai jika ponsel hilang.

4️⃣ Menutup xmlrpc.php

[xmlrpc.php] adalah pintu kedua yang menerima nama pengguna dan kata sandi tanpa melewati layar login, dan dengan metode [system.multicall] banyak kata sandi bisa dicoba dalam satu permintaan.

Log akses server Nginx + Apache yang menjalankan beberapa situs WordPress mencatat 2,250 permintaan POST ke [xmlrpc.php] antara pukul 00.00 dan 09.50 pada 13 Oktober. Permintaan datang dari 22 IP, dan User-Agent-nya menyamar sebagai Jetpack dan WordPress.com.

Jika Anda tidak memakai aplikasi seluler WordPress atau Jetpack, blokir permintaan [xmlrpc.php] di konfigurasi Nginx atau pakai pengaturan mematikan XML-RPC dari plugin keamanan.

# di dalam blok server — tolak permintaan xmlrpc.php
location = /xmlrpc.php {
    deny all;
}

Dengan pengaturan ini, permintaan GET dan POST ke [xmlrpc.php] semuanya berakhir dengan 403 tanpa sampai ke PHP. Fitur mematikan XML-RPC pada plugin keamanan hanya menolak permintaan yang perlu login sementara file-nya tetap merespons, jadi untuk mengurangi eksekusi PHP sekalian, lebih tepat memblokir di Nginx.

5️⃣ Memblokir di Server: Batasi IP Akses Admin·Batasi Kecepatan

Jika Anda mengelola hanya dari IP tetap, cara paling pasti adalah mengizinkan [wp-login.php] dan /wp-admin/ hanya untuk IP itu di Nginx. Cara ini tidak cocok untuk lingkungan yang IP rumah atau kantornya sering berubah.

Memblokir seluruh /wp-admin/ tampak cukup, tetapi fitur di layar pengunjung seperti pencarian atau keranjang belanja sering mengirim permintaan ke [admin-ajax.php], jadi file itu harus tetap dibuka.

# di dalam blok server — di atas location pemrosesan PHP
location = /wp-login.php {
    allow 203.0.113.10;   # IP tetap untuk mengelola
    deny all;
    # salin pengaturan location pemrosesan PHP apa adanya di bawah ini
}

Jika [wp-login.php] dibuka dari IP selain yang ditentukan, muncul 403, sedangkan dari IP yang ditentukan layar login terbuka. Di dalam location, pengaturan pemrosesan PHP situs (fastcgi_pass dan lainnya) harus disalin apa adanya agar layar login berjalan normal.

Jika IP tidak bisa dibuat tetap, ada cara memberi batas kecepatan pada permintaan PHP dari pengunjung yang belum login; proses membatasinya menjadi 30 kali per menit agar permintaan otomatis tidak menguasai sumber daya server dibahas di peringatan php-fpm max_children (artikel terpisah).

# blok http — hitung per IP hanya permintaan tanpa cookie login
map $http_cookie $php_anon_key {
    default                 $binary_remote_addr;
    "~*wordpress_logged_in" "";
}
limit_req_zone $php_anon_key zone=php_anon:10m rate=30r/m;

# di dalam location pemrosesan PHP
limit_req zone=php_anon burst=60 nodelay;
limit_req_status 429;

Jika satu IP yang belum login mengirim permintaan PHP beruntun, permintaan diproses sampai yang ke-61 dan setelah itu dikembalikan 429; permintaan dengan cookie login tidak dihitung. Jika cache halaman merespons tanpa melewati PHP, kunjungan halaman pengunjung biasa tidak terkena batas ini.

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 7   +   10   =