TL;DR — Resumo Rápido

Guia completo do CrowdSec: instale, configure bouncers, cenários personalizados, listas comunitárias e proteção Nginx+SSH em servidores Linux.

Todo servidor conectado à internet está sob ataque constante: scanners SSH, crawlers de vulnerabilidades web, bots de credential-stuffing e abusadores de API geram milhões de requisições maliciosas a cada hora. CrowdSec é um sistema de prevenção de intrusões moderno e de código aberto que vai além da análise de logs em um único servidor: analisa seus registros localmente, detecta padrões de ataque usando cenários comportamentais e compartilha IPs de atacantes de forma anônima com uma comunidade global para construir listas de bloqueio colaborativas. Este guia cobre a configuração completa do CrowdSec: arquitetura, instalação no Debian/Ubuntu e RHEL/Rocky, coleções, bouncers, cenários personalizados, listas brancas, implantação multi-servidor e um passo a passo de hardening em produção protegendo Nginx e SSH.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um servidor Linux rodando Ubuntu 20.04/22.04/24.04, Debian 11/12 ou RHEL/Rocky/AlmaLinux 8/9
  • Acesso root ou sudo
  • systemd como sistema de inicialização
  • iptables, nftables ou firewalld disponíveis para o bouncer de firewall
  • Familiaridade básica com arquivos de configuração YAML

Como o CrowdSec Funciona

O CrowdSec separa a detecção de ameaças de sua aplicação em três camadas:

1. Agente (detecção) O agente do CrowdSec lê logs de arquivos, journald, Docker, Kafka ou syslog. Os logs passam por um pipeline de parsing em estágios: S00-raw normaliza o texto bruto, S01-parse extrai campos estruturados (IP, timestamp, método HTTP, caminho) e S02-enrich adiciona dados de GeoIP e CTI. Os eventos analisados alimentam cenários — máquinas de estado YAML que implementam lógica de leaky-bucket, trigger ou contador para identificar padrões de ataque.

2. API Local (coordenação) A API Local (LAPI) recebe decisões do agente, armazena-as em SQLite ou PostgreSQL e as serve para os bouncers. Em uma configuração multi-máquina, um servidor executa a LAPI enquanto todos os outros agentes e bouncers se conectam a ela via HTTPS.

3. API Central (inteligência comunitária) Ao registrar sua instância, a API Central em api.crowdsec.net envia listas de bloqueio comunitárias para sua LAPI e recebe relatórios anônimos de IPs de você. Isso transforma cada implantação do CrowdSec em um sensor que alimenta a rede global de ameaças.

4. Bouncers (aplicação) Os bouncers consultam a LAPI para obter decisões ativas e as aplicam: o bouncer de firewall adiciona regras ao iptables/nftables, o bouncer do Nginx emite respostas HTTP 403 ou desafios CAPTCHA, e o bouncer do Cloudflare cria regras de firewall na borda via API do Cloudflare.


Instalação

Ubuntu / Debian

curl -s https://install.crowdsec.net | sudo bash
sudo apt install crowdsec -y
sudo systemctl enable --now crowdsec
sudo systemctl status crowdsec

RHEL / Rocky / AlmaLinux

curl -s https://install.crowdsec.net | sudo bash
sudo dnf install crowdsec -y
sudo systemctl enable --now crowdsec

Docker

services:
  crowdsec:
    image: crowdsecurity/crowdsec:latest
    restart: unless-stopped
    environment:
      COLLECTIONS: "crowdsecurity/linux crowdsecurity/nginx crowdsecurity/sshd"
    volumes:
      - /var/log:/var/log:ro
      - crowdsec_data:/var/lib/crowdsec/data
      - crowdsec_config:/etc/crowdsec
    ports:
      - "8080:8080"

volumes:
  crowdsec_data:
  crowdsec_config:

Kubernetes (Helm)

helm repo add crowdsec https://crowdsecurity.github.io/helm-charts
helm repo update
helm install crowdsec crowdsec/crowdsec \
  --set agent.acquisition[0].namespace=default \
  --set agent.acquisition[0].podName="*" \
  --set agent.acquisition[0].program=nginx

Instalando Coleções

As coleções agrupam parsers e cenários para um serviço específico. Instale-as com cscli:

# Coleção base Linux (auth, syslog)
sudo cscli collections install crowdsecurity/linux

# Detecção de força bruta SSH
sudo cscli collections install crowdsecurity/sshd

# Detecção de ataques Nginx
sudo cscli collections install crowdsecurity/nginx

# Apache
sudo cscli collections install crowdsecurity/apache2

# WordPress
sudo cscli collections install crowdsecurity/wordpress

# Recarregar após instalar novas coleções
sudo systemctl reload crowdsec

Liste o conteúdo instalado do hub:

sudo cscli hub list
sudo cscli collections list
sudo cscli scenarios list
sudo cscli parsers list

Aquisição de Logs

O CrowdSec descobre fontes de logs via /etc/crowdsec/acquis.yaml. Múltiplos métodos são suportados:

Fonte de arquivo

filenames:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log
labels:
  type: nginx
