TU PEOR ENEMIGO EN UN ALOJAMIENTO WEB CON PHP: LOS “BOTS”

TU PEOR ENEMIGO EN UN ALOJAMIENTO WEB CON PHP: LOS “BOTS”

EN EL ANÁLISIS DEL LOG DE APACHE PUEDES DESCUBRIR MUCHAS COSAS MUY INTERESANTES

Una de las más interesantes (y más “pesadilla”) es la cantidad de robots o “bots” que acceden a tu sitio una vez que ha conseguido una cierta visibilidad. Hay bots “buenos” como el bot de Google que indexa tu sitio para posicionarlo en el buscador y bots “malos” como los bots de spam que escanean tu web, por ejemplo, para averiguar huecos de seguridad o hacer spam de comentarios.

Trazas del log de Apache de un ataque de spam, fíjate especialmente en el parámetro “replytocom”, la frecuencia de los accesos y la procedencia de los mismos. Fueren cientos de accesos en segundos ejecutando PHP que acabaron provocando una caída del servidor.

captura de ataque de spam a WordPressLa manera fácil de detectar los bots es el agente de usuario que identifique tu log. Si ves algo como “Googlebot/2.1”, por ejemplo, estás viendo el robot de Google. Sin embargo, los botos malos no suelen revelar su verdadera identidad así que tienes que rastrear otros indicadores.

Dos de los más fáciles de detectar son el país de origeny la frecuencia de acceso. Por ejemplo: no es muy normal que tengas 10 accesos en un segundo de alguien de Georgia. Algo así canta.

Luego hay indicadores específicos, pero aquí ya hay que tener conocimientos avanzados. En el caso específico los ataques spam a un blog WordPress, que son un auténtico grano en el culo, es típico el uso de URLs con elparámetro “replytocom” que es el que se usa al enviar un comentario en WordPress.  Si, además, ves muchos accesos seguidos en cuestión de pocos segundos es evidente que se trata de un ataque de spam porque resulta obvio que no se trata de un patrón de uso humano. Este tipo de ataques, por ejemplo, son la causa de muchas caídas de corta duración en blogs WordPress.

En cualquier caso los ataques de spam, de fuerza bruta y similares son un terreno en el que hay mucha tela que cortar y que requieren, como mínimo, un post específico que haré próximamente. Hoy sólo pretendo darte un poco de perspectiva.

CÓMO SOLUCIONAR EL PROBLEMA

La mejor técnica para solucionar este problema que he visto hasta el momento y del cual, por cierto, apenas se publica nada (incluso en la blogosfera ingles) siendo un problema de los “gordos”, es aprovechar una maravilla de Apache que son las reglas de reescritura en el fichero .htaccess

La idea fundamental consiste en filtrar determinados parámetros de las URLs acceso antes de que el servidor procese nada y eliminarlos de la URL. De este modo la URL se convierte nuevamente en una URL “normal” para la cual entra en acción la caché.

Si añades, por ejemplo, el siguiente código a tu fichero .htaccess aquellas URLs que contengan algún parámetro “twitterfeed” se convertirán en la correspondiente URL sin parámetros:

La noticia mala es que toquetear el fichero .htaccess ya son palabras mayores. La puedes liar parda en tu sitio web si no sabes lo que haces, así que hagas lo que hagas, lo primero es sacar una copia de seguridad del fichero .htaccess. Si tienes esa copia, por mucho que la hayas liado, con restaurarla ya dejas todo en orden otra vez.

Como no es moco de pavo trabajar con reglas de re-escritura explicaremos los detalles de esto en un futuro post dedicado a ello. En cualquier caso, ya sabes lo que importa que es por dónde van los tiros de la solución. No obstante, si quieres ir atacando el problema desde ya, te dejo esta referencia que contiene el mejor tutorial para principiantes sobre reglas de re-escritura que he encontrado hasta la fecha, aparte de la documentación oficial de Apache sobre el tema.

De hecho, lo ideal sería contar con el apoyo del servicio técnico de tu proveedor de hosting o la ayuda de una persona técnica con conocimientos sólidos de Apache y reglas de re-escritura para crear las que tú necesitas para tu sitio.

Ya por último, una advertencia: date cuenta de que los parámetros que filtres, los pierdes.

Esto quiere decir que te fijes bien si estás filtrando información relevante que quizás prefieras conservar asumiendo la carga adicional correspondiente al servidor. Por ejemplo: determinada información de tracking (seguimiento) para Google Analytics que te interesa. En este ejemplo, si eliminases los parámetros de Google Analytics, esta información se dejará de aparecer en tu cuadro de analítica web.

Como curiosidad puedes echar también un vistazo a este hilo de la comunidad de  Google Plus de Desarrollo de WordPress en Español dónde lance en su momento un pequeño reto pidiendo ayuda sobre este problema cuando estaba intentando solventarlo para este blog. Tiene muchos detalles técnicos sobre este que quizás te resulten de interés.