Llevo unos días con el servidor en el que se aloja este blog y otros (todos desarrollados en WordPress) caído por intervalos, con un consumo tan alto de CPU que a veces no podía ni conectarme a la máquina para poder administrarla.
Cuando conseguí conectarme y ejecutar un htop (un top mejorado) había una gran cantidad de procesos de Apache, que por separado consumían pocos recursos pero todos juntos estaban tirando la máquina.
Al detener el servicio de Apache pude ver que la máquina se estabilizaba; es decir, algo estaba sobrecargando el servicio de Apache.
Tras analizar la últimas entradas del log había una gran cantidad de peticiones por segundo desde diferentes IP que ejecutaban
“POST /xmlrpc.php HTTP/1.1”
Este ataque es conocido desde hace tiempo y se aprovecha de una funcionalidad de WordPress que implementa XML-RPC.
La solución es sencilla, y simplemente hay que desabilitar la llamada al PHP xmlrpc.php mediante una configuración de Apache en el .htaccess en cada uno de los sitios creados con WordPress:
# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
Si quieres habitar alguna IP para poder usar las funcionalidades del xmlrpc.php simplemente hay que permitir el acceso a esas IP:
# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from 11.22.33.44
Allow from 55.66.77.88
</Files>