Entrambi gli strumenti leggono registri e bloccano indirizzi, e a prima vista CrowdSec è un Fail2ban con codice più recente. La differenza è più sostanziale, e non sta nell’età del codice ma nell’origine della decisione di bloccare.
L’architettura
Fail2ban è un unico processo che legge i registri, conta le corrispondenze di espressioni regolari e chiama un comando del firewall. Ogni decisione si prende sulla sua macchina con i suoi contatori. Non si invia nulla da nessuna parte, non ci sono dipendenze e la configurazione sono file di testo.
CrowdSec è diviso in due, ed è la cosa principale da capire prima di installarlo. L’agente in sé si limita a rilevare: analizza i registri, applica scenari e scrive decisioni nel proprio database. Le decisioni le applica un programma a parte, il bouncer. Senza bouncer installato, CrowdSec gira, mostra avvisi, tiene un elenco di decisioni e non blocca nulla.
È la delusione più frequente al primo incontro: lo strumento è installato, gli attacchi si vedono, e il traffico scorre esattamente come prima.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
Quest’ultimo comando deve mostrare almeno una voce registrata. Un elenco vuoto significa che non c’è blocco.
La seconda differenza: la reputazione condivisa
Fail2ban conosce solo ciò che è successo da lei. Un indirizzo che ieri attaccava cento server altrui è pulito ai suoi occhi finché non bussa alla sua porta, e i suoi primi cinque tentativi sono gratis.
CrowdSec invia i segnali dei propri rilevamenti a una rete comune e ne riceve un elenco di indirizzi visti presso altri. Effetto pratico: una quota apprezzabile dei tentativi viene tagliata prima del primo. Questo conta soprattutto contro gli attacchi distribuiti — migliaia di indirizzi con un tentativo ciascuno — dove i contatori locali sono impotenti per definizione.
Ed ecco ciò che conviene sapere in anticipo: lo scambio è in entrambe le direzioni. Dal suo server escono gli indirizzi degli attaccanti e i tipi di scenari scattati. Un funzionamento del tutto locale è possibile — senza iscriversi alla console nel cloud — ma allora anche l’elenco comune le diventa inaccessibile e il vantaggio principale sparisce. È una scelta consapevole, non un dettaglio di configurazione.
I comandi di tutti i giorni
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics risponde alla domanda se i registri vengano letti del tutto: se il numero di righe analizzate è zero, la collezione per il suo server web non è installata o il percorso del registro è sbagliato. È il secondo caso più frequente di «è installato e non fa nulla».
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
Le risorse
CrowdSec è scritto in Go e tiene il proprio stato in un database. Il consumo di memoria è nell’ordine del centinaio di megabyte, più il bouncer. Su un server da un gigabyte si nota; da due in su non più. Fail2ban è più leggero, e fa meno.
Conviene tenerli entrambi
Non si intralciano: uno scrive le proprie regole nel firewall, l’altro le sue, e bloccare due volte lo stesso indirizzo non nuoce. Una ripartizione sensata è questa.
CrowdSec si prende il lavoro di massa: i tentativi contro SSH, la scansione del server web, gli indirizzi cattivi noti dall’elenco comune. Fail2ban resta dove lei ha un registro proprio con un formato proprio, per il quale scrivere un’espressione regolare è più semplice che scrivere uno scenario: un’applicazione fatta in casa, un servizio raro, un modulo di accesso particolare.
Se bisogna sceglierne uno, il criterio è questo: su un server con un sito costantemente sondato, CrowdSec dà di più grazie all’elenco comune. Su un server accessibile solo a lei via SSH con chiavi, la differenza è piccola: lì la maggior parte del lavoro è già fatta disattivando le password.
Un limite comune
Nessuno dei due protegge da una vulnerabilità applicativa. Entrambi lavorano sulla frequenza delle richieste e sulla reputazione di un indirizzo, e una richiesta che sfrutta un buco di un’estensione al primo tentativo da un indirizzo pulito passerà davanti a entrambi. È il lavoro di altri strumenti: un WAF a livello di richieste e aggiornamenti tempestivi. Bloccare indirizzi toglie il rumore di fondo, non la causa.
Il valore pratico dell’uno e dell’altro dipende dal fatto che qualcuno ne guardi il risultato. Un numero di decisioni in crescita, uno scenario scattato per la prima volta, un cambio dei paesi da cui arrivano i tentativi: ecco l’informazione per cui lo strumento è stato installato. Come appare su una pagina lo mostra la dimostrazione qui sotto.