Proteger un servidor con WordPress

Publicado el lun 29 septiembre 2014 in WordPress

Ataque a servidor con
WordPress

Si utilizas WordPress en un servidor virtual o dedicado con Linux, aquí tienes una receta para evitar (o al menos minimizar) algunos de los problemas habituales que se producen al recibir múltiples intentos de acceso al panel de control o al archivo xmlrpc.php.

En ocasiones, incluso con una instalación de WordPress segura, este tipo de ataques de fuerza bruta pueden tumbar tu servidor. Usando iptables y fail2ban puedes bloquear de forma automática las IP correspondientes, aligerando la carga del servidor.

Los datos son relativos a un servidor virtual con Debian Wheezy y nginx como servidor web.

Receta

  • iptables
  • fail2ban
  • servidor (Debian wheezy en este caso)

Firewall

Reglas para el firewall en /etc/iptables.firewall.rules

Muy importante: no te olvides de incluir las reglas necesarias para permitir los puertos de los servicios que tengas activos en tu servidor (correo electrónico, FTP, etc.).

Por ejemplo, para permitir el acceso al puerto 25 (SMTP):

-A INPUT -p tcp --dport 25 -j ACCEPT

O para las conexiones imap e imaps:

-A INPUT -p tcp --dport 143 -j ACCEPT
-A OUTPUT -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 993 -j ACCEPT
-A INPUT -p tcp --dport 587 -j ACCEPT

También debes incluir el puerto SSH configurado en /et/ssh/sshd_config si usas este servicio. Cambia "HERE_YOUR_SSH_PORT" por el número del puerto. Es buena idea cambiar el puerto estándar (22) por otro puerto en la configuración de SSH, además de deshabilitar el acceso de root.

Para activar estas reglas:
/sbin/iptables-restore < /etc/iptables.firewall.rules

Crea el archivo /etc/network/if-pre-up.d/firewall con las siguientes dos líneas para que se activen las reglas automáticamente al conectar:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

Ya tenemos el cortafuegos en marcha.

Registrar los accesos fallidos a WordPress

Crear el archivo security.php en /wp-content/plugins

Este sencillo plugin simplemente se encarga de generar un error 403 (HTTP 403 Forbidden) cuando hay un intento fallido de acceso al panel de control de WordPress, de modo que fail2ban lo pueda registrar y tomar las medidas oportunas. Es necesario activar el plugin.

Fail2ban

Si no está instalado:

# apt-get install fail2ban

Añadir al final del archivo /etc/fail2ban/jail.local (crear si no existe). Si usas Apache en lugar de nginx cambia la ruta a los logs de acceso.

Y después definir las condiciones para esos dos filtros en /etc/fail2ban/filter.d/wordpress-auth.conf y /etc/fail2ban/filter.d/xmlrpc.conf respectivamente.

Para reiniciar fail2ban después de los cambios:
# service fail2ban restart

Otras recomendaciones

Plugin: Wordfence

Utilizar el BGP Toolkit box para obtener el grupo de IP al que pertenece una IP atacante y bloquear con iptables el grupo completo si fuera necesario. Útil cuando los ataques provienen de un proveedor de hosting.