• 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.
Mientras que un firewall tradicional protege la red en general, un WAF protege sitios y aplicaciones web, analizando las solicitudes entrantes y bloqueando accesos peligrosos.

Ayuda a defender contra ataques como:

  • SQL Injection
  • Cross-Site Scripting (XSS)
  • Bots maliciosos
  • Intentos de inicio de sesión por fuerza bruta

En resumen, el WAF es un escudo entre internet y tu aplicación, protegiendo contra 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"

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