CrowdSec: proteção colaborativa contra IPs maliciosos

CrowdSec é a evolução do Fail2ban, analisa logs como ele, mas compartilha inteligência de ameaças com uma rede colaborativa global. Se um IP atacar outro servidor CrowdSec em qualquer lugar do mundo, seu servidor já fica protegido antes mesmo de ser atacado. Listas de IPs maliciosos atualizadas em tempo real, sem custo.

Instalar o CrowdSec

Instalação do agente e bouncer no Ubuntu:

bash
# Adicionar repositório oficial:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh \
  | sudo bash

# Instalar CrowdSec e bouncer para firewall:
sudo apt install -y crowdsec crowdsec-firewall-bouncer-iptables

# Verificar instalação:
sudo cscli version
sudo systemctl status crowdsec

# Ver cenários instalados (padrão: ssh, web attacks, etc.):
sudo cscli collections list

# Ver decisões de ban ativas:
sudo cscli decisions list

# Ver alertas detectados:
sudo cscli alerts list

# Métricas em tempo real:
sudo cscli metrics

Configurar coleções para Nginx e outros serviços

Instalar parsers e cenários para os serviços em execução:

bash
# Instalar coleções populares:
sudo cscli collections install crowdsecurity/nginx
sudo cscli collections install crowdsecurity/linux
sudo cscli collections install crowdsecurity/sshd
sudo cscli collections install crowdsecurity/http-cve  # CVEs web conhecidas
sudo cscli collections install crowdsecurity/wordpress # ataques WordPress

# Ver coleções disponíveis:
sudo cscli hub list

# Configurar datasources — /etc/crowdsec/acquis.yaml:
# Adicionar logs do Nginx:
cat >> /etc/crowdsec/acquis.yaml << 'EOF'
---
filenames:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log
labels:
  type: nginx
EOF

# Reiniciar após mudanças:
sudo systemctl reload crowdsec

# Verificar se os logs estão sendo lidos:
sudo cscli metrics | grep nginx

Instalar o bouncer do Nginx (mais eficiente)

Bloqueio diretamente no Nginx em vez de firewall iptables:

bash
# Bouncer para Nginx — bloqueia na camada HTTP (retorna 403):
sudo apt install -y crowdsec-nginx-bouncer

# Configurar /etc/crowdsec/bouncers/nginx.conf:
# (gerado automaticamente, apenas verificar)
cat /etc/crowdsec/bouncers/nginx.conf

# Adicionar ao nginx.conf principal:
# /etc/nginx/conf.d/crowdsec.conf:
lua_package_path '/usr/lib/crowdsec/lua/nginx/?.lua;;';
lua_shared_dict crowdsec_cache 50m;
init_by_lua_block {
    cs = require "crowdsec"
    local ok, err = cs.init("/etc/crowdsec/bouncers/crowdsec-nginx-bouncer.conf")
    if ok == nil then
        error(err)
    end
}
access_by_lua_block {
    local ok, err = cs.allow(ngx.var.remote_addr)
    if ok == nil then
        error(err)
    end
}

# Testar config e reiniciar nginx:
sudo nginx -t && sudo systemctl reload nginx

Gerenciar IPs: whitelist, blacklist e decisões manuais

Controle manual sobre a lista de IPs banidos:

bash
# Ver todas as decisões ativas:
sudo cscli decisions list

# Banir IP manualmente (por 24h):
sudo cscli decisions add --ip 192.168.1.100 --duration 24h --reason "teste manual"

# Banir range de IPs (CIDR):
sudo cscli decisions add --range 185.220.101.0/24 --duration 72h --reason "tor exit node"

# Banimento permanente:
sudo cscli decisions add --ip 1.2.3.4 --duration 8760h --reason "atacante recorrente"

# Remover ban de IP:
sudo cscli decisions delete --ip 1.2.3.4

# Whitelist — nunca banir esses IPs:
sudo cscli whitelists add --scope ip --value 177.10.0.1 --reason "meu IP fixo"

# Ver whitelist:
sudo cscli whitelists list

# Exportar lista de IPs banidos:
sudo cscli decisions list --output json | jq '.[].value' | sort -u

Dashboard e integração com a comunidade CrowdSec

Conectar ao CrowdSec Central API e usar listas de bloqueio comunitárias:

bash
# Registrar a instância no CrowdSec (gratuito):
sudo cscli console enroll CHAVE_DO_DASHBOARD

# O CrowdSec Central API fornece:
# - Blocklists comunitárias (IPs atacando outras instâncias)
# - Dashboard web para visualizar ataques
# - Relatórios de segurança

# Instalar blocklist premium (gratuita para self-hosted):
sudo cscli bouncers add nome-do-bouncer
sudo cscli hub upgrade

# Ver estatísticas de bloqueio:
sudo cscli metrics show acquisition
sudo cscli metrics show parsers
sudo cscli metrics show scenarios

# Logs do CrowdSec:
sudo journalctl -u crowdsec -f

# Modo debug para troubleshooting:
sudo cscli explain --log "Jun 07 10:00:00 srv sshd: Failed password for root from 1.2.3.4" --type sshd

Não quer configurar manualmente?

Implante o VPS em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Perguntas frequentes

CrowdSec tem vantagens claras: inteligência coletiva (listas de IPs maliciosos conhecidos globalmente), bouncers separados do agente (um agente pode alimentar múltiplos bouncers), logs mais ricos e dashboard web. Fail2ban: mais simples, sem dependência de servidor central, mais fácil de debugar. Para nova instalação: CrowdSec. Se você já tem Fail2ban funcionando: só migre se precisar das features extras.

Não, o CrowdSec só compartilha sinals de ataque (IPs + tipo de ataque + timestamp) com a Central API, nunca o conteúdo dos logs. O agente roda localmente e processa os logs no próprio servidor. O compartilhamento é opt-in e pode ser desabilitado.

Sim, via docker-compose.yml oficial ou instalando o agente no host para monitorar logs de containers via volume. Para Nginx em Docker: montar o volume de logs do Nginx (/var/log/nginx) no host e configurar o CrowdSec no host para monitorar esses logs. Alternativa: imagem Docker do CrowdSec com socket Docker montado.

Agente: analisa logs, detecta comportamentos maliciosos e toma decisões (banir/alertar). Bouncer: aplica as decisões, cada bouncer interage com um componente diferente (iptables, Nginx, HAProxy, Cloudflare). Você pode ter um agente alimentando múltiplos bouncers, ou um agente na máquina central distribuindo decisões para bouncers em múltiplos servidores.

sudo cscli alerts list mostra alertas detectados. Para testar o bouncer: sudo cscli decisions add --ip SEU_IP e tente acessar o serviço protegido, deve receber 403 ou conexão recusada. Depois: sudo cscli decisions delete --ip SEU_IP para desbanir. Para simular ataque: sudo cscli simulation list mostra cenários em modo simulação.