
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.
En otras palabras, el WAF actúa como un escudo entre internet y su aplicación web, bloqueando amenazas antes de que causen impacto.
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.

El funcionamiento es fácil de entender:
helm repo add crowdsec https://crowdsecurity.github.io/helm-charts
helm repo update
helm show values crowdsec/crowdsec > crowdsec-default-values.yaml
crowdsec-default-values.yamlagent:
acquisition:
- namespace: traefik
podName: traefik-*
program: traefik
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"
persistentVolume:
data:
enabled: true
storageClassName: "tu-storage-class-name"
size: 1Gi
config:
enabled: true
storageClassName: "tu-storage-class-name"
size: 100Mi
kubectl create ns crowdsec
helm install crowdsec crowdsec/crowdsec -n crowdsec -f crowdsec-default-values.yaml
kubectl -n crowdsec exec -it crowdsec-lapi-* -- sh
cscli bouncers add 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
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"
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"
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:

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.
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