# --- (next source)
filenames:
  - /var/log/auth.log
labels:
  type: syslog

journald / systemd

source: journalctl
journalctl_filter:
  - "_SYSTEMD_UNIT=sshd.service"
labels:
  type: syslog

Contêineres Docker

source: docker
container_name:
  - nginx
  - myapp
labels:
  type: nginx

Após editar acquis.yaml, reinicie o agente:

sudo systemctl restart crowdsec

Cenários e Parsers

Tipos de cenário

TipoDescriçãoCaso de uso
leakybucketConta eventos em janela deslizante; estouro dispara decisãoForça bruta (N falhas em T segundos)
triggerUm único evento dispara imediatamenteEventos críticos únicos
counterConta valores distintos (ex.: URLs escaneadas)Scanners, enumeradores

Cenário personalizado de exemplo

Crie /etc/crowdsec/scenarios/myapp-bruteforce.yaml:

type: leakybucket
name: myapp/bruteforce
description: "Detectar força bruta no endpoint de login do myapp"
filter: "evt.Meta.service == 'myapp' && evt.Meta.log_type == 'auth_failed'"
groupby: "evt.Meta.source_ip"
distinct: "evt.Meta.username"
capacity: 5
leakspeed: "10s"
blackhole: "5m"
labels:
  service: myapp
  type: bruteforce
  remediation: true

Campos principais:

CampoSignificado
capacityPreenchimento máximo do balde antes do estouro
leakspeedTaxa de drenagem do balde
blackholeTempo mínimo entre estouros repetidos para o mesmo IP
groupbyPor que agrupar eventos (geralmente IP de origem)
distinctConta valores distintos para evitar evasão com múltiplos usuários
remediation: trueEstouro gera uma decisão de bloqueio

Instalando e Configurando Bouncers

Bouncer de firewall (iptables/nftables)

# Backend iptables
sudo apt install crowdsec-firewall-bouncer-iptables -y

# Backend nftables
sudo apt install crowdsec-firewall-bouncer-nftables -y

sudo systemctl enable --now crowdsec-firewall-bouncer

Verifique o registro:

sudo cscli bouncers list

Bouncer do Nginx

sudo apt install crowdsec-nginx-bouncer -y

Configuração em /etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf:

API_KEY=<auto-gerado>
API_URL=http://localhost:8080
MODE=ban          # ban | captcha | throttle
CAPTCHA_SITE_KEY=<chave-recaptcha-v2>
CAPTCHA_SECRET_KEY=<segredo-recaptcha-v2>
CAPTCHA_GRACE_TIME=1800

Bouncer do Cloudflare

sudo apt install crowdsec-cloudflare-bouncer -y
sudo crowdsec-cloudflare-bouncer -g <CF_API_TOKEN> -o /etc/crowdsec/bouncers/crowdsec-cloudflare-bouncer.yaml
sudo systemctl enable --now crowdsec-cloudflare-bouncer

Referência do cscli

# Decisões
sudo cscli decisions list                    # Todos os bloqueios ativos
sudo cscli decisions add -i 203.0.113.42     # Bloqueio manual
sudo cscli decisions add -r 10.0.0.0/8 -t ban -d 1h  # Bloquear CIDR
sudo cscli decisions delete -i 203.0.113.42  # Remover bloqueio

# Alertas
sudo cscli alerts list                       # Cenários disparados recentemente
sudo cscli alerts inspect <id>               # Contexto completo do alerta

# Gerenciamento do hub
sudo cscli hub list
sudo cscli hub update
sudo cscli collections upgrade crowdsecurity/nginx

# Gerenciamento de máquinas (multi-servidor)
sudo cscli machines list
sudo cscli machines add agent-web-02 --auto

# Gerenciamento de bouncers
sudo cscli bouncers list
sudo cscli bouncers add meu-bouncer

# Métricas
sudo cscli metrics

Listas de Bloqueio Comunitárias e API Central

Registre-se na API Central para desbloquear as listas comunitárias:

sudo cscli console enroll <seu-token-de-app.crowdsec.net>
sudo systemctl restart crowdsec

As listas comunitárias incluem:

  • Lista de reputação de IPs do CrowdSec — IPs detectados atacando implantações do CrowdSec no mundo todo
  • Firehol Level 1 — IPs maliciosos conhecidos
  • Nós de saída Tor — opcional, para bloquear tráfego anônimo
  • Listas de proxy/VPN — IPs de saída de provedores cloud usados por bots

Cada decisão da API Central tem um type: ban (bloqueio rígido), captcha (desafio CAPTCHA) ou throttle (limitação de taxa).

Listas Brancas

Lista branca de parser (pré-cenário)

Crie /etc/crowdsec/parsers/s02-enrich/whitelist.yaml:

name: minhaempresa/whitelists
description: "IPs de escritório e monitoramento"
whitelist:
  reason: "IPs internos e confiáveis"
  ip:
    - "192.168.1.0/24"
    - "10.0.0.0/8"
  cidr:
    - "172.16.0.0/12"

Lista branca pós-estouro

