DanpLab · Lab NoteArchitettura operativa

CrowdSec: alternativa moderna a Fail2Ban per homelab e piccole infrastrutture

CrowdSec è un IPS collaborativo open source che supera i limiti di Fail2Ban con rilevamento comportamentale, blocklist condivise e supporto nativo per container. Guida pratica all'installazione su homelab Linux.

4 min di letturaNota basata su utilizzo operativo reale
crowdsecsicurezzahomelabfail2banlinuxdocker

Fail2Ban è stato per anni lo strumento di riferimento per proteggere i server Linux dagli attacchi brute-force. Funziona, è semplice, ma ha limiti noti: analizza solo i log locali, non condivide intelligence con altri nodi, richiede regole manuali per ogni servizio e non ha consapevolezza del contesto. CrowdSec risolve questi problemi con un approccio moderno: è un IPS (Intrusion Prevention System) open source, collaborativo, con un motore comportamentale e una rete di threat intelligence condivisa.

Perché CrowdSec e non Fail2Ban

Fail2Ban conta i tentativi falliti nei log e applica un ban temporaneo via iptables. Funziona bene per SSH e pochi altri servizi, ma diventa fragile quando si aggiungono container Docker, reverse proxy o applicazioni web complesse. CrowdSec introduce tre differenze fondamentali:

  • Rilevamento comportamentale: non conta solo i fallimenti, ma analizza pattern di attacco (scansioni, crawling aggressivo, exploit noti) tramite "scenari" predefiniti.
  • Threat intelligence condivisa: ogni nodo CrowdSec può inviare segnali anonimi alla rete centrale e ricevere blocklist aggiornate in tempo reale da tutti i partecipanti. Un attaccante bloccato su un server viene automaticamente bloccato anche sul tuo.
  • Architettura a componenti: l'agente di rilevamento (crowdsec) è separato dal componente di remediation (bouncer). Puoi avere un agente che analizza log e più bouncer (iptables, nginx, Cloudflare, Traefik) che applicano le decisioni.

Installazione su Debian/Ubuntu

L'installazione è semplice e ben documentata. Su Debian 12 o Ubuntu 24.04, aggiungi il repository ufficiale e installa:


wget -qO /usr/share/keyrings/crowdsec-archive-keyring.asc https://packagecloud.io/crowdsec/crowdsec/gpgkey
echo "deb [signed-by=/usr/share/keyrings/crowdsec-archive-keyring.asc] https://packagecloud.io/crowdsec/crowdsec/debian/ bookworm main" > /etc/apt/sources.list.d/crowdsec.list
apt update && apt install crowdsec

Al termine, CrowdSec è già attivo e monitora i log di sistema. Verifica lo stato:

cscli metrics

L'output mostra il numero di decisioni attive, gli scenari che hanno fatto match e le ban list correnti.

Configurare i bouncer

Il bouncer iptables è incluso di default e applica i ban a livello kernel. Per servizi esposti via reverse proxy, conviene installare il bouncer specifico:


apt install crowdsec-nginx-bouncer


apt install crowdsec-firewall-bouncer-cloudflare

Per Docker, CrowdSec può leggere i log dei container tramite il datasource docker:


source: docker
container_name:
  - traefik
  - nginx-proxy
labels:
  type: syslog

Dopo ogni modifica, ricarica la configurazione:

systemctl reload crowdsec

Scenari personalizzati per homelab

CrowdSec include scenari predefiniti per SSH, Nginx, Apache, MySQL, WordPress e molti altri. Per un homelab tipico, puoi creare scenari personalizzati. Ecco un esempio per proteggere un'istanza Vaultwarden:


type: leaky
name: danplab/vaultwarden-bf
description: "Detect brute-force on Vaultwarden"
filter: "evt.Meta.log_type == 'vaultwarden' && evt.Meta.http_status == '401'"
leakspeed: "10s"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 5m
labels:
  remediation: true
  classification: bruteforce

La dashboard locale

CrowdSec include una dashboard web leggera (Metabase-based) per visualizzare statistiche e decisioni:

cscli dashboard setup
cscli dashboard start

La dashboard è accessibile su http://127.0.0.1:8080 e va protetta dietro reverse proxy con autenticazione.

Checklist di hardening per homelab

Prima di considerare completata l'installazione, verifica questi punti:

  • [ ] CrowdSec avviato e abilitato al boot: systemctl enable --now crowdsec
  • [ ] Almeno un bouncer attivo: cscli bouncers list
  • [ ] Scenari pertinenti caricati: cscli scenarios list
  • [ ] Iscrizione alla rete di threat intelligence (gratuita): cscli console enroll
  • [ ] Log Docker inclusi in acquis.yaml se usi container
  • [ ] Dashboard configurata e protetta dietro reverse proxy
  • [ ] Notifiche configurate (email, Slack, Discord) per ban critici
  • [ ] Aggiornamenti automatici: apt install unattended-upgrades e includi il repo CrowdSec

Confronto rapido: Fail2Ban vs CrowdSec

| Caratteristica | Fail2Ban | CrowdSec | |---|---|---| | Rilevamento | Conteggio regex su log | Analisi comportamentale multi-fase | | Threat intelligence | No | Sì, rete globale condivisa | | Bouncer multipli | Solo iptables/firewalld | iptables, nginx, Cloudflare, Traefik, pf | | Supporto container | Manuale | Nativo via acquis.yaml | | Dashboard | No (solo CLI) | Sì, integrata | | Performance | Carico CPU su log grandi | Più efficiente, parsing ottimizzato | | Curva di apprendimento | Molto bassa | Media |

Quando restare su Fail2Ban

CrowdSec non è sempre la scelta giusta. Se hai un singolo VPS con solo SSH esposto e vuoi la configurazione più semplice possibile, Fail2Ban resta perfettamente adeguato. CrowdSec brilla quando hai più servizi, container, reverse proxy e vuoi una protezione coordinata con intelligence esterna.

Risorse


Articolo pubblicato su DanpLab. CrowdSec è software libero rilasciato sotto licenza MIT.