Kamis, 06 Oktober 2016

WordPress memakan resource besar

Masalah
Beberapa minggu lalu, ada sebuah situs yang kita kelola terdapat sebuah anomali. Dimana anomalinya berupa pemakaian resource server yang besar dan menghabiskan resource dari server dan request ke database yang juga besar. Dilakukan ujicoba dengan mematikan service database tetapi resource web juga habis. Suspect sementara ini adalah web service yang menyebabkan masalah. Ketika service web server kita matikan ternyata server menjadi normal, resource tidak terlalu tinggi atau besar. Dilakukan pengecekan terhadap virtual host didalam server tersebut dengan mematikan atau mencari sumber bencana. Ketika dimatikan satu per satu, tetap saja masih bermasalah. Ada apa ini?


Penyebab
Akhirnya dirunut ke belakang dari pembuatan web yang ada di server tersebut. Ternyata menggunakan CMS yang berasal dari WordPress. Biasanya WordPress tidak akan seperti ini jika ada seting yang belum dioptimalisasi. Salah satu indikator nya adalah menghabiskan sumber daya dari server tersebut. Hasil yang paling jelas dari masalah ini adalah ketika mengakses web akan menampilkan pesan Error conecting to database dan di web konsol pun menampilkan Out of Memory.
Penyebab utama adalah di XML-RPC. WordPress menggunakan XML-RPC sebagai fungsi untuk eksekusi perintah secara remote. Plugin populer seperti JetPack dan aplikasi mobile WordPress adalah dua contoh yang memakai fungsi tersebut. Fungsi ini dapat dimanfaatkan untuk melakukan pengiriman ribuan permintaan untuk WordPress dalam satu waktu. Skenario ini sering menjadi serangan brute force attack yang efektif.

Audit
Cara untuk melakukan pengecekan dengan melihat log server. Misal kita menggunakan Ubuntu Server 14.04
Untuk Apache dengan mengetik perintah
grep xmlrpc /var/log/apache2/access.log
Untuk Nginx dengan mengetik perintah
grep xmlrpc /var/log/nginx/access.log

Hasilnya sebagai berikut


Cara Mengatasi
Salah satu cara yang saya pakai adalah dengan memblock melalui konfigurasi di Apache dan Nginx
Untuk konfigurasi di Apache dengan cara melakukan perintah sebagai berikut
nano /etc/apache2/sites-available/000-default.conf
Kemudian tambahkan baris berikut
<VirtualHost>
…    
    <files xmlrpc.php>
      order allow,deny
      deny from all
    </files>
</VirtualHost>

Restart service apache
service apache2 restart

Untuk konfigurasi di Nginx dengan cara melakukan perintah sebagai berikut
nano /etc/nginx/sites-available/example.com
Kemudian tambahkan baris berikut
server {
 location /xmlrpc.php {
      deny all;
    }
}
Restart service nginx
service nginx restart


Jika sudah selesai, tinggal dilihat kinerja server selama beberapa waktu dan dibandingkan dengan sebelumnya.



Tidak ada komentar:

Posting Komentar