Hardening de websites hechos con WordPress

Internet está lleno de crackers y spammers dispuestos a tumbar el CMS sobre el que se levanta tu website, ya sea Joomla, Drupal o WordPress, por poner solo algunos ejemplos.

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 utiliza 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.

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 aprender a 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

En carpetas:

find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \;

En archivos:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;

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

Pon esto en tu archivo .htaccess:

<Files wp-config.php>
    Order allow, deny
    Deny from all
</Files>

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

Pon esto en tu archivo .htaccess:

<Files .htaccess>
    Order allow, deny
    Deny from all
</Files>

8. Protege tu wp-admin

Pon el siguiente archivo .htaccess en /wp-admin:

<FilesMatch ".*">
    Order Deny,Allow
    Deny from all
</FilesMatch>

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 permites que cualquiera pueda acceder a tu http://example.com/wp-login te expones a los ataques por fuerza bruta.

Al utilizar 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 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:

UPDATE wp_posts SET ping_status='closed' WHERE post_status ='publish' AND post_type = 'post';

UPDATE wp_posts SET ping_status='closed' WHERE post_status ='publish' AND post_type = 'page';

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.

  • Añadiendo el filtro add_filter('xmlrpc_enabled', '__return_false'); en wp-config.php, justo después de require_once(ABSPATH . 'wp-settings.php');
  • Utilizar algún plugin WP
  • 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 te enseño a deshabilitar el login de root SSH.

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.

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.