3 de mayo de 2014

Solucionando problemas de saturación del servidor por Spam con Joomla!

Problema 

En un proyecto en el que se continuaba utilizando la versión 1.5.26 de Joomla! un día, sin motivo aparente, comienza a presentar errores en la navegación, en principio y atendiendo al mensaje de error, parecía que el problema se daba en la conexión con la base de datos.

Después de conversar con el servidor, nos cuentan que la base de datos que utilizamos está saturada y de ahí los problemas, que probablemente sea debido a alguna extensión instalada en la web u otro tipo de error en la programación del sitio. Realizando un exhaustivo examen de todas las extensiones de Joomla!, se desactivan las que parecen realizar mayor número de peticiones a la base datos.

Al poco tiempo, cuando parecía simplemente un repentino y extraño fallo, los problemas para acceder al sitio web se multiplican al poco, informando el servidor en esta ocasión de un exceso de consumo de recursos PHP y de peticiones al servidor... ¿Qué está ocurriendo? ¿Cómo puede ser que de la noche a la mañana y sin realizar ninguna acción relevante empiece a fallar todo?

Solución

Después de varios días, por fin parece que vamos situando el problema, y es que, consultando las estadísticas del servidor comprobamos unas series de IP de origen chino que están demandando muchísimos recursos, no aparecen en Google Analytics y evidentemente no se corresponden con el comportamiento normal de visitantes humanos.

Lo primero que hacemos es intentar que el servidor bloquee esas IP concretas que en los últimos días están entrando insistentemente. En principio parece de nuevo que se soluciona, pero al día siguiente, las IP cambian y la web vuelve a presentar problemas. Es algo extraño, ya que estas visitas de robots considerados Spam que estaban desestabilizando el funcionamiento de la web no dejaba comentarios ni ninguna otra huella aparente que la de intentar una y otra vez acceder al sitio.

Habiendo situado completamente el problema como Spam, con robots accediendo una y otra vez a nuestra web hasta saturarla, las medidas que tomamos son:

  • Bloqueo de IPs  en el archivo .htaccess
Una de las funciones más utilizadas del archivo .htaccess (aparte del tema de las URL en Joomla!) es poder denegar manualmente el acceso al sitio de determinadas IPs o rangos de IP. Para lograrlo, tenemos que escribir al final del archivo:
## USER IP BANNING
<Limit GET POST>
order allow,deny
deny from 220.161.103.
deny from 121.205.
deny from 91.188.124.239
deny from 178.137.92.179
allow from all
</Limit>

Varias notas al respecto:
  1. El ejemplo es un extracto del código real compuesto por muchas más IPs, siempre respetando el mismo formato por línea. Como se puede ver está compuesto por IP completas y rangos (los dos primeros que terminan en punto) que facilitan la labor de denegar IPs que comparten bloques de números idénticos.
  2. Para saber que IP son las que accedían analizamos las estadísticas del servidor.
  3. La primera línea <Limit GET POST> también se puede encontrar como <Limit GET HEAD POST>. Se puede utilizar una u otra siempre que no aparezca problema de incompatibilidad en el servidor.
Perfecto, con esta limitación manual nos aseguramos que esas IPs malignas concretas no vuelvan a acceder a nuestra web, pero ahora queda lo más difícil ¿cómo hacemos para que esto no nos vuelva a ocurrir?

  • Instalación del plugin HTTP:BL
Para tener protegido nuestro sitio Joomla! de forma permanente contra nuevos ataques de Spam, instalamos el plugin gratuito denominado HTTP:BL - Project Honeypot Blocklists con el objetivo de tener un sistema que bloquee de forma automática las IPs consideradas malignas.

Una vez que instalamos el plugin -con versiones para Joomla! 1.5 y 2.5- tenemos que darnos de alta en el Project HoneyPot cuyo objetivo es precisamente fomentar una comunidad que pueda detectar y prevenir ataques de Spam a nivel global. Cuando nos registramos nos asignan nuestra "API Key" que tenemos que escribir en la configuración de nuestro plugin. Posteriormente lo activamos y algo importante, lo tenemos que colocar para que se cargue en primer lugar (posición 0).

Cuando comienza a funcionar el plugin, nos genera en el directorio principal de nuestro alojamiento un archivo denominado "httpbl.txt" en el que se recoge de forma constante la actividad de esta magnífica extensión, bloqueando todas aquellas IPs que están en la base de datos del proyecto clasificadas como malignas o como Spam. Los que no estén muy seguros de su utilidad, quedarán convencido viendo los resultados en este archivo que comentamos.

Complementariamente, se puede colaborar de diversas formas con Project HoneyPot para la detección y prevención del Spam, fundamentalmente colocando códigos "trampa" por tu web no visibles para los humanos pero que los robots de Spam consideran vulnerables, permitiendo así analizarlos para poder bloquearlos.

Pues de esta forma es como pudimos solventar este extraño error que nos costó detectar. Desde entonces vamos observando el archivo "httpbl.txt" y, aunque son bloqueadas, si vemos que una IP o rango concreto quiere entrar demasiadas veces seguidas en la web, procedemos a incluirla en nuestra lista negra en .htaccess añadiendo otra línea con "deny from" y la IP en cuestión.

No hay comentarios:

Publicar un comentario