• CrowdSec - Qué es un WAF y cómo configurarlo en Kubernetes
blog-thumb

¿Qué es un WAF?

El término WAF proviene de Web Application Firewall – o firewall de aplicaciones web.

Un firewall tradicional actúa principalmente en la capa de red, filtrando paquetes en función de IP de origen, IP de destino, puerto de origen, puerto de destino y protocolo (TCP/UDP/ICMP). Es decir, garantiza que solo las conexiones autorizadas lleguen al servidor, pero no entiende el contenido del tráfico.

El WAF, en cambio, va más allá: está diseñado específicamente para proteger aplicaciones web. En lugar de analizar solo direcciones y puertos, el WAF inspecciona el contenido de las solicitudes HTTP/HTTPS. Esto le permite identificar y bloquear accesos maliciosos que pasarían inadvertidos para un firewall común.

Ejemplos de amenazas que el WAF ayuda a mitigar

  • Inyección SQL – cuando se envían comandos SQL maliciosos para manipular bases de datos.
  • Cross-Site Scripting (XSS) – inyección de scripts que pueden robar datos de los usuarios.
  • Bots maliciosos – que intentan explotar fallas o sobrecargar la aplicación.
  • Fuerza bruta – intentos automáticos de adivinar contraseñas e inicios de sesión.

En resumen

  • Firewall tradicional = se enfoca en la red → controla quién puede conectarse (en función de IP, puertos y protocolos).
  • WAF = se enfoca en la aplicación web → analiza lo que hay dentro de la solicitud y protege contra ataques dirigidos al funcionamiento del sitio.

En otras palabras, el WAF actúa como un escudo entre internet y su aplicación web, bloqueando amenazas antes de que causen impacto.


¿Qué es CrowdSec?

CrowdSec es el WAF que usamos aquí en Gole.
Es una solución open-source, colaborativa y moderna que no solo protege tu aplicación en tiempo real, sino que también aprende de los ataques ocurridos en otras partes del mundo.

Es decir: cuando se detecta una IP maliciosa en un entorno, toda la comunidad CrowdSec puede beneficiarse y bloquear esa misma IP.

CrowdSec Logo

¿Cómo funciona CrowdSec?

El funcionamiento es fácil de entender:

  1. Monitorea los logs de servicios como Nginx, Traefik, SSH, aplicaciones web.
  2. Detecta comportamientos sospechosos (fuerza bruta, escaneos, abusos).
  3. Bloquea automáticamente las IPs maliciosas.
  4. Comparte esta información de forma anónima, fortaleciendo la red de protección.
CrowdSec Logo
Origin: CrowdSec

Funcionalidades principales

  • Monitoreo en tiempo real: captura logs de servicios como Nginx, Traefik, SSH, entre otros.
  • Detección de ataques y abusos: identifica fuerza bruta, escaneos y comportamientos anómalos.
  • Bloqueo automático de IPs: aplica sanciones locales o remotas, protegiendo tus aplicaciones.

Paso a Paso: Configurando CrowdSec en Kubernetes

1. Agregar el repositorio Helm y obtener los valores por defecto

helm repo add crowdsec https://crowdsecurity.github.io/helm-charts
helm repo update
helm show values crowdsec/crowdsec > crowdsec-default-values.yaml

2. Editar el archivo crowdsec-default-values.yaml

a) Configurar adquisición de logs (Traefik)

agent:
  acquisition:
    - namespace: traefik
      podName: traefik-*
      program: traefik

b) Registro de la instancia (LAPI)

lapi:
  env:
    - name: ENROLL_KEY
      value: "TU_ENROLL_KEY"
    - name: ENROLL_INSTANCE_NAME
      value: "mi-cluster-k8s"
    - name: ENROLL_TAGS
      value: "k8s linux producción"

c) Volúmenes persistentes

persistentVolume:
  data:
    enabled: true
    storageClassName: "tu-storage-class-name"
    size: 1Gi

  config:
    enabled: true
    storageClassName: "tu-storage-class-name"
    size: 100Mi

3. Crear namespace

kubectl create ns crowdsec

4. Instalar CrowdSec

helm install crowdsec crowdsec/crowdsec -n crowdsec -f crowdsec-default-values.yaml

5. Configurar bouncers (Traefik y Nginx)

a) Crear API Key

kubectl -n crowdsec exec -it crowdsec-lapi-* -- sh
cscli bouncers add traefik

b) Configurar middleware en Traefik

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: bouncer
  namespace: traefik
spec:
  plugin:
    bouncer:
      CrowdsecLapiKey: <TU_API_KEY>
      crowdsecLapiHost: "crowdsec-service.crowdsec.svc.cluster.local"
      crowdsecLapiPort: "8080"
      crowdsecAppsecHost: "crowdsec-appsec-service.crowdsec.svc.cluster.local"
      crowdsecAppsecPort: "7422"
      crowdsecAppsecScheme: http
      Enabled: true
      logLevel: DEBUG
      crowdsecMode: appsec

c) Configurar bouncer en Nginx

controller:
  extraInitContainers:
  - name: init-clone-crowdsec-bouncer
    image: crowdsecurity/lua-bouncer-plugin
    env:
      - name: API_URL
        value: "http://crowdsec-service.crowdsec.svc.cluster.local:8080"
      - name: API_KEY
        value: "<API KEY>"
      - name: BOUNCER_CONFIG
        value: "/crowdsec/crowdsec-bouncer.conf"

6. Activar AppSec (WAF)

appsec:
  enabled: true
  acquisitions:
    - source: appsec
      listen_addr: "0.0.0.0:7422"
      path: /
      appsec_config: crowdsecurity/crs-vpatch
      labels:
        type: appsec
  env:
    - name: COLLECTIONS
      value: "crowdsecurity/appsec-wordpress"

Monitoreo Avanzado con Grafana

El panel de CrowdSec tiene un límite de 500 alertas, lo que puede restringir la visibilidad de los eventos en entornos con alto tráfico. Para un monitoreo completo y detallado, creamos un dashboard en Grafana que permite observar bloqueos de IP, ataques y decisiones de seguridad en tiempo real.

Este dashboard incluye:

  • Bloqueos Totales por Pods: Número de intentos bloqueados por pod, ayudando a identificar cuáles están más atacados.
  • Ataques por Escenarios: Distribución de ataques según los escenarios de detección de CrowdSec, mostrando los tipos de amenaza más frecuentes.
  • Bloqueos Totales por IP: Lista de IPs bloqueadas, el escenario y el total de ocurrencias, permitiendo un seguimiento fácil de las fuentes maliciosas.
  • Registro de Decisiones: Registros detallados de decisiones con marcas de tiempo y datos de las solicitudes, proporcionando total transparencia de las acciones de CrowdSec.
CrowdSec Logo

Accede al dashboard: Monitoreo CrowdSec en Grafana

Esta función es esencial para que los equipos de seguridad monitoreen, analicen y respondan rápidamente a las amenazas en la infraestructura.


Conclusión

Con estas configuraciones, CrowdSec está integrado en tu clúster de Kubernetes, monitoreando logs, registrando instancias y protegiendo tus aplicaciones con Traefik, Nginx y WAF AppSec.

Accede a la consola: https://app.crowdsec.net/security-engines