Proteger WordPress de ataques de fuerza bruta

En esta entrada quiero compartir con vosotros la solución que he encontrado para proteger WordPress de ataques de fuerza bruta o de diccionario. Ya sé que hay plugins de seguridad muy buenos que son capaces de hacer esto, pero lo cierto es que mi experiencia con algunos de ellos para esta simple cuestión, ha sido realmente mala. Al final, la solución ha sido utilizar el polivalente fichero .htaccess que siempre tan buen resultado nos da.

Ya en su día hicimos uso de .htaccess para prevenirnos de ataques de tipo SQLi, aquí podéis encontrar la entrada.

Como sabréis, sobre todo aquellos que trabajáis normalmente con WordPress, las direcciones URL que se utilizan para acceder al panel de administración son bien conocidas, de ahí que suframos ataques de fuerza bruta o de diccionario a los recursos /admin, /wp-admin o /wp-login.php para intentar acceder a la administración de nuestro WP.

Además de poder controlar a qué hora se podría acceder a nuestra administración, podemos cambiar el nombre del enlace a nuestra administración, de forma que ya a través de éstas URL que hemos mencionado, ya no sea accesible.

Antes de empezar, como siempre en estos casos, aconsejo realizar una copia de seguridad.

Comencemos. Tendremos que añadir a nuestro fichero .htaccess las siguientes líneas (o modificar el módulo mod_rewrite.c en caso de que ya lo tengamos cargado):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^pathsecreto$ wp-login.php [L,NC,QSA]
</IfModule>

Donde pathsecreto será el nombre secreto que eligiremos y que apunte a wp-login.php y sólo se podrá acceder a través de este nombre.

Ya tan sólo nos queda modificar nuestro fichero wp-login.php para que no se pueda acceder por los métodos tradicionales, redirigir y evitar errores:

[ Yo lo he colocado en la línea 50 aproximadamente, justo antes de la etiqueta <!DOCTYPE html> ]

<? $uri = $_SERVER[‘REQUEST_URI’];
if(stripos($uri, ‘wp-login’) or stripos($uri, ‘wp-admin’) && !stripos($GLOBALS[“HTTP_COOKIE”], ‘wordpress_logged_in’))
{  header(“Location: /”); exit(); }
 ?>

A partir de este momento, si se intenta acceder directamente con las URL originales, redirigirá a la página principal del sitio, y sólo con nuestro /pathsecreto se podrá acceder al login de administración de nuestro WP.

Espero que os sea de utilidad y podáis reducir o mitigar completamente los molestos ataques de fuerza bruta a vuestro sitio WordPress.

Miguel A. Arroyo (miguel_arroyo76 en Twitter)