Forza bruta sul login di GLPI: come bloccare gli attacchi con Security Guard

Security Guard, gratuito per i clienti NexTool, blocca la forza bruta in GLPI: login web, API, CalDAV e recupero della password.

Ogni schermata di login esposta su internet riceve tentativi di indovinare la password, e quella di GLPI non fa eccezione. Di serie, GLPI non limita quante volte si può sbagliare la password. Security Guard, modulo di NexTool gratuito per i clienti NexTool, conta gli errori nel login web, nell'API, in CalDAV e nel recupero della password, blocca temporaneamente chi supera il limite e mostra tutto in un pannello, senza conservare il nome utente in chiaro.

Il problema: forza bruta sul login di GLPI

La forza bruta è l'attacco più semplice che esista: un bot prova combinazioni di utente e password finché non indovina. Varianti note sono il credential stuffing (password trafugate da altri servizi provate sul Suo GLPI) e il password spraying (una password comune, come Cambiare@123, provata su molti account contemporaneamente). GLPI contiene i ticket, l'inventario, i contratti e i dati personali di chi apre i ticket. Un account da tecnico compromesso apre l'accesso a tutto questo.

In GLPI standard, il login web accetta tentativi all'infinito. Si può mitigare sul perimetro (WAF, fail2ban che legge il log del server web), ma queste soluzioni non conoscono GLPI: non sanno se il tentativo è riuscito, non distinguono l'utente dall'IP e spesso bloccano per errore il proxy dell'intera azienda. Mancava una protezione all'interno di GLPI stesso, capace di capire l'esito reale del login.

Come funziona Security Guard

Con la protezione attiva, il modulo esamina ogni tentativo di autenticazione sui canali elencati qui sotto, registra l'esito, per esempio Successo, Errore, Negato (blocco), Ignorato o MFA in sospeso, e verifica le regole che Lei ha definito. Quando una regola viene superata, i tentativi successivi per quella chiave ricevono HTTP 429 nel formato che il client comprende: una pagina di blocco temporaneo nel browser, JSON nelle API e testo in CalDAV, finché non scade il termine o un amministratore non revoca il blocco. Mentre il blocco è attivo, i tentativi respinti non diventano eventi: si sommano solo al contatore del blocco.

  • Login web: il form su /front/login.php.
  • API REST (v1): initSession con login e password, Basic Auth o user_token. Con user_token non c'è un utente, quindi contano solo le regole per IP. In GLPI 11 è coperto anche il percorso /api.php/v1.
  • API v2 di GLPI 11: la richiesta di token su /api.php/token con utente e password.
  • CalDAV (Basic Auth): poiché il client del calendario si autentica a ogni sincronizzazione, diventano eventi solo le password errate e gli accessi negati; l'accesso corretto non registra nulla.
  • Recupero della password (lostpassword.php): ogni richiesta di nuova password conta come tentativo, per IP o per l'indirizzo e-mail indicato. GLPI risponde allo stesso modo con un indirizzo giusto o sbagliato, quindi la regola limita il volume delle richieste e frena gli invii di massa e la scansione degli indirizzi e-mail.
  • Codice MFA/TOTP di GLPI 11: i tentativi compaiono negli eventi, sia riusciti sia falliti, ma il modulo non limita il codice, perché GLPI 11 stesso blocca già dopo diversi tentativi errati.

Nella console, il modulo offre:

  • Regole per ambito: ogni regola definisce la finestra (in minuti), il limite di errori e la durata del blocco. L'ambito può essere Utente, IP o Utente + IP, con priorità tra le regole e filtro facoltativo per intervallo di IP (CIDR) o per paese. Nel campo Canali, ogni regola sceglie dove conta: login web, API REST, API v2, CalDAV o recupero della password. Una regola nuova nasce con tutti i canali selezionati. L'installazione crea due regole pronte, inattive: Utente + IP (5 errori in 15 minuti, blocco di 15 minuti) e IP (30 errori in 15 minuti, blocco di 30 minuti).
  • Eccezioni: utenti, gruppi, profili, reti (CIDR) o paesi che non vengono mai bloccati, anche quando una regola scatta. Ogni eccezione può avere un periodo di validità con data di inizio e di fine.
  • GeoIP: con una base MaxMind GeoLite2 Country caricata dalla schermata stessa, il modulo risolve il paese di ogni IP. Questo alimenta il pannello e consente regole ed eccezioni per paese.
  • Pannello: totali delle ultime 24 ore per esito, una riga con le ultime 24 ore per canale, blocchi, regole ed eccezioni attivi, e la top 10 di IP, utenti (mascherati) e paesi con più errori e tentativi negati negli ultimi 7 giorni.
  • Blocchi: l'elenco dei blocchi attivi con il pulsante per sbloccare, la creazione di blocchi manuali e lo storico completo.
  • Eventi: i tentativi valutati e classificati, nella ricerca nativa di GLPI, con la colonna Canale e l'utente sempre mascherato. I tentativi respinti durante un blocco attivo compaiono solo nel contatore del blocco.
  • Test: simulatori di risoluzione dell'IP e di tentativo di login che non salvano nulla; il simulatore di tentativo permette di scegliere il canale. Lei scopre cosa succederebbe prima di attivare una regola.
