
Este post trata de ofrecer la información necesaria para incrementar la seguridad de tu blog si usas como CMS a WordPress. Son algunos pasos a seguir que te evitarán algún futuro dolor de cabeza.
Hacer copia de seguridad de nuestro blog
Lo primero que debemos hacer siempre que modifiquemos cualquier fichero de nuestro blog es hacer, con anterioridad, una copia de seguridad por si los cambios no ofrecen el resultado esperado.
Cambiar el prefijo de las tablas
Cuando introduces los parámetros de tu base de datos en el fichero wp-config.php, WordPress, por defecto, incluye la posibilidad de usar como prefijo para tus tablas wp_. Este prefijo siempre debería cambiarse para evitar que un robot o alguna persona con malas intenciones intentara acceder a las tablas.
Aquí surge un problema y es que si ya hemos instalado WordPress y modificamos el prefijo de las tablas nos cargamos la base de datos. Lo ideal sería cambiar el prefijo antes de instalar nuestro blog para que las tablas se generaran con el nuevo prefijo pero, si no es así y ya hemos instalado nuestro blog existe un plugin que se encarga de realizar este trabajo. Se trata de WP Prefix Table Changer y, como yo no lo he utilizado no puedo asegurar su buen funcionamiento pero, en principio, no debería haber ningún tipo de problema.
Ahora nos surge una duda, ¿qué tipo de prefijo ponemos? La solución ideal sería poner un prefijo aleatorio que no tuviera significado y que mezclara letras y números. Es decir, modificaríamos la siguiente línea en nuestro wp-config.php:
$table_prefix = 'wp_';
Cambiándolo por algo parecido a esto:
$table_prefix = 'slj65kj_';
Debemos tener en cuenta que solo se puede poner números, letras y guiones bajos como prefijo.
Asegurar permisos de wp-config.php
En este fichero informamos de varios parámetros a nuestro blog, por tanto, debemos asegurarnos que los permisos de nuestro fichero sea 644 para que sea un fichero de solo lectura para todo aquel que no sea el propietario del mismo.
Cambiar el usuario administrador (admin)
Es conveniente cambiar el nombre del usuario administrador que nos ofrece WordPress por defecto (una buena norma de seguridad es cambiar todos aquellos parámetros que se nos ofrezcan por defecto en cualquier instalación). Así evitaríamos que los posibles atacantes sepan el nombre de nuestro usuario administrador (admin).
Para cambiar el usuario de administrador debemos logarnos en nuestro WordPress y crear dentro de la pestaña usuarios un nuevo usuario que posea permisos de administrador. Lo ideal es usar un nombre difícil de averiguar y asignarle una contraseña fuerte (que mezcle caracteres alfanuméricos, es decir, letras, números y símbolos). Una vez que esté creado el usuario nos logamos con el usuario nuevo y borramos el usuario admin.
Restringir el acceso a wp-content y wp-includes
Mediante el fichero .htaccess (fichero oculto de Linux) podemos limitar el uso de cada directorio. Este archivo se colocará en la carpeta que queramos proteger, en nuestro caso, wp-content y wp-includes. Hay que destacar que esto se puede hacer si en nuestro hosting soportan Linux. No debe ser preocupante porque en la práctica totalidad de los hosting utilizan Linux en lugar de Windows.
La estructura básica del fichero .htaccess es la siguiente:
Order Allow,Deny
Deny from all
<Files ~ ".(css|jpe?g|png|gif|js)$">
Allow from all
</Files>
Con ello logramos evitar que se pueda acceder a cualquier fichero directamente (excepto a los que tengan extensión css, jpe, jpeg, png, gif y js). En este paso tenemos que tener en cuenta que podríamos tener problemas con los plugins que estén pensados para acceder a ellos. En caso de encontrarnos con esta situación debemos localizar el plugin que está intentando acceder y añadir en el fichero .htaccess la siguiente estructura:
<Files "plugin_deseado.php">
Allow from all
</Files>
Asegurar directorio wp-admin
En este directorio tenemos los archivos necesarios para administrar nuestro blog. Es por esto que debemos asegurar que el acceso a este directorio sea únicamente de la forma que nosotros deseamos.
Lo ideal sería que dispusiéramos de una IP fija o estática en nuestra conexión y que administraramos el blog únicamente desde esa IP. En este caso lo único que deberíamos hacer es bloquear el acceso al directorio wp-admina todas las IPs menos la nuestra. Esto se hará de la siguiente forma en el fichero .htaccess que deberíamos alojar en el directorio wp-admin.
Order Deny,Allow
Allow from aaa.bbb.ccc.ddd # Tu IP fija
Deny from all
Como es bastante usual que tengamos una IP dinámica en lugar de una IP fija o estática en la conexión desde la que administramos el blog la solución anterior no sería adecuada por lo que debemos añadir otro tipo de seguridad a nuestro directorio. Para ello vamos a añadir una contraseña al acceso de nuestro directorio wp-admin con lo que tendremos doble usuario y doble contraseña para el acceso a nuestro panel de administración. Nuevamente usaremos el fichero .htaccess y añadiremos, además, un nuevo fichero que se llamará .htpasswd.
.htaccess
AuthUserFile /srv/www/user1/.htpasswd
AuthName "Título del sitio protegido"
AuthType Basic
require valid-user
La explicación de las variables utilizadas en el fichero .htaccess es la siguiente:
AuthUserFile: Ruta completa de la ubicación del fichero .htpasswd.
AuthName: Título que aparecerá en el cuadro dónde nos solicitará el usuario y la contraseña.
¡ATENCIÓN! Es muy importante que nuestro fichero .htpasswd esté situado fuera de nuestro directorio de acceso web para que no sea accesible desde el exterior. La estructura de este fichero sería algo así:
.httpasswd
nombre_usuario:password_encriptada
Para generar nuestro fichero .htpasswd debemos colocarnos en el directorio privado y teclear la siguiente orden:
htpasswd –c .htpasswd nombre_usuario
El sistema te pedirá que introduzcas la contraseña dos veces y te generará el fichero .htpasswd de manera automática y con la contraseña cifrada. Por supuesto, esta orden se hace bajo un sistema Linux, por tanto, si tienes Windows en cualquiera de sus versiones, prueba a buscar en cualquier buscador herramientas online de generación de password aunque si no te fías (y yo, la verdad, no me fiaría) de eso de generar una contraseña en un servidor externo que no sabes qué será aquí te dejo un script en php para cifrar contraseñas y poder usarlas en el archivo .htpasswd que he encontrado aquí.