TL;DR Ho provato crowdsec, una soluzione IPS open source alternativa a fail2ban, e sono rimasto impressionato dalla flessibilità e semplicità di utilizzo.
fail2ban è probabilmente uno degli IPS (Intrusion Prevention System) più semplici e usati nei servers GNU/Linux di tutto il mondo. È basato sulla ricerca di elementi chiave, attraverso espressioni regolari, nei log dei demoni di sistema, che fanno scattare le actions, come ad esempio il ban dell’IP malevolo attraverso iptables.
Tra i tanti limiti di cui soffre fail2ban, forse uno dei più sentiti è la difficoltà di renderlo interattivo con altre istanze: se ho 10 server e uno viene attaccato dall’IP X, perché non bloccare l’IP X anche sugli altri 9, attraverso un meccanismo automatico che raccoglie gli eventi a livello centrale, per poi inviarli a tutte le istanze?
Essenzialmente, ma non solo, crowdsec è questo: una specie di fail2ban on steroid che, oltre a individuare un potenziale attacco attraverso l’analisi di più fonti (“collections“) e reagendo usando uno o più bouncers, i dati –minimizzati e anonimizzati– vengono inviati alla Crowdsec Central API per poter essere poi condivisi con la comunità.
Da poco hanno anche implementato, attualmente in beta, una comoda e funzionale console web-based per la gestione delle istanze crowdsec, il controllo degli eventi e molto altro.
Installazione
Installare crowdsec è abbastanza veloce e banale. Seguendo le istruzioni a seconda della distribuzione usata, in pochi instanti sarete in grado di avere la vostra istanza pronta e funzionante. Ad esempio, su Debian/Ubuntu sarà sufficiente:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
poi installiamo crowdsec:
apt install crowdsec
dopodiché procediamo a installare il bouncer per iptables, per bloccare a livello di firewall gli IP da cui originano gli attacchi al nostro sistema:
apt install crowdsec-firewall-bouncer-iptables
Una volta completata l’installazione, il comando cscli permette di interagire con il sistema.
Ad esempio, cscli parsers list ritornerà l’elenco dei parser installati.
L’installazione dei parser che desideriamo si effettua sempre con cscli (la libreria dei parser disponibili è qui). Ad esempio, per il parsing dei log di Apache2:
sudo cscli collections install crowdsecurity/apache2
e poi ricordiamoci di riavviare il demone di crowdsec:
sudo systemctl reload crowdsec
Configurazione
La configurazione è in /etc/crowdsec e, nel caso si desiderasse indicare quali log monitorare oltre quelli di default, il file da modificare, in formato YAML, è acquis.yaml:
#Generated acquisition file - wizard.sh (service: apache2) / files : /var/log/apache2/modsec_audit.log /var/log/apache2/error.log
filenames:
- /var/log/apache2/modsec_audit.log
- /var/log/apache2/error.log
labels:
type: apache2
---
#Generated acquisition file - wizard.sh (service: sshd) / files : /var/log/auth.log
filenames:
- /var/log/auth.log
labels:
type: syslog
---
#Generated acquisition file - wizard.sh (service: linux) / files : /var/log/syslog /var/log/messages
filenames:
- /var/log/syslog
- /var/log/messages
labels:
type: syslog
---
Altri parametri sono nel file config.yaml ma, al momento, non ho ancora avuto la necessità di modificarli da quanto già presente di default.
Plugin di WordPress
Tra le funzionalità più interessanti, credo che il plugin di WordPress sia uno dei più utili per chi si trova a dover proteggere un server con siti web basati sul popolare CMS.
Una volta installata e verificata l’istanza di crowdsec, si procede a installare l’omonimo plugin per WordPress. Qui si procede a indicare la URL dell’istanza (http://localhost:8080) e la chiave API generata con il comando:
cscli bouncers add wordpress-bouncer
Se tutto è andato a buon fine, non dovreste aver bisogno di fare altro.
Crowdsec App
Come dicevo nell’introduzione, da qualche tempo è stata implementata, al momento in beta, la possibilità di attivare un account gratuito sul portale app.crowdsec.net per gestire e controllare le proprie istanze crowdsec.
l’aspetto più interessante è che offre sia la visualizzazione grafica degli alerts (“attacchi“) individuati dall’istanza:
che l’elenco dettagliato degli stessi:
Ovviamente è possibile sia impostare dei filtri che avere i dettagli di ogni singolo IP.
A questo proposito, molto interessante anche la possibilità di richiedere l’analisi di un IP attraverso la CTI (Cyber Thread Intelligence) per sapere se è già stato individuato da qualche istanza di crowdsec e se ha effettuato attività malevola.
Conclusioni
Al momento sto usando crowdsec su un paio di server in produzione, una Debian e una Centos. Su entrambe, funziona egregiamente e senza problemi. Personalmente ho apprezzato gli sforzi che il team di crowdsec ha fatto nel tempo (il prodotto esiste da qualche anno, ma inizialmente non era abbastanza “maturo” da essere usato in produzione). Penso che sia una ottima alternativa a soluzioni IPS commerciali e più “blasonate”, perfetta per hobbysti che desiderano proteggere i propri server senza spendere in licenze.
La natura open source del prodotto, sviluppato in Go e rilasciato su Github, non può che far sperare in una crescita e ulteriore maturazione del prodotto.
In ogni caso, mi sembra davvero una ottima soluzione per proteggere i nostri server casalinghi (e non).