Hardening de websites hechos con WordPress

Internet está lleno de crackers, spammers, y otros espécimenes dispuestos a tumbar el CMS sobre el que se levanta tu website, ya sea Joomla, Drupal o WordPress, por poner solo algunos ejemplos. ¡La lista es interminable!

Como norma general, cuanto mejor conozcas tu CMS tanto más podrás combatir las amenazas. Si es un CMS de código abierto bien documentado y con una comunidad de usuarios y desarrolladores dándole soporte, mejor que mejor.

Luego, las medidas que tienes que adoptar ya comienzan a depender del tipo de servidor donde se aloja tu WP: hosting compartido, servidor virtual o servidor dedicado.

Estas medidas también dependen del grado de usabilidad que estés dispuesto a tolerar en tu sistema. Recuerda que el único ordenador 100% seguro es el que está metido en una caja fuerte sin conexión a Internet, y vigilado por uno, dos, o más guardias de seguridad 24 horas al día, 365 días al año.

Allá va una recopilación de medidas de seguridad importantes para hacer hardening de WordPress, ¡aunque seguro que encuentras algunas que también puedes utilizar en tu CMS!

Seguridad

1. Utiliza contraseñas seguras

Como medida de seguridad básica siempre tienes que utilizar contraseñas seguras para acceder a las cosas (panel de administración WP, SFTP, ssh, etc.). Las características de una contraseña segura son:

  • Es suficientemente larga (como mínimo unos 16 caracteres)
  • Contiene números
  • Contiene letras minúsculas
  • Contiene letras mayúsculas
  • Contiene símbolos especiales como:
  • No contiene tu nombre, apellido o cualquier dato que pueda identificarte
  • No contiene ninguna palabra que se pueda encontrar en un diccionario o en una enciclopedia, por ejemplo: casa, persona, Paris, ordenador, Barcelona, gato, perro, etc.

Como gestionar contraseñas seguras resulta complicado, necesitarás utilizar un programa gestor de contraseñas. En este artículo explico cómo gestionar contraseñas seguras con KeyPass.

2. Mantén al día tu sistema con las últimas actualizaciones

Pon al día tu WordPress, tus plugins y tu plantilla cuando salgan las actualizaciones correspondientes.

3. Pon CAPTCHAs en tus formularios

Instalar un CAPTCHA en WordPress es muy fácil. ¡Hay un montón de plugins! Investiga en este listado qué CAPTCHA WP se adapta mejor a tu situación. Este blog utiliza Easy Captcha con Google reCAPTCHA.

4. Utiliza SSL para conectarte al panel de administración

Los peligros de administrar tu WordPress sin un certificado digital los expliqué detalladamente en el artículo Administra tu WordPress en una red pública de forma segura. En esa entrada está la solución para securizar un WP alojado en un hosting compartido.

Si tu WordPress se aloja en un servidor propio tienes que instalar un certificado SSL de servidor seguro. Clica aquí para saber qué pasos debes seguir para crear e instalar un certificado digital autofirmado con OpenSSL.

Como alternativa, si ves que esto es muy complicado y no quieres meterte en este berenjenal, siempre puedes comprar un certificado digital firmado por una CA reconocida.

5. Configura correctamente los permisos de archivos y carpetas

Como norma general, estos son los permisos de archivos y carpetas que hay que configurar para securizar WordPress:

1. Carpetas:

2. Archivos:

6. Deniega explícitamente el acceso a tu wp-config.php

En palabras del mismo WordPress, hay gente que afirma que cambiar la ubicación de wp-config.php tiene un impacto mínimo en la mejora de la seguirdad, y, si no se hace con cuidado, puede incluso introducir vulnerabilidades. Otras personas están en desacuerdo con esta afirmación.

En todo caso, pon esto en tu archivo .htaccess:

7. Deniega explícitamente el acceso a tu .htaccess

8. Protege tu wp-admin

Para proteger esta carpeta puedes agregar el siguiente archivo .htaccess en /wp-admin:

9. Cambia el usuario admin por defecto

WordPress crea el usuario admin de forma predeterminada. Es mejor que cambies el nombre admin por el de un usuario con nombre de persona normal, digamos, por ejemplo: Juan, Marta, Jordi, o el nombre que sea.

Esto es una medida de seguridad menor que sirve para ponérselo un poco más difícil a los bots automáticos que intentan conectarse a nuestro WP por fuerza bruta.

10. Protege la pantalla de login de WordPress

Si dejas abierta esta puerta, es decir, si permites que cualquiera pueda acceder a tu http://example.com/wp-login, entonces te expones a los ataques por fuerza bruta.

Si utilizas una contraseña fuerte con las reglas que hemos descrito antes, el riesgo de que alguien pueda adivinar tu contraseña es pequeño, pero existe. Dicho riesgo se mitiga si cambias tu contraseña con una cierta frecuencia y si además añades un CAPTCHA al formulario de acceso.

Para evitar que alguien pueda acceder a tu wp-login.php, esto es, a la pantalla de acceso a tu panel de administración, tienes varias opciones:

  • Utilizar algún plugin WP.
  • Resolver el acceso no autorizado a nivel de .htaccess.
  • Esconder el archivo directamente en el sistema de ficheros.

Como siempre, cada una de estas soluciones tiene sus ventajas y sus inconvenientes de cara a la usabilidad del sistema.

11. Desactiva los trackbacks y los pingbacks

La mayoría de trackbacks y pingbacks son spam. Además, esta característica de WordPress también es utilizada por los crackers para llevar a cabo ataques de denegación de servicio DoS.

Para quitar los trackbacks y pingbacks hay que ir a Ajustes > Comentarios > Ajustes por defecto de las entradas y desmarcar la casilla que dice: “Permitir notificaciones de enlace desde otros sitios (pingbacks y trackbacks)”.

Sin embargo, lo anterior no desactivará los trackbacks y los pingbacks de las entradas antiguas. Para ello puedes ejecutar estas consultas MySQL:

12. Desactiva el XML-RPC

WordPress utiliza el protocolo XML-RPC para llevar a cabo varias tareas de forma remota. Gracias a este servicio podemos publicar cómodamente posts en nuestro blog mediante programas cliente para weblogs. Los trackbacks y pingbacks también funcionan con XML-RPC.

Esta característica, que puede resultar vulnerable, se puede quitar de varias maneras:

1. Añadiendo el filtro:

en wp-config.php, justo después de esta línea:

2. Utilizar algún plugin WP.

3. Esconder el archivo wp-xmlrpc.php en el sistema de ficheros.

13. Deshabilita el login de root SSH

Que tu servidor permita el acceso root a través de ssh es un agujero para la seguridad porque los crackers pueden intentar conectarse a tu sistema por fuerza bruta y obtener acceso total si consiguen adivinar la contraseña. En este artículo explico qué hay que hacer para desactivar esto.

14. Otras medidas de seguridad

Esto ha sido a grandes rasgos un recopilatorio de algunos puntos importantes que hay que tener en cuenta en el momento de blindar un WordPress. Espero que te sirva de ayuda.

Como siempre, recuerda visitar la documentación oficial de WordPress donde encontrarás más cosas que no he puesto en este post, pero que son igualmente importantes, por ejemplo: asegurar la base de datos, conectarte siempre por SFTP en vez de por FTP, etc., etc.

Ya para acabar, si crees que me he dejado algo interesante te invito a publicar un comentario.