• CrowdSec - O que é um WAF e como configurar no Kubernetes
blog-thumb

O que é um WAF?

O termo WAF vem de Web Application Firewall – ou firewall de aplicação web.
Enquanto um firewall tradicional protege a rede de forma geral, o WAF protege sites e aplicações web, analisando as requisições que chegam e bloqueando acessos perigosos.

Ele ajuda a defender contra ataques como:

  • SQL Injection
  • Cross-Site Scripting (XSS)
  • Bots maliciosos
  • Tentativas de login forçado (brute force)

Em resumo, o WAF é um escudo entre a internet e sua aplicação, protegendo contra ameaças antes que causem impacto.


O que é o CrowdSec?

O CrowdSec é o WAF que usamos aqui na Gole.
Ele é uma solução open-source, colaborativa e moderna, que além de proteger sua aplicação em tempo real, também aprende com ataques sofridos em outros lugares do mundo.

Ou seja: quando um IP malicioso é detectado em um ambiente, toda a comunidade CrowdSec pode se beneficiar e bloquear esse mesmo IP.

CrowdSec Logo

Como o CrowdSec funciona?

O funcionamento é simples de entender:

  1. Monitora os logs de serviços como Nginx, Traefik, SSH, aplicações web.
  2. Detecta comportamentos suspeitos (força bruta, scans, abusos).
  3. Bloqueia automaticamente os IPs maliciosos.
  4. Compartilha de forma anônima essas informações, fortalecendo a rede de proteção.
CrowdSec Logo
Fonte: CrowdSec

Principais Funcionalidades

  • Monitoramento em tempo real: captura logs de serviços como Nginx, Traefik, SSH, entre outros.
  • Detecção de ataques e abusos: identifica brute force, scans e comportamentos anômalos.
  • Bloqueio automático de IPs: aplica sanções locais ou remotas, protegendo suas aplicações.

Passo a Passo: Configurando o CrowdSec no Kubernetes

1. Adicionar o repositório Helm e obter valores padrão

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

2. Editar o arquivo crowdsec-default-values.yaml

a) Configurar aquisição de logs (Traefik)

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

b) Registro da instância (LAPI)

lapi:
  env:
    - name: ENROLL_KEY
      value: "SEU_ENROLL_KEY"
    - name: ENROLL_INSTANCE_NAME
      value: "meu-cluster-k8s"
    - name: ENROLL_TAGS
      value: "k8s linux producao"

c) Volumes persistentes

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

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

3. Criar namespace

kubectl create ns crowdsec

4. Instalar o CrowdSec

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

5. Configurar bouncers (Traefik e Nginx)

a) Criar API Key

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

b) Configurar middleware no Traefik

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: bouncer
  namespace: traefik
spec:
  plugin:
    bouncer:
      CrowdsecLapiKey: <SUA_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 no 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. Ativar o 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"

Conclusão

Com essas configurações, o CrowdSec está integrado ao seu cluster Kubernetes, monitorando logs, registrando instâncias e protegendo suas aplicações com Traefik, Nginx e WAF AppSec.

Acesse o console: https://app.crowdsec.net/security-engines