Introducción
El tráfico generado por bots en Internet ha crecido significativamente, impactando negativamente el rendimiento y los costos de los sitios web.
Un ejemplo notable es el informe reciente de Wikimedia (How crawlers impact the operations of the Wikimedia projects), en el que se afirma que el 65% de su tráfico más costoso proviene de bots.
¿Cuáles son las causas?:
- Expansión de la inteligencia artificial: Las herramientas de IA han facilitado la creación de bots, incluyendo los maliciosos, que pueden evadir sistemas de seguridad con mayor eficacia.
- Rastreadores para entrenamiento de modelos: Estos bots acceden masivamente a sitios web para recopilar datos, incluso páginas menos populares o profundas, consumiendo muchos recursos.
- Crecimiento de bots maliciosos: Actividades como ataques de fuerza bruta, escaneo de vulnerabilidades y explotación de APIs aumentan la carga y el riesgo sobre los sitios web.
¿Cuál es el impacto?
- Rendimiento: Los bots consumen recursos del servidor, lo que ralentiza los tiempos de carga y puede provocar caídas.
- Datos analíticos distorsionados: El tráfico no humano contamina las métricas utilizadas para tomar decisiones.
- Seguridad: Exposición a brechas, ataques DDoS y otros riesgos.
- Costes: Incremento del uso de ancho de banda y recursos de infraestructura.
- Infraestructura: La carga sostenida de bots ejerce presión sobre los sistemas de alojamiento.
Estrategias de mitigación
1. Guía a los bots
La forma más simple de empezar a controlar el acceso de los bots es mediante una correcta configuración del archivo robots.txt.
Aunque muchos bots maliciosos ignoran el robots.txt, sigue siendo una herramienta útil para guiar a los rastreadores legítimos, como el bot de Google, GPTbot, etc.
En Drupal, hay dos módulos esenciales para esta tarea:
- Simple XML Sitemap: permite definir fácilmente qué contenido debe incluirse en el sitemap.xml. Esto ayuda a guiar a los bots hacia el contenido relevante.
- RobotsTxt: permite gestionar y editar el archivo robots.txt directamente desde la interfaz de administración de Drupal.
Una práctica recomendada, pero a menudo pasada por alto, es bloquear el acceso de los bots a páginas de búsqueda interna del sitio (como "/search"). Estas páginas pueden generar cientos de URLs distintas si contienen múltiples filtros y combinaciones, sin aportar contenido nuevo para indexar.
Todo el contenido relevante para los bots debe estar cubierto en el sitemap.xml, por lo que estas páginas adicionales pueden excluirse sin perder visibilidad en buscadores.
Por ejemplo, las rutas de /search se pueden bloquear con la siguiente configuración del robots.txt:
# Ejemplo para sitios con varios idiomas o con prefijo de i multidioma
Disallow: /*/search
Disallow: /*/search?*
Disallow: /*/search/
Disallow: /*/search/*
# Ejemplo para sitio sin prefijo de idioma multidioma
Disallow: /search
Disallow: /search?*
Disallow: /search/
Disallow: /search/*
2. Política de caché
Una política de caché bien implementada es clave para reducir el impacto del tráfico de bots. Es especialmente eficaz cuando se utiliza un Proxy Cache (por ejemplo, Varnish, ) y/o un CDN (por ejemplo, CloudFlare, Akamai, Fastly, CDNetworks, etc), ya que estos pueden servir contenido cacheado (páginas y archivos estáticos) sin que las peticiones lleguen a Drupal.
Existen dos principios fundamentales:
- Cachear todo lo posible: Esto incluye todas las páginas del sitio y los recursos estáticos como imágenes, archivos JavaScript y CSS.
- Aplicar purgados eficaces para evitar servir contenido desactualizado:
- Usar purgado por cache tags o por URL (especialmente en el caso de imágenes).
- Establecer valores altos en los encabezados max-age siempre que sea viable.
- Tener en cuenta todas las capas de caché externas a Drupal: por ejemplo, tanto el Proxy Cache (como Varnish) como el CDN.
- Utilizar módulos como Purge y su ecosistema para integrar las distintas capas de caché.
Las vistas pueden complicar el cacheo en dos situaciones comunes:
- Uso de Ajax: En Drupal 10, las vistas con peticiones AJAX no generan respuestas cacheables, lo que impide su almacenamiento en las diferentes capas de caché. Este problema se está intentado resolver en Drupal 11 (Make ViewAjaxResponse cacheable).
- Filtros con muchas combinaciones: Aunque no se use AJAX, los filtros pueden generar cientos de URLs distintas con parámetros de consulta, lo que reduce la efectividad del cacheo.
Para el primer caso, se pueden implementar soluciones personalizadas dentro de Drupal.
Para el segundo, existe un módulo en Drupal que permite mitigar este problema (Facet Bot Blocker), pero en la misma página del proyecto recomiendan, si es posible, bloquear los bots a nivel de CDN en lugar de utilizar el módulo.
Por la tanto, la forma más efectiva de abordar ambos escenarios es implementar estrategias de bloqueo de bots en el CDN, si se dispone de uno. Más adelante comentaremos este punto.
3. CDN
Los CDN ofrecen ventajas clave para controlar y filtrar el tráfico que llega a Drupal:
- Cacheo distribuido: mejora la velocidad de carga y reduce la presión sobre el servidor de origen.
- Funcionalidad de Web Application Firewall (WAF): permite filtrar el tráfico malicioso mediante reglas basadas en patrones.
- Mitigación de ataques DDoS: mediante la detección y bloqueo de ataques masivos antes de que lleguen al servidor.
Por lo general implementan sistemas preconfiguradas para la detección y bloqueo de bots maliciosos. A continuación nos centraremos en las herramientas que requieren una configuración específica, más allá de las opciones predefinidas que ofrecen los proveedores.
Existen varias opciones de CDN en el mercado, como CloudFlare, Akamai, Fastly o CDNetworks, por lo que las herramientas y estrategias pueden variar según el proveedor.
3.1. Cache en el CDN
Cachear contenido a nivel de CDN, incluso antes de que llegue al Proxy Cache (como Varnish), es una estrategia muy efectiva. Sin embargo, es fundamental disponer de una política de purgado bien implementada. Uno de los problemas más comunes es que los contenidos no se actualicen correctamente debido a una mala gestión del purgado.
3.2. Gestión de bots
Algunos proveedores de CDN incluyen un catálogo de bots conocidos que pueden ser bloqueados o exentos de ciertas reglas. Es importante revisar esta lista y ajustarla a las necesidades del sitio. Por ejemplo, el equipo de SEO puede estar utilizando una herramienta de análisis que depende de un bot concreto. En ese caso, debe asegurarse que dicho bot no sea bloqueado.

3.3. Bloqueo por User-Agent
Para bots no incluidos en los catálogos estándar, se pueden crear reglas específicas basadas en el User-Agent. Es recomendable utilizar expresiones regulares para capturar sólo el identificador del bot, sin incluir detalles variables como la versión.
Por ejemplo:
^.*Scrapy.*
Esta regla permitirá detectar y bloquear cualquier petición del bot Scrapy.
3.4. Bloqueo por URI
Muchos errores 404 en los registros de Drupal provienen de bots que buscan vulnerabilidades comunes, como archivos .env, respaldos (backup.sql) o rutas de otros CMS como WordPress.
Se pueden bloquear utilizando expresiones regulares como:
/wp-.*\.php$
\.(php|backup|env|yml|php4|bak|sql)$
Es recomendable revisar periódicamente los registros de errores 404 para identificar nuevos patrones y ampliar estas reglas.
3.5. Limitación de peticiones (Rate Limiting)
Algunos bots maliciosos evaden la detección por User-Agent, declarando un user-agent de escritorio simulado, pero pueden identificarse por su frecuencia de acceso. Las herramientas de CDN o WAF permiten limitar el número de peticiones por IP en un período de tiempo determinado.
Un rango razonable es entre 150 y 250 peticiones por minuto desde una misma IP. En lugar de bloquear directamente, se puede configurar un Challenge (desafío) para verificar si el visitante es humano (ver siguiente sección). Otra solución rápida es bloquear temporalmente la IP.
3.6. Challenges (CAPTCHAs)
Como se mencionó en la sección de caché, algunas páginas no son cacheables, o aunque lo sean (como vistas con muchos filtros), generan demasiadas variantes para ser efectivas contra bots.
En estos casos, la mejor solución es aplicar un Challenge. Se recomienda limitarlo solo a las páginas problemáticas. Estos sistemas permiten establecer una duración de la validación, por ejemplo, un mes. Así, el usuario solo verá el desafío una vez durante ese periodo, y se minimiza el impacto en la experiencia de usuario, mientras se bloquea el acceso a bots más sofisticados.
Esta estrategia hay que aplicarla solo en los casos límite como estos, ya que se produce una redirección y se pierde el referer en la petición, lo que puede tener efectos colaterales.

3.7. Excepciones
No todos los bots son maliciosos:
- Los motores de búsqueda legítimos utilizan bots para indexar la web.
- Los sistemas de inteligencia artificial emplean bots no solo para tareas de entrenamiento, sino también para la generación de resultados en búsquedas.
- Las herramientas de monitorización y pruebas también pueden utilizar bots.
Por lo tanto, es fundamental identificar los bots legítimos y definir reglas de excepción en el CDN para que estos webs puedan alcanzar el sitio web.
4. Sistema de alertas
Es difícil configurar un sistema completamente inmune al tráfico de bots. Incluso con una arquitectura bien protegida, pueden producirse regresiones por errores en el desarrollo o cambios involuntarios en la configuración. Por ejemplo, un nuevo despliegue podría introducir páginas no cacheables, o una modificación mal aplicada podría debilitar alguna capa de protección
Para minimizar el impacto de estas situaciones, lo más eficaz es detectarlas lo antes posible. Para ello, es recomendable implementar sistemas de monitorización con alarmas que alerten cuando se registran patrones de tráfico inusuales hacia Drupal.
Las herramientas de monitorización, como New Relic o sistemas con Grafana, permiten configurar alertas basadas en indicadores clave, como aumentos sostenidos en el consumo de CPU o en el número de transacciones. Estos comportamientos pueden indicar que el sitio está siendo afectado por un bot, y permiten actuar con rapidez.

Conclusión
Una política de caché bien definida y mantenida es el primer mecanismo clave para reducir el impacto del tráfico de bots. Cachear tanto contenido dinámico como estático, junto con una estrategia eficaz de purgado, evita que muchas solicitudes lleguen a Drupal, protegiendo así el rendimiento del sitio. La integración con sistemas como Varnish o redes CDN refuerza esta protección, ofreciendo mayor velocidad y eficiencia.
Sin embargo, esta medida por sí sola no es suficiente. El tráfico generado por bots más sofisticados requiere un enfoque combinado: gestión avanzada a nivel de CDN, configuración de reglas específicas por User-Agent o URI, y el uso de herramientas como rate limiting o CAPTCHA para la identificación y bloqueo de los bots maliciosos o no deseados.
Además, no todos los bots son maliciosos. Bots legítimos —como los de motores de búsqueda, monitorización o pruebas— deben ser correctamente identificados y gestionados mediante reglas de excepción en el CDN, permitiendo así su acceso sin comprometer la seguridad ni el rendimiento.
Estas medidas, aplicadas de forma conjunta, permiten un control efectivo y sostenible del tráfico automatizado.