TPTito Pinardo Gutiérrez
← Artículos
English

CrowdSec detrás de Cloudflare: casi bloqueo a todo el mundo

Quería que la puerta pública del homelab reconociera escaneos y fuerza bruta y los bloqueara, con CrowdSec y su lista comunitaria. Antes de activarlo miré qué vería: casi todas las peticiones venían de unas pocas IPs de Cloudflare. CrowdSec habría bloqueado a Cloudflare entero. El arreglo fue enseñar a Traefik de quién fiarse, y comprobar que una cabecera falsa no engaña.

  • CrowdSec
  • Traefik
  • Linux / SSH hardening

Qué quería

Todo el tráfico web de internet entra por Traefik, detrás de Cloudflare. CrowdSec lee su registro de accesos y reconoce escenarios: escaneos de rutas conocidas, búsqueda de ficheros sensibles, fallos de seguridad conocidos y fuerza bruta. Comparte lo que ve con su red comunitaria y recibe la lista de IPs maliciosas que han visto los demás. Un plugin de Traefik aplica sus decisiones en la entrada.

Lo que habría visto

Antes de instalar nada miré el registro: el 95 % de las peticiones venían de un puñado de IPs, todas de Cloudflare. Tiene sentido: detrás de Cloudflare, la conexión siempre llega desde Cloudflare, y la IP del visitante viaja en una cabecera. Traefik no se fiaba de esa cabecera, así que apuntaba la de Cloudflare.

Con ese registro, CrowdSec habría visto a «Cloudflare» haciendo de todo, la habría bloqueado y la web habría dejado de verse para casi todo el mundo.

De quién fiarse

Traefik ahora se fía de la cabecera solo si la conexión viene de los rangos publicados de Cloudflare. Si alguien se conecta directamente y trae esa cabecera, Traefik la quita y apunta la IP de verdad.

Queda un truco: mandar una cabecera falsa a través de Cloudflare. Cloudflare no la borra, añade la IP real al final. Por eso CrowdSec y el plugin toman la última IP de la cadena, la que pone Cloudflare, y no la primera. Lo comprobé con una línea con una cabecera falsa: no engaña.

De paso, los servicios de detrás también reciben ahora la IP real.

visitante → Cloudflare → Traefik
X-Forwarded-For: 203.0.113.9, 198.51.100.7
                 └ la pone quien sea └ la añade Cloudflare: esta es la que cuenta

Antes de bloquear, mirar

Aun con la IP real, bloquear a alguien legítimo (un amigo en los servidores de juegos, yo mismo desde fuera) es peor que dejar pasar un escaneo que no encuentra nada. Por eso, una semana solo mirando: cada mañana llega un resumen con lo que detectó, cuántas IPs de la lista comunitaria vinieron y, aparte, las IPs que habría bloqueado y que recibieron respuestas correctas, las candidatas a falso positivo.

Y por el camino, los registros de Traefik vuelven a rotar cada día: el de accesos iba ya por 570 MB.

Tres días después

En 72 horas solo mirando, CrowdSec habría bloqueado 7.875 peticiones de 143 IPs: sondeos, búsquedas de WordPress y de paneles, ficheros sensibles. La lista comunitaria aportaba otras 17.451 IPs conocidas. Las 71 IPs marcadas que habían recibido alguna respuesta correcta eran escáneres de nubes visitando páginas públicas: ni un falso positivo conocido. Desde el 18-10, bloquea en la puerta.