Pannello di Security Guard in GLPI con i totali dei tentativi di login delle ultime 24 ore per esito e la top 10 di IP e utenti mascherati per errori
Pannello: successi, errori e blocchi delle ultime 24 ore, e i principali responsabili degli ultimi 7 giorni (IP di documentazione e utenti mascherati)

Un dettaglio che fa la differenza: il modulo classifica l'esito reale del tentativo, guardando la risposta restituita da GLPI, e conta il tentativo non appena inizia. Un bot che invia decine di richieste in parallelo non riesce a superare il limite sfruttando una corsa tra di esse.

Modulo di regola di Security Guard con ambito Utente più IP, finestra di 15 minuti, limite di 5 errori e blocco di 15 minuti
Modulo di regola: ambito, finestra, limite di errori, durata del blocco, filtri per IP e paese e priorità

Attivazione sicura, passo per passo

Security Guard arriva disattivato: l'interruttore della protezione è spento e le due regole create durante l'installazione sono inattive. Installare il modulo non blocca nessuno. Però, con la protezione spenta, il modulo non registra nulla: non è possibile “osservare prima di bloccare” con l'interruttore spento. La strada sicura è accendere la protezione con le regole ancora inattive e usare la scheda Test. L'ordine qui sotto è importante, perché una configurazione errata del proxy può bloccare l'intera azienda.

  1. Installi e attivi il modulo in NexTool > Moduli > Security Guard. La console si trova in NexTool > Security Guard.
  2. Configuri i proxy attendibili PRIMA di accendere la protezione. Nella scheda Impostazioni, indichi nel campo Proxy attendibili (CIDR) la rete del reverse proxy davanti a GLPI (Nginx, NPM, HAProxy, bilanciatore di carico). Senza questo, il modulo ignora di proposito l'header X-Forwarded-For (può essere falsificato) e vede l'IP del proxy, non quello dell'utente.
  3. Se GLPI è dietro Cloudflare, faccia clic su Aggiungi intervalli Cloudflare. Il pulsante aggiunge al campo gli intervalli ufficiali della CDN, senza cancellare ciò che c'è già e senza salvare da solo. Mantenga anche la rete del Suo proxy locale e salvi. Senza gli intervalli Cloudflare, l'IP risolto sarebbe quello del bordo della CDN, condiviso da migliaia di persone.
  4. Controlli l'header dell'IP. Il valore predefinito è X-Forwarded-For; lo cambi solo se il Suo proxy usa X-Real-IP o Forwarded.
  5. Controlli il riquadro “IP di questa richiesta”. Mostra il REMOTE_ADDR, l'header ricevuto e l'IP che il modulo risolverebbe adesso. L'IP risolto deve essere quello del Suo computer, non quello del proxy. Se compare l'avviso “Probabile proxy non configurato”, si fermi e torni al passo 2.
  6. Accenda la Protezione contro il brute force con le regole ancora inattive. Senza regole attive né blocchi manuali nessuno viene bloccato, e il Pannello e la scheda Eventi iniziano a mostrare i tentativi classificati. Usi la scheda Test per confermare che un Suo tentativo normale non verrebbe bloccato.
  7. Solo allora attivi una regola con ambito Utente + IP nella scheda Regole e controlli, nel campo Canali, dove conterà. La regola pronta prevede 5 errori in 15 minuti e un blocco di 15 minuti.
