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.
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.yamlse usi container - [ ] Dashboard configurata e protetta dietro reverse proxy
- [ ] Notifiche configurate (email, Slack, Discord) per ban critici
- [ ] Aggiornamenti automatici:
apt install unattended-upgradese 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
- Documentazione ufficiale: docs.crowdsec.net
- Hub di scenari e collezioni: hub.crowdsec.net
- Repository GitHub: github.com/crowdsecurity/crowdsec
Articolo pubblicato su DanpLab. CrowdSec è software libero rilasciato sotto licenza MIT.