Como proteger wordpress de un ataque de fuerza bruta con fail2ban

Como proteger wordpress de un ataque de fuerza bruta con fail2ban

Si tienes un wordpress esto te interesa y mucho!

Desde hace aproximadamente 2 dias, se está produciendo un ataque distribuido a gran escala contra toda instalación wordpress que se encuentre online.

Es posible que si mantienes un cierto control sobre las visitas de tu blog, hayas notado un incremento de visitantes que solo acceden al fichero wp-login.php, como ya te habrás imaginado, estos visitantes no buscan nada bueno, se trata de un ataque de fuerza bruta contra tu blog y lo único que pretenden es conseguir hacerse con el acceso admin de tu blog, para posteriormente subir código malicioso en tu blog.

Este ataque distribuido que estámos sufriendo puede mitigarse desde varios frentes:

  1. Configuración desde Wordpres.
  2. Configuración a nivel de servidor.

Lamentablemente,  si tu WordPress está alojado en un servidor compartido, tendrás que descartar la segunda alternativa, pero te animo a que lo comuniques a tu proveedor de hosting, nunca está de más informar para que se tomen las medidas adecuadas, en cualquier caso si que puedes tomar medidas que protegerán bastante bien tu blog frente a atacantes, aquí tienes unas cuantas ideas interesantes, también puedes añadir el plugin “limit login attempts” es un método extremadamente sencillo de protegerte y el conocido Better WP Security

En este post nos ocuparemos del segundo caso, tenemos control sobre el servidor en el que tenemos instalaciones de wordpress, y aunque seguro que nuestros clientes con wordpress toman las medidas necesarias para evitar estos ataques (ehem…) no está de más que nosotros tengamos previstas ciertas medidas de contingencia.

En concreto y ya que en otro post hemos explicado como se instala fail2ban para proteger nuestro servidor de ataques de otro tipo, vamos a centrarnos en la configuración de fail2ban, simplemente tendremos que agregar una regla para ayudarnos a sortear este ataque.

Si nos hemos fijado en los accesos en los logs, podemos encontrar algo asi:

204.**** - - [12/Apr/2013:12:55:16 +0200] "POST /wp-login.php HTTP/1.1" 200 3673 "-" "-"
109.**** - - [12/Apr/2013:13:27:29 +0200] "GET /wp-login.php HTTP/1.1" 200 2768 "-" "Python-urllib/2.7"
109.**** - - [12/Apr/2013:13:27:38 +0200] "GET /wp-login.php HTTP/1.1" 200 2768 "-" "Python-urllib/2.7"
204.**** - - [12/Apr/2013:14:29:59 +0200] "GET /wp-login.php HTTP/1.1" 200 2768 "-" "-"
204.**** - - [12/Apr/2013:14:29:59 +0200] "GET /wp-login.php HTTP/1.1" 200 2768 "-" "-"
204.**** - - [12/Apr/2013:14:30:13 +0200] "POST /wp-login.php HTTP/1.1" 200 3673 "-" "-"
204.**** - - [12/Apr/2013:14:30:13 +0200] "POST /wp-login.php HTTP/1.1" 200 3673 "-" "-"
...
...

De modo que simplemente tendremos que agregar en nuestro fichero /etc/fail2ban/jail.conf la siguiente entrada:

[apache-wp-login]
enabled = true
port    = http,https
filter  = apache-wp-login
action   = iptables-multiport[name=ATAQUE-WP, port="http,https"]
           sendmail-buffered[name=ATAQUE-WP, lines=5, dest=TU EMAIL]
logpath = /var/log/httpd/access_log
maxretry = 5
findtime = 120

Lo que estamos haciendo es indicar un máximo de 5 reintentos (maxretry) en 2 minutos (findtime) en un fichero de logs concreto (logpath).

Ojo: hay que buscar un log donde se almacenen TODAS las entradas de nuestros alojamientos, si usais plesk probablemente tengais que utilizar la linea: logpath = /var/www/vhosts/*/statistics/logs/access_log

Posteriormente agregamos el FILTRO en /etc/fail2ban/filters.d/ creando el fichero apache-wp-login.conf con este contenido:

# Fail2Ban configuration file
#
#

[Definition]

# Option:  failregex
# Notes.:  Regexp to catch Apache dictionary attacks on WordPress wp-login
# Values:  TEXT
#
failregex = .*] "(GET|POST) /wp-login.php

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Una vez creado el fichero, reiniciamos fail2ban, y desde ahora banearemos por iptables las ip que intenten acceder mas de 5 veces a nuestra zona de administración de wordpress en menos de dos minutos, lo malo es que esto te incluye a ti… asi que si has olvidado la clave de tu blog, no lo intentes más veces!!! en cualquier caso, el baneo por defecto es de 10minutos, de modo que podrás volver a intentarlo pasado ese tiempo.

Te recuerdo que esta medida de contingencia por si sola no es suficiente para prevenir ataques, siempre es recomendable incorporarla a los métodos de prevención de ataques de los que ya se disponga (firewall, mod_evasive…) y comunicar a los clientes los problemas que van a encontrarse si no mantienen su blog actualizado.

One Response

  1. JuanjoSC
    16 marzo, 2014

Write a Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.