Blokir akses XML-RPC pada Apache

Apabila memiliki banyak situs yang memakai WordPress maka mungkin anda tiba – tiba merasakan performa servernya jadi payah, halaman lama sekali loadingnya atau malah muncul 501 Internal Server Error. Ini bisa jadi disebabkan ada bot yang berusaha mencari celah keamanan dengan menyerang file XML-RPC secara brute force.

Nah… file XML-RPC (Remote Procedure Call) ini selalu ada di setiap instalasi WordPress dan fungsinya untuk melakukan publikasi atau koneksi dari luar dasbor sendiri menggunakan protokol HTTP, mungkin dari aplikasi mobile atau program desktop.

Sebelumnya pernah ditemukan celah keamanan yang bisa membobol WordPress dan karena itulah sering menjadi sasaran para hacker. Efek buruknya walaupun tidak berhasil menembus keamanan adalah setiap proses permintaan koneksi atau login akan membuat PHP bekerja, inilah yang membebani server. Jadi akses yang tidak valid atau tidak ada gunanya ini yang merugikan kita dan bisa menyebabkan situs kita mati total kalau tidak diatasi.

Sebenarnya hal ini bisa dicegah lewat file .htaccess:

<FilesMatch "^(xmlrpc\.php)">
    Order Deny,Allow
    Allow from 127.0.0.1
    Deny from all
</FilesMatch>

Ini hanya memperbolehkan file .htaccess diakses dari localhost, tapi bisa anda gantikan dari alamat IP lain kalau membutuhkan. Tapi kekurangannya hal ini perlu diterapkan satu per satu untuk setiap website. Repot bukan? Apalagi kalau situsnya banyak.

Sedangkan ModSecurity adalah modul Apache yang berfungsi untuk membuat aturan keamanan saat ada permintaan akses ke situs atau konten yang dihosting dalam web servernya. Dan bisa dikatakan ini adalah salah satu modul yang wajib diinstall dalam setiap server, terutama untuk shared hosting.

Nah… ada cara yang kalau diterapkan akan berlaku untuk seluruh website yang dihosting dalam satu server tersebut, tinggal tambahkan aturan baru di ModSecurity khusus untuk blokir XML-RPC:

SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},initcol:user=%{REMOTE_ADDR},id:2316

<Locationmatch "xmlrpc.php"> 
    SecRule user:bf_block "@gt 0" "deny,status:401,log,id:2317" 
    SecRule RESPONSE_STATUS "^200" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/300,id:2318" 
    SecRule ip:bf_counter "@gt 5" "t:none,setvar:user.bf_block=1,expirevar:user.bf_block=1800,setvar:ip.bf_counter=0" 
</Locationmatch>

Ini akan memblokir IP asal selama 1 jam kalau ada akses lebih dari 10 kali dalam 5 menit. Ini lebih aman karena XML-RPC kadang masih dibutuhkan agar CMSnya bisa berfungsi normal, jadi kalau ada akses yang berlebihan baru diblokir.

Atau anda bisa menggunakan modul Apache yang dikhususkan untuk itu:

a2enconf block-xmlrpc

Jangan lupa untuk merestart Apache setelahnya.

Tinggalkan komentar