Siempre empieza igual. O bien alguno de los monitores de sistema que tienes montado te avisa o lo hace el más rápido de ellos: Tus clientes. Y en este caso han sido ambos.
Estoy acabando de desayunar cuando aprovecho para quitar el modo avión del móvil. Empiezan a entrar whatsapps y emails. En los emails, notificaciones de que la web del cliente no está accesible. Al rato vuelve a estarlo y al rato a no estarlo. No pinta bien.
En el Whatsapp, el cliente comentando que algo anda mal.
Primera prueba, navegar el site. Efectivamente el tiempo de carga es lento. Te logueas en el servidor y te encuentras con un montón de procesos Apache2 lanzados y bastante sobrecarga en el demonio Mysql. A priori parece un ataque.
Se necesita más visibilidad para saber que está pasando así que si no lo tienes ya mejor instalar el Módulo mod_status de Apache, el cual nos va a permitir ver, entre otras cosas, que URLs se están pidiendo.
Pasos:
- Activar el módulo con sudo a2enmod status
- Editar /etc/apache2/mods-enabled/status.conf
- Configurar ExtendedStatus a On dentro de <IfModule mod_status.c>
- Dentro de <Location /server-status> añadir nuestra IP a la directiva Allow
- Reiniciar Apache con sudo service apache2 restart
- Acceder http://tuservidor.net/server-status
Aquí os dejo un ejemplo del informe que facilita. Por motivos de seguridad no es el de mi servidor 😉
El caso es que en el informe veo que hay 97 llamadas a dos de mis dominios con WordPress. En concreto a las urls http://dominiodelcliente.com/xmlrpc.php busco un poco por Google y me encuentro con un vulnerabilidad pingback que hace referencia a una vulnerabilidad de los pingback y la forma en la que un ataque Ataques DDOS a tu xmlrpc.php puede ser utilizado.
En el mismo artículo proponen una solución bastante sencilla e inmediata que pasa por añadir una regla en el .htaccess de los dominios afectados para devolver un error 403 a las peticiones hechas contra el fichero xmlrpc.php.
<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>
Con esto se ha paliado el ataque.