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

Um firewall tradicional atua principalmente na camada de rede, filtrando pacotes com base em informações como IP de origem, IP de destino, porta de origem, porta de destino e protocolo (TCP/UDP/ICMP). Ou seja, ele garante que apenas conexões autorizadas cheguem ao servidor, mas não entende o conteúdo do tráfego.

Já o WAF vai além: ele é projetado especificamente para proteger aplicações web. Em vez de analisar só endereços e portas, o WAF inspeciona o conteúdo das requisições HTTP/HTTPS. Isso permite identificar e bloquear acessos maliciosos que passam despercebidos por um firewall comum.

Exemplos de ameaças que o WAF ajuda a mitigar

  • SQL Injection – quando comandos SQL maliciosos são enviados para manipular bancos de dados.
  • Cross-Site Scripting (XSS) – injeção de scripts que podem roubar dados de usuários.
  • Bots maliciosos – que tentam explorar falhas ou sobrecarregar a aplicação.
  • Brute force – tentativas automáticas de adivinhar senhas e logins.

Resumindo

  • Firewall tradicional = foca em rede → controla quem pode se conectar (baseado em IP, portas e protocolos).
  • WAF = foca em aplicação web → analisa o que está dentro da requisição e protege contra ataques direcionados ao funcionamento do site.

Em outras palavras, o WAF funciona como um escudo entre a internet e sua aplicação web, bloqueando 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"

Monitoramento Avançado com Grafana

O console do CrowdSec possui um limite de 500 alertas, o que pode restringir a visualização de eventos em ambientes com tráfego intenso. Para um monitoramento completo e detalhado, criamos um dashboard no Grafana que permite observar bloqueios de IP, ataques e decisões de segurança em tempo real.

Este dashboard inclui:

  • Block Total for Pods: Número de tentativas bloqueadas por pod, ajudando a identificar quais estão mais atacados.
  • Attacks by Scenarios: Distribuição de ataques por cenários de detecção do CrowdSec, mostrando os tipos de ameaça mais frequentes.
  • Total Ban by IP: Lista de IPs bloqueados, o cenário e o total de ocorrências, permitindo acompanhar fontes maliciosas.
  • Decisions Log: Logs detalhados de decisões com timestamps e dados das requisições, garantindo total transparência das ações do CrowdSec.
CrowdSec Logo

Acesse o dashboard: Monitoramento CrowdSec no Grafana

Este recurso é essencial para equipes de segurança que precisam monitorar, analisar e responder rapidamente a ameaças na infraestrutura.


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