Scheda Impostazioni di Security Guard con il campo Proxy attendibili compilato con la rete del proxy locale e gli intervalli ufficiali di Cloudflare
Proxy attendibili: la rete del proxy locale più gli intervalli Cloudflare aggiunti dal pulsante (occorre salvare)
Riquadro IP di questa richiesta di Security Guard con un REMOTE_ADDR privato e l'avviso di proxy probabile non configurato
Il riquadro “IP di questa richiesta” avvisa quando davanti c'è un proxy non ancora attendibile
Scheda Test di Security Guard con il simulatore di tentativo di login che mostra quali regole scatterebbero per un utente e un IP di prova
Simulatore di tentativo: mostra eccezione, blocco attivo e ogni regola che scatterebbe, senza salvare nulla

Buone pratiche

  • Preferisca l'ambito Utente + IP. Ferma il bot che insiste su un account da un indirizzo, senza effetti collaterali per gli altri utenti.
  • Attenzione all'ambito Utente da solo. Permette a chiunque di bloccare l'account di un collega semplicemente sbagliando la sua password di proposito. Se lo usa, imposti un limite alto e una durata breve.
  • Attenzione all'ambito IP da solo dietro NAT. Un intero ufficio di solito esce con lo stesso IP pubblico. Una regola solo per IP, con un limite basso, punisce tutti per l'errore di uno. Se la usa, tenga il limite molto più alto di quello della regola Utente + IP (la regola pronta prevede 30 errori in 15 minuti).
  • Registri le eccezioni con criterio. La rete della sede, un profilo di integrazione o un account di monitoraggio possono diventare eccezioni, preferibilmente con un periodo di validità.
  • Attenzione alle integrazioni tramite API. Un sistema integrato tramite l'API che sbaglia la password in loop (per esempio con una password vecchia) blocca il proprio IP. Registri la sua rete come eccezione o tolga quel canale dalla regola.
  • Per il recupero della password, usi un limite più alto di quello del login e preferisca l'ambito IP o Utente + IP.
  • Mantenga aggiornata la base GeoIP. L'aggiornamento è manuale; il riquadro avvisa quando la base supera i 60 giorni.
Scheda Eccezioni di Security Guard con eccezioni di tipo rete con intervalli di documentazione, periodo di validità e motivo
Eccezioni per rete, utente, gruppo, profilo o paese, con periodo di validità facoltativo
Scheda Blocchi di Security Guard con l'elenco dei blocchi attivi, il pulsante di blocco manuale e lo storico con ambito, utente mascherato e IP
Blocchi: sblocco manuale, blocco manuale e storico completo

Privacy

Registrare i tentativi di login comporta dati personali, quindi conviene sapere esattamente cosa conserva il modulo:

  • Il nome utente non viene mai salvato in chiaro. La correlazione usa un HMAC-SHA256 con una chiave propria dell'installazione, e la schermata mostra solo una maschera (prima e ultima lettera). Nei login riusciti, l'evento conserva anche l'ID dell'utente in GLPI.
  • L'indirizzo e-mail indicato nelle richieste di nuova password segue la stessa regola: viene conservato solo come HMAC, e la schermata mostra solo una maschera.
  • IP e paese vengono salvati in chiaro, perché sono l'oggetto stesso della protezione.
  • Per gli eventi, il periodo di conservazione lo decide Lei: 90 giorni per impostazione predefinita, e 30 giorni per il log amministrativo. La pulizia è affidata all'azione automatica secguardmaintenance, ogni 5 minuti, in modalità esterna: dipende dal cron di GLPI configurato sul server.
  • Lo storico dei blocchi non scade in questa versione e viene rimosso solo con l'azione “Elimina dati”.
  • Disinstallare il modulo conserva i dati; eliminarli richiede l'azione esplicita “Elimina dati”, con un permesso dedicato.

Permessi per schermata

Security Guard è una console riservata all'amministrazione. I diritti si trovano in Amministrazione > Profili > scheda NexTool e variano a seconda della schermata:

  • Pannello: Visualizza Pannello;
  • Eventi: Visualizza Eventi;
  • Blocchi: Visualizza Blocchi, Rilascia blocchi e Crea blocco manuale;
  • Regole: Visualizza Regole e Gestisci Regole;
  • Eccezioni: Visualizza Eccezioni e Gestisci Eccezioni;
  • Impostazioni e scheda Test: Configura;
  • Registri: Visualizza Registri.

Un'azione richiede sempre anche il diritto di vedere la schermata: chi ha solo “Rilascia blocchi” senza “Visualizza Blocchi” non sblocca nulla. In questo modo il team di primo livello può, per esempio, sbloccare un utente senza poter modificare le regole.

Limiti di questa versione

Per essere chiari: la versione 0.2.0 copre il login web, l'API REST, l'API v2 di GLPI 11, CalDAV e il recupero della password. Restano esclusi, o coperti solo in parte:

  • i login tramite SSO, SAML o REMOTE_USER, che non passano dalla password di GLPI;
  • il codice MFA/TOTP di GLPI 11: i tentativi compaiono negli eventi, ma il modulo non limita il codice, perché GLPI 11 stesso blocca già dopo diversi tentativi errati.

Inoltre non è prevista alcuna notifica di blocco: né e-mail, né avviso, né webhook. Il monitoraggio avviene dalla console, nel Pannello e nelle schede Blocchi ed Eventi.

A chi è rivolto

A chi pubblica GLPI su internet per tecnici esterni, clienti o filiali; ai fornitori di servizi che gestiscono più istanze GLPI e devono dimostrare il controllo degli accessi negli audit; e a chi ha già visto, nel log del server web, centinaia di POST sul login provenienti dallo stesso posto.

Compatibilità

  • Versione: 0.2.0
  • GLPI: 10 e 11 (lo stesso artefatto funziona su entrambi)
  • Plugin: NexTool 6.22.0 o superiore
  • Piano: Gratuito
  • Lingue: schermate in portoghese (Brasile e Portogallo), inglese (USA e Regno Unito), spagnolo (Spagna e Messico), francese, italiano e tedesco

Prossimo passo

Security Guard fa parte di NexTool, un ecosistema di moduli per estendere GLPI senza personalizzazioni del codice. Consulti la pagina del modulo o contatti il team per una dimostrazione.


Revisionato dal team di NexTool Solutions. Le schermate provengono da un ambiente GLPI reale con il plugin NexTool; IP e utenti sono stati sostituiti con intervalli di documentazione e maschere.

Domande Frequenti

No. La protezione arriva disattivata e le regole create durante l'installazione sono inattive. Un blocco avviene solo dopo che l'amministratore ha acceso la protezione e attivato una regola o creato un blocco manuale. Si consiglia di configurare prima i proxy attendibili.

Utente + IP è quello consigliato. L'ambito Utente da solo permette di bloccare l'account di un collega sbagliando apposta la sua password, e l'ambito IP da solo può punire un intero ufficio che esce con lo stesso IP pubblico.

Registri come proxy attendibili la rete del Suo proxy locale e gli intervalli Cloudflare, con il pulsante Aggiungi intervalli Cloudflare nella scheda Impostazioni, e salvi. Poi verifichi nel riquadro IP di questa richiesta che l'IP risolto sia quello dell'utente.

Nella scheda Blocchi, faccia clic su Rilascia sul blocco attivo. Il profilo deve avere i diritti Visualizza Blocchi e Rilascia blocchi. Lo sblocco vale per tutti i blocchi attivi della stessa chiave.

Non in chiaro. La correlazione avviene tramite HMAC con una chiave propria dell'installazione e la schermata mostra solo una maschera; nei login riusciti, l'evento conserva l'ID dell'utente in GLPI. Eventi e log amministrativo hanno una conservazione configurabile, 90 e 30 giorni per impostazione predefinita; lo storico dei blocchi non scade in questa versione e viene rimosso solo con Elimina dati.

No. La versione 0.2.0 non invia notifiche di blocco, né via e-mail, né come avviso, né via webhook. Il monitoraggio avviene dalla console, nel Pannello e nelle schede Blocchi ed Eventi.

L'API REST sì, e anche l'API v2 di GLPI 11, CalDAV e il recupero della password, ciascuno scelto nel campo Canali della regola. Il codice MFA/TOTP di GLPI 11 viene solo registrato negli eventi, perché GLPI 11 stesso limita già i tentativi errati. Il login tramite SSO, SAML o REMOTE_USER non è coperto, perché non passa dalla password di GLPI.

No. Dopo l'aggiornamento, le regole esistenti continuano a valere solo per il login web. Per estendere una regola all'API REST, all'API v2, a CalDAV o al recupero della password, selezioni quei canali nel campo Canali. Una regola nuova nasce già con tutti i canali selezionati.

Sì. Lo stesso modulo funziona su GLPI 10 e GLPI 11, con il plugin NexTool 6.22.0 o superiore.

Hai bisogno di aiuto?