name: minhaempresa/postoverflow-whitelist
description: "Permitir monitoramento sintético de IPs conhecidos"
whitelist:
  reason: "Monitoramento de disponibilidade"
  expression:
    - "evt.Overflow.Alert.Source.IP in ['203.0.113.100', '203.0.113.101']"

Configuração Multi-Servidor

Servidor LAPI

# /etc/crowdsec/config.yaml
api:
  server:
    listen_uri: 0.0.0.0:8080
    tls:
      cert_file: /etc/crowdsec/ssl/cert.pem
      key_file: /etc/crowdsec/ssl/key.pem

Registro de agentes adicionais

Em cada servidor adicional:

sudo apt install crowdsec -y
sudo cscli lapi register -u https://servidor-lapi:8080
# No servidor LAPI, validar:
sudo cscli machines validate <machine-id>

Bouncer conectado à LAPI remota

# /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
api_url: https://servidor-lapi:8080
api_key: <chave-bouncer-do-servidor-lapi>

Monitoramento: Prometheus e Grafana

O CrowdSec expõe métricas Prometheus em http://localhost:6060/metrics. Importe o dashboard oficial do Grafana (ID 14584) para uma visão visual de:

  • Decisões emitidas por hora
  • Serviços mais atacados
  • Taxas de acerto de parsers
  • Frequência de estouro de cenários

Verificação rápida via CLI:

sudo cscli metrics

CrowdSec vs Alternativas

FerramentaMecanismoLinguagemMulti-servidorInteligência ComunitáriaBouncers
CrowdSecCenários comportamentaisGoLAPI nativoSim (API Central)Firewall, Nginx, CF, personalizado
Fail2BanRegex de logsPythonSync manualNãoiptables, nftables, firewalld
SuricataIDS/IPS de redeCModo clusterAssinaturas de regrasNFQueue
OSSEC/WazuhHIDS + análise de logsCManager-agenteRegras Wazuh cloudResposta ativa
ModSecurityWAF (camada HTTP)CProxy reversoOWASP CRSMódulo Nginx/Apache
Cloudflare WAFFirewall de bordaN/ACDN globalIntel de ameaças CFApenas borda CF

Implantação em Produção: Nginx + SSH

Passo 1 — Instalar CrowdSec e coleções:

curl -s https://install.crowdsec.net | sudo bash
sudo apt install crowdsec -y
sudo cscli collections install crowdsecurity/linux \
  crowdsecurity/sshd \
  crowdsecurity/nginx

Passo 2 — Configurar aquisição de logs em /etc/crowdsec/acquis.yaml:

filenames:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log
labels:
  type: nginx
# --- (next source)
source: journalctl
journalctl_filter:
  - "_SYSTEMD_UNIT=sshd.service"
labels:
  type: syslog

Passo 3 — Instalar bouncer de firewall:

sudo apt install crowdsec-firewall-bouncer-nftables -y
sudo systemctl enable --now crowdsec-firewall-bouncer

Passo 4 — Lista branca de IPs confiáveis:

# /etc/crowdsec/parsers/s02-enrich/whitelist.yaml
name: meuserv/whitelist
description: "IPs confiáveis"
whitelist:
  reason: "Escritório e VPN"
  ip:
    - "192.168.1.0/24"

Passo 5 — Registrar na API Central:

sudo cscli console enroll <token-de-app.crowdsec.net>
sudo systemctl restart crowdsec

Passo 6 — Verificar que a proteção está ativa:

sudo cscli decisions list
sudo cscli metrics
sudo cscli bouncers list

Casos Especiais e Advertências

  • Falsos positivos de balanceadores de carga: Se todo o tráfego chega através de um proxy reverso, o CrowdSec vê apenas o IP do proxy. Configure o parsing de X-Forwarded-For ou adicione o IP do proxy à lista branca.
  • Logs do Docker: Os logs do Docker requerem o tipo de aquisição source: docker. Montar /var/log não funciona para contêineres que escrevem em stdout/stderr.
  • Lacunas de cobertura de parsers: Verifique sudo cscli metrics para valores altos de unparsed — indicam linhas de log sem parser instalado.
  • Chaves de API de bouncers: Se regenerar as chaves após reinstalar a LAPI, atualize o arquivo de configuração de cada bouncer e reinicie o serviço.

Resumo

O CrowdSec fornece um sistema de prevenção de intrusões em camadas e alimentado pela comunidade que escala de um único VPS a uma frota multi-datacenter:

  • O agente analisa logs através de um pipeline de parsers em estágios e avalia eventos com cenários YAML de leaky-bucket, trigger e contador
  • A API Local coordena decisões e conecta bouncers a agentes em implantações multi-servidor
  • Os bouncers aplicam decisões no firewall (iptables/nftables), aplicação (Nginx) ou CDN (Cloudflare)
  • O cscli gerencia coleções, decisões, alertas, máquinas, bouncers e métricas pela linha de comando
  • As listas de bloqueio comunitárias via API Central adicionam inteligência de ameaças global sem configuração adicional
  • Cenários e listas brancas personalizados permitem ajustar a proteção com precisão

Artigos Relacionados