CrowdSec
CrowdSec è uno strumento di rilevamento di attività dannose. Cerca pattern conosciuti, come tentativi di accesso malevoli, nei log delle applicazioni e blocca l'indirizzo IP dell'attaccante.
Puoi installare una sola istanza di CrowdSec per ogni nodo.
Protezioni predefinite
Una volta installato, CrowdSec è già completamente funzionante e inizia a proteggere automaticamente le applicazioni NS8, prima di qualsiasi configurazione manuale:
- Applicazioni web (sempre attive): ogni applicazione servita tramite il reverse proxy della piattaforma riceve una protezione HTTP generica indipendentemente dall'applicazione — inclusi gli endpoint HTTP di NethVoice — rilevamento di tentativi di accesso forzato (ad esempio, 5 risposte
401/403a richiestePOSTin 10 secondi bloccano l'IP), rilevamento di scansioni/probing, user-agent malevoli, probing di file sensibili (.env,.git, ...), traversal di percorsi, SQL injection, probing XSS, abuso di proxy aperti, probing di interfacce amministrative e probing di exploit di CVE noti (decine di CVE di prodotti, ad esempio Log4j2, Spring4Shell, VMware vCenter, Fortinet, Pulse Secure). - Applicazioni specifiche: Nextcloud e WordPress ricevono scenari aggiuntivi consapevoli dell'applicazione (tentativi di accesso forzato, enumerazione utenti, scansione di
wp-config) oltre a quelli generici sopra indicati. - SSH: tentativi di accesso forzato (inclusi varianti lente/basate sul tempo) e controllo della CVE-2024-6387 (regreSSHion).
- Mail: rilevamento di abuso/tentativi di accesso forzato per Postfix (abuso di relay, spam, HELO/comandi non validi) e Dovecot (spam).
- Database: rilevamento di tentativi di accesso forzato per MariaDB e PostgreSQL.
- FTP: rilevamento di tentativi di accesso forzato e enumerazione utenti per ProFTPD e vsftpd.
- NethVoice: forza bruta HTTP contro l'API middleware, l'API dei report e il login amministrativo, oltre alla scansione dei percorsi di exploit; forza bruta SIP contro Kamailio. Abilitato di default su una nuova installazione di NethVoice insieme a CrowdSec; in caso di aggiornamento, rimane disabilitato fino a quando non lo abiliti dalla pagina
Collections(vedi sotto). - WebTop: forza bruta contro la pagina di login di WebTop. La collection
nethesis/webtopblocca il vero IP del client dopo ripetuti login falliti. È abilitata di default e puoi disabilitarla dalla paginaCollections. - Whitelist di attori legittimi: crawler/bot legittimi noti sono automaticamente esclusi dai blocchi.
Interfaccia web
Il menu laterale del modulo offre accesso alle seguenti pagine: Status, Activity, Threat Shield IP, Collections, Settings e About.
Status
Mostra una panoramica dell'applicazione (azione di riavvio), il nodo di installazione, lo stato del backup e un link ai log.
Attività
I rilevamenti sono attività sospette individuate da CrowdSec, come ripetuti fallimenti di login o schemi di attacco noti. Un rilevamento non comporta sempre il blocco di un IP.
La barra sopra la tabella contiene Unban all, Delete all detections e Refresh, che ricarica l'elenco.
La tabella elenca Detected at, Scenario, Source IP, Country, Action (Banned finché il blocco è attivo, Ban expired quando è scaduto, oppure - quando non è stato applicato alcun blocco) e il conteggio degli Events. Usa il campo Filter detections per filtrare per IP o scenario, il selettore Action (All, No action, Banned o Ban expired) per mostrare solo i rilevamenti con quell'azione e il selettore Events to show per limitare il numero di eventi recenti caricati. Se nessun rilevamento corrisponde ai filtri, fai clic su Reset filters per azzerarli.
Per aprire il log completo degli eventi di un rilevamento, seleziona Show details dal menu della sua riga. Le righe bloccate hanno anche un link Unban e la finestra dei dettagli di un rilevamento bloccato ha un pulsante Unban. Unban all sblocca tutti gli indirizzi bloccati dai rilevamenti di CrowdSec. Un indirizzo sbloccato può essere bloccato di nuovo se CrowdSec rileva nuove attività sospette.
Unban e Unban all rimuovono solo i blocchi temporanei. Gli indirizzi della Local blocklist e delle liste di blocco di Threat Shield IP restano bloccati.
Delete all detections elimina definitivamente dal database tutti i rilevamenti e i blocchi che hanno creato. Gli indirizzi bloccati restano nel firewall fino alla scadenza del blocco. I blocchi di Threat Shield IP, della lista di blocco della community e della Local blocklist vengono riapplicati automaticamente; gli altri blocchi aggiunti a mano, per esempio con cscli, vengono persi.
Threat Shield IP
Questa pagina gestisce le liste di indirizzi IP sempre bloccati o mai bloccati. È organizzata in cinque schede: Blocklist feeds, Allowlist feeds, Local blocklist, Local allowlist e CrowdSec community blocklist.
Gli attaccanti di solito colpiscono molti server contemporaneamente. I sistemi NethServer e NethSecurity con una subscription condividono gli attaccanti che bloccano, così ogni sistema può bloccarli prima che attacchino.
Funziona così:
- Quando CrowdSec blocca un indirizzo IP, il server invia quell'indirizzo a Nethesis.
- Quando abbastanza sistemi segnalano lo stesso indirizzo, Nethesis lo aggiunge alla lista di blocco
Nethesis collective defense - Level 2. - I server con l'add-on Threat Shield possono abilitare questa lista di blocco e altre liste di blocco gestite da Nethesis. CrowdSec scarica le liste di blocco abilitate ogni 30 minuti e blocca i loro indirizzi IP nel firewall.
I server con una subscription applicano anche la Nethesis global allowlist. Gli indirizzi in questa lista, come i server delle subscription Nethesis, non vengono mai bloccati.
Il comportamento dipende dalla subscription:
| Server | Invia gli indirizzi bloccati | Nethesis global allowlist | Liste di blocco Enterprise |
|---|---|---|---|
| Senza subscription | No | No | Non disponibili |
| Con subscription | Sì | Sì | Non disponibili |
| Con subscription e add-on Threat Shield | Sì | Sì | Disponibili, disabilitate di default |
L'add-on Threat Shield è disponibile sia per la subscription Community sia per quella Enterprise. Le liste personalizzate, la Local blocklist e la Local allowlist funzionano anche senza subscription.
Non serve alcuna configurazione. L'invio parte quando il server ha una subscription e si ferma quando la subscription viene rimossa. Se il server perde la subscription o l'add-on, gli indirizzi importati dalle liste di blocco Enterprise vengono rimossi.
Liste di blocco
Threat Shield IP blocca gli indirizzi IP delle liste di blocco abilitate. La tabella elenca Name, Type, Description, Status, Confidence, Entries, Banned e Last update. Banned conta i pacchetti di rete provenienti dagli indirizzi della lista e bloccati dal firewall nelle ultime 24 ore. Un indirizzo presente in più liste viene conteggiato per quella con la confidenza più alta.
La colonna Type distingue i due tipi di lista:
Enterprise: liste di blocco gestite da Nethesis e Yoroi. Richiedono una subscription con l'add-on Threat Shield. Senza l'add-on, il loro interruttoreStatusè spento e i loro conteggi mostrano-; le liste selezionate vengono mantenute.Custom: liste di blocco scaricate da un URL a tua scelta, vedi Liste personalizzate.
Attiva l'interruttore Status delle liste da abilitare e fai clic su Save. L'importazione parte subito dopo il salvataggio. Tutte le liste vengono aggiornate ogni 30 minuti. Disabilitare una lista rimuove i suoi indirizzi dal firewall. Se una lista non può essere aggiornata, un errore sopra la tabella la indica.
| Lista di blocco | Confidenza |
|---|---|
Yoroi malware - Level 1 | 10 |
Yoroi malware - Level 2 | 8 |
Yoroi suspicious - Level 1 | 10 |
Yoroi suspicious - Level 2 | 8 |
Nethesis suspicious - Level 3 | 6 |
Nethesis collective defense - Level 2 | 8 |
La confidenza va da 1 a 10. Un valore più alto indica un rischio minore di bloccare un indirizzo legittimo. Con una subscription Community la confidenza non viene mostrata. Le liste personalizzate mostrano Unknown.
Per verificare se un indirizzo è bloccato da una lista di blocco abilitata, inseriscilo in Search IP in blocklists e fai clic su Search. In caso affermativo, il risultato indica le liste di blocco che lo contengono. La ricerca accetta un singolo indirizzo IPv4 o IPv6, non una rete, e funziona anche senza subscription, quindi si possono cercare anche le liste personalizzate.
Liste di permessi
Threat Shield IP non blocca mai gli indirizzi IP e le reti delle liste di permessi abilitate. La tabella elenca Name, Description e Status.
La Nethesis global allowlist contiene gli indirizzi IP dei servizi Nethesis. È abilitata automaticamente con una subscription e non può essere disabilitata, modificata o eliminata. Con una subscription, le liste di blocco vengono importate solo dopo che questa lista di permessi è stata scaricata.
Aggiungi le tue liste di permessi con Create custom feed, vedi Liste personalizzate. Attiva l'interruttore Status delle liste da abilitare e fai clic su Save. Tutte le liste di permessi vengono aggiornate ogni 30 minuti. Se una lista non può essere aggiornata, un errore sopra la tabella la indica.
Liste personalizzate
Le liste personalizzate sono liste di blocco o di permessi scaricate da un URL. Funzionano anche senza subscription. Per aggiungerne una, fai clic su Create custom feed nella scheda Blocklist feeds o Allowlist feeds, compila il modulo e fai clic su Create:
Status: abilita o disabilita la lista.Name: da 3 a 16 lettere minuscole e cifre, iniziando con una lettera. I nomi che iniziano connethesis,yoroiocrowdsecsono riservati. Il nome non può essere cambiato in seguito.Description (optional): un breve testo mostrato nella tabella.List URL: un URLhttp://ohttps://di un file di testo con una voce per riga. Le voci IPv4 e IPv6 possono essere mescolate. Una lista di blocco contiene singoli indirizzi IP: le reti vengono ignorate, come pure gli indirizzi di loopback, link-local, multicast e riservati. Anche gli indirizzi privati vengono ignorati, a meno cheLocal network blockingsia abilitato inSettings. Una lista di permessi contiene indirizzi IP e reti.
Di ogni lista vengono importate fino a 100.000 voci. Se il file non può essere scaricato, viene usata l'ultima copia scaricata.
Per modificare una lista personalizzata, fai clic su Edit nella sua riga. Per rimuoverla, seleziona Delete dal menu della riga. Gli indirizzi di una lista di blocco eliminata non vengono più bloccati; gli indirizzi di una lista di permessi eliminata possono essere bloccati di nuovo.
Se il server che ospita la lista richiede l'autenticazione HTTP Basic, scrivi nome utente e password nell'URL, per esempio https://user:password@example.com/blocklist.txt. Codifica con la percent-encoding gli eventuali caratteri @ o : al loro interno.
Il nome utente e la password nell'URL sono salvati in chiaro. Chiunque abbia accesso alla configurazione del sistema o ai suoi backup può leggerli.
Lista di blocco locale
Indirizzi IP sempre bloccati da questo server. Inserisci un indirizzo IPv4 o IPv6 per riga in Local blocklist entries e fai clic su Save, per esempio:
203.0.113.25
2001:db8::7
Le reti non sono supportate e un indirizzo presente in una lista di permessi viene rifiutato. La lista contiene fino a 1000 indirizzi. Gli indirizzi sono bloccati in modo permanente: restano bloccati dopo Unban all, Delete all detections e i riavvii. Per sbloccare un indirizzo, rimuovilo dalla lista e fai clic su Save.
I blocchi temporanei impostati da CrowdSec si gestiscono dalla pagina Activity.
Lista di permessi locale
Indirizzi IP, intervalli CIDR e nomi di dominio attendibili che non devono mai essere bloccati. Inserisci un elemento per riga in Local allowlist entries e fai clic su Save, per esempio:
192.168.1.10
192.168.1.0/24
trusted.example.com
Lista di blocco della community di CrowdSec
Indirizzi IP condivisi dalla community di CrowdSec e ricevuti tramite l'API centrale (CAPI). Di default, CrowdSec invia alcune telemetrie ai server di proprietà di CrowdSec; i server utilizzano tali dati per comporre una lista di blocco della community che viene restituita alla tua installazione. Se non desideri condividere tali dati, disabilita l'interruttore Central API and signal sharing — ciò disabilita anche l'interruttore Community blocklist sottostante.
Puoi connettere la tua istanza alla console di CrowdSec compilando il campo Enroll key (optional). Il tag Central API status mostra se l'istanza è connessa. Il numero di IP attualmente elencati nella lista di blocco della community è mostrato accanto a un campo di ricerca che consente di verificare se un determinato IP è incluso.
Disabilitare la Central API o la lista di blocco della community elimina automaticamente le decisioni provenienti dalla CAPI da questo server.
CrowdSec fornisce una lista di blocco della community condivisa tra tutti gli utenti; abilitare Central API and signal sharing e iscrivere la tua istanza nella console la attiva. Per accedere alla lista di blocco completa (oltre alla versione Lite), devi condividere almeno alcune decisioni di blocco con la Central API ogni 24 ore. Se il tuo server ha pochi o nessun blocco, sarà considerato in uno stato di blocco, impedendo l'accesso alla lista di blocco completa.
Interrompere l'invio degli indirizzi bloccati
L'invio degli indirizzi bloccati a Nethesis è abilitato di default per i cluster con una subscription. Per disattivarlo, esegui questi comandi in una shell di root del nodo, sostituendo crowdsec1 con il nome dell'istanza dell'applicazione:
runagent -m crowdsec1 sh -c 'echo NETHESIS_INSIGHTS_PUSH=False >> "$AGENT_STATE_DIR/environment"'
systemctl reload crowdsec1
Questa impostazione è disponibile solo da riga di comando. Le liste di blocco, compresa Nethesis collective defense - Level 2, e la Nethesis global allowlist continuano a funzionare.
Per riprendere l'invio degli indirizzi bloccati, rimuovi l'impostazione e ricarica il servizio:
runagent -m crowdsec1 sh -c 'sed -i "/^NETHESIS_INSIGHTS_PUSH=/d" "$AGENT_STATE_DIR/environment"'
systemctl reload crowdsec1
Collezioni
Le collezioni aggiungono supporto per il rilevamento di servizi specifici, come SSH, Nginx o WordPress. Abilita solo le collezioni che corrispondono ai servizi installati su questo server; un link al CrowdSec Hub consente di verificare cosa rileva ogni collezione prima di abilitarla.
La tabella elenca Nome, Stato, Versione e Descrizione, con un'azione Enable/Disable per riga. Ad esempio, la collezione nethesis/nethvoice rileva attacchi di forza bruta e scansioni di exploit contro l'applicazione NethVoice (SIP e HTTP); viene fornita disabilitata dopo un aggiornamento e deve essere abilitata da questa pagina.
Impostazioni
Blocco della rete locale: disabilitato di default, il traffico privato/LAN non viene mai bloccato. Abilita questo interruttore se desideri che CrowdSec blocchi anche gli IP offensivi sulle tue reti locali.Durata del blocco: scegliIncrementalper aumentare la durata per rilevamenti ripetuti dallo stesso IP, oppureFixedper utilizzare sempre la stessa durata. In entrambi i casi, inserisci la durata in minuti come testo libero.- Notifica via email aggiungendo un indirizzo per riga nel campo
Email recipients for notifications: le notifiche funzioneranno solo se Email notifications è stato configurato — un link alle impostazioni email del cluster viene mostrato quando non è ancora configurato. Notification threshold: CrowdSec invia un'email di notifica giornaliera elencando i nuovi IP bloccati ai destinatari configurati. Se questa soglia di nuovi IP bloccati viene raggiunta prima del report giornaliero, la notifica viene inviata immediatamente. Può essere impostata tra 1 e 10000 (100 di default).
Dashboard Grafana
CrowdSec crea automaticamente tre dashboard in Grafana. Per aprirle, abilita Grafana come spiegato in Dashboard di Grafana, poi apri la cartella modules.
CrowdSec Overview: come lavora CrowdSec al suo interno. Mostra le righe di log lette, i parser riusciti o falliti, i bucket, le decisioni e i rilevamenti. Usala per verificare che i log siano letti e analizzati.CrowdSec Metrics: righe lette e analizzate, bucket, decisioni, bouncer, CPU e memoria. Scegli l'istanza con il selettoreInstance. Usala per vedere quali scenari scattano di più, per verificare che il bouncer del firewall sia connesso e per individuare un CrowdSec lento.CrowdSec Bans: da dove arrivano i blocchi locali. Mostra una mappa del mondo, i principali paesi, provider e scenari, le durate dei blocchi, gli IP bloccati più spesso e gli ultimi blocchi. Usa i selettoriCrowdSec,CountryeIPper filtrare. I blocchi ricevuti dalla Central API (CAPI) non sono conteggiati.
Interfaccia a riga di comando
La maggior parte delle azioni sopra descritte è disponibile anche dalla riga di comando.
Il comando cscli è una potente interfaccia a riga di comando per accedere alle funzioni avanzate di CrowdSec. Per eseguire cscli, devi prima entrare nell'ambiente dell'applicazione. Digita il seguente comando in una shell di root
runagent -m crowdsec1 bash
A questo punto il comando cscli diventa disponibile. Per esempio, puoi stampare il messaggio di aiuto con
cscli --help
Puoi anche eseguire un singolo comando direttamente, senza aprire una shell, prefissandolo con runagent -m crowdsec1:
runagent -m crowdsec1 cscli decisions list
Alcuni comandi utili:
cscli decisions list— elenca i divieti attuali (IP, motivo, durata, ID decisione)cscli decisions delete --id <id>— rimuove un divieto tramite il suo ID decisione, ad esempiocscli decisions delete --id 630190cscli decisions delete --ip <ip>— rimuove un divieto tramite indirizzo IPcscli decisions add --ip <ip> --duration 4h --reason "manual ban"— vieta manualmente un indirizzo IP per un tempo limitato; per bloccare un IP in modo permanente, usa la Local blocklistcscli alerts list— elenca gli avvisi attivati (attacchi rilevati), inclusi quelli che non hanno portato a un divietocscli bouncers list— elenca i bouncer registrati (ad esempio il bouncer del firewall) e il loro statocscli collections list/cscli scenarios list— mostra quali collezioni/scenari sono installati e abilitati, utile per verificare cosa viene protettocscli metrics— mostra le metriche di parser/bucket/bouncer, utile per verificare che CrowdSec stia effettivamente elaborando i logcscli explain --file <logfile> --type <log-type>— testa una riga di log contro parser e scenari, utile per eseguire il debug del motivo per cui un attacco è stato rilevato o meno