¿Cómo determinar (y bloquear) las direcciones IP de scrapers / bots a través de CloudFlare en Discourse?

Tengo un escenario en el que se han detectado más de 13.000 rastreadores y el tráfico de la base de datos se ha disparado. Alguien está claramente haciendo scraping de nuestro foro, pero no estoy seguro de cómo determinar la dirección IP y tomar medidas en su contra, ya que está pasando a través de DNS de CloudFlare.

¿Alguna idea sobre cómo hacerlo?

Me gustaría configurar una solución automática de limitación de velocidad que detecte comportamientos de red agresivos y luego simplemente limite su velocidad o los deshabilite durante un período de tiempo.

¿Tienes la plantilla de Cloudflare en tu archivo de configuración yml?

Sí, esto está en /var/discourse/containers/app.yml:

  - "templates/cloudflare.template.yml"

Debo mencionar que estoy encontrando un obstáculo importante: veo que el acceso a la base de datos (utilizo otro servidor de base de datos en el mismo sitio) se mantiene constantemente entre 13 y 20 Mbps. Este tráfico se disparó cuando la cantidad de rastreadores aumentó drásticamente y no ha disminuido en casi dos semanas. El panel de control del servidor muestra que el tráfico alcanzó niveles ridículos en ese mismo momento y no ha bajado de ese nivel de acceso constante; de hecho, va camino a agotar el ancho de banda de los servidores si esto continúa.

¿Tienes incluida la plantilla de limitación de velocidad? ¿Ves los números de IP correctos en los registros (no las IPs de Cloudflare)?

También tengo esto en app.yml:

  - "templates/web.ratelimited.template.yml"

También veo las direcciones IP correctas para los usuarios. No estoy seguro de a qué te refieres con los registros. Hmm.

Como recordarás, he pensado en intentar reducir el consumo de ancho de banda en este momento cambiando todo para que use direcciones IP privadas internas, ya que eso al menos me evitará recibir facturas elevadas.

He notado algo más peculiar aquí. Cambié la conexión a la base de datos de la IP pública a la IP privada para no agotar tan rápido el límite mensual de transferencia, pero en el servidor de la base de datos esperaba ver únicamente conexiones realizadas desde la IP privada del servidor Docker de Discourse. Ahora sí veo tráfico desde la IP privada local, pero todavía veo cantidades desproporcionadas de tráfico procedente de la IP pública, lo que sigue consumiendo rápidamente el límite mensual.

He buscado y buscado tanto la dirección IP pública como el nombre de host del servidor de la base de datos en el servidor Docker de Discourse, pero no los encuentro en ningún lado. Incluso si entro en la aplicación (./launcher enter app) y ejecuto env | grep DB, veo la dirección IP PRIVADA correcta para la LAN que se está utilizando aquí. He buscado con grep por todo el sistema de archivos y simplemente no encuentro las ocurrencias que esperaría.

¿Alguna idea sobre cómo Discourse o la imagen de Docker podrían estar acciendo aún a la IP incorrecta? Simplemente no logro entender de dónde se origina todo este tráfico de IP pública en el servidor de Discourse.