Punteggio di sicurezza
Il punteggio di sicurezza è un voto facoltativo da A a F (e un punteggio da 0 a 100) mostrato accanto ai monitor per i quali pochi controlli dicono qualcosa di utile: host Linux e Windows con l’agente, Proxmox VE e Proxmox Backup Server, Synology, OPNsense, siti web e Active Directory. Gli altri monitor non mostrano nulla.
Attivarlo
Sezione intitolata “Attivarlo”Il punteggio è disattivato per impostazione predefinita. Un amministratore lo attiva in Impostazioni → Account e sicurezza → Punteggio di sicurezza. Una volta attivo:
- ogni monitor valutato riceve un piccolo badge a forma di scudo con la sua lettera nell’elenco dei monitor, e un badge Security con il punteggio nella sua pagina;
- facendo clic sul badge si apre il report del monitor: cosa fallisce, con l’evidenza e la correzione, cosa passa, i passaggi per migliorare il punteggio su questo tipo di monitor e un link alla sezione corrispondente qui sotto.
Disattivandolo si nascondono i badge, si ferma il calcolo periodico e le serie
dumbmonit_security_score non vengono più scritte.
Come viene calcolato il punteggio
Sezione intitolata “Come viene calcolato il punteggio”DumbMonit non chiede mai nulla di extra al monitor per calcolare il punteggio. I controlli leggono gli ultimi valori che i collector hanno già registrato (guardando indietro di 6 ore), quindi un punteggio non costa nulla al monitor.
Ogni controllo ha una categoria (esposizione, patching, autenticazione, cifratura, backup, configurazione), una gravità che è il suo peso (critical 10, high 6, medium 3, low 1), un risultato (superato, fallito o sconosciuto quando il dato non viene raccolto), l’evidenza, la correzione e un link alla pagina del produttore su cui si basa.
Punteggio = 100 × (peso dei controlli superati) ÷ (peso dei superati + falliti). I controlli sconosciuti sono mostrati ma mai contati: un punteggio non deve scendere perché a un account di monitoraggio manca un privilegio, né salire perché non si sa nulla. Un monitor i cui controlli sono tutti sconosciuti non è valutato.
| Voto | Punteggio | Parola |
|---|---|---|
| A | 90–100 | Solido |
| B | 75–89 | Buono |
| C | 60–74 | Discreto |
| D | 40–59 | Debole |
| F | 0–39 | Scarso |
Un controllo critico fallito limita il voto a C, qualunque sia il punteggio.
Storico e avvisi
Sezione intitolata “Storico e avvisi”Finché il punteggio è attivo, il server lo ricalcola ogni 15 minuti e lo
memorizza come dumbmonit_security_score{target="<id>"} (e il numero di
controlli falliti come dumbmonit_security_checks_failed). Due regole
integrate lo usano: Security score dropped (10 punti o più sotto il
miglior valore delle ultime 24 ore) e Security score low (sotto 40). Vedi
Regole di avviso.
Controlli e come migliorarli
Sezione intitolata “Controlli e come migliorarli”Host Linux { #linux-hosts }
Sezione intitolata “Host Linux { #linux-hosts }”Macchine con l’agente. I controlli SSH e firewall richiedono un agente della stessa release del server; con un agente più vecchio sono sconosciuti.
| Controllo | Gravità | Dato |
|---|---|---|
| Security updates installed | high | aggiornamenti di sicurezza in sospeso (dove il gestore di pacchetti li distingue) |
| No pending updates | low | aggiornamenti in sospeso |
| No reboot pending | medium | riavvio richiesto |
| SSH root login with a password refused | high | PermitRootLogin da sshd -T (prohibit-password passa) |
| SSH accepts keys only | medium | PasswordAuthentication, e KbdInteractiveAuthentication con UsePAM |
| Host firewall filters inbound traffic | high | una catena input nftables o iptables che scarta o rifiuta |
| SELinux enforcing | medium | modalità SELinux (sconosciuto dove SELinux è assente) |
| Container images up to date | medium | immagine più recente nel registry (solo con container) |
| No container image older than 180 days | low | età dell’immagine (solo con container) |
Per migliorarlo:
- Installa gli aggiornamenti di sicurezza in sospeso, poi attiva gli
aggiornamenti di sicurezza automatici:
unattended-upgradessu Debian e Ubuntu,dnf-automaticsu Fedora e RHEL. - Riavvia dopo gli aggiornamenti del kernel o delle librerie.
- Verifica che la tua chiave SSH funzioni, poi imposta
PermitRootLogin no,PasswordAuthentication noeKbdInteractiveAuthentication noin/etc/ssh/sshd_confige ricarica sshd. - Attiva un firewall dell’host che scarti il traffico in ingresso non
richiesto:
ufw enablesu Ubuntu, firewalld su Fedora e RHEL, un ruleset nftables altrove. - Mantieni SELinux in enforcing dove la distribuzione lo fornisce; scarica regolarmente immagini di container più recenti.
Fonti: CIS Controls, sshd_config(5), Red Hat — Using SELinux.
Host Windows { #windows-hosts }
Sezione intitolata “Host Windows { #windows-hosts }”Macchine con l’agente Windows, della stessa release del server (letti dal registro; un agente più vecchio non riporta nessuno di questi controlli).
| Controllo | Gravità | Dato |
|---|---|---|
| Windows Firewall on for every profile | high | profili dominio, privato e pubblico (prima i criteri di gruppo) |
| No reboot pending | medium | Windows Update o manutenzione dei componenti in attesa di un riavvio |
| Remote Desktop requires Network Level Authentication | high | passa quando Desktop remoto è disattivato |
| SMBv1 disabled | high | impostazione del server SMBv1 |
Per migliorarlo:
- Installa gli aggiornamenti di Windows (Impostazioni → Windows Update) e riavvia quando richiesto.
- Mantieni attivo Windows Defender Firewall per i profili dominio, privato e pubblico.
- Se Desktop remoto è attivo, richiedi l’autenticazione a livello di rete (NLA) e raggiungilo tramite VPN, mai direttamente da internet.
- Rimuovi SMBv1:
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol.
Fonti: Windows Firewall, SMBv1.
Proxmox VE { #proxmox-ve }
Sezione intitolata “Proxmox VE { #proxmox-ve }”| Controllo | Gravità | Dato |
|---|---|---|
| Security updates installed | high | aggiornamenti di sicurezza in sospeso per nodo (richiede Sys.Modify sul token, altrimenti sconosciuto) |
| Proxmox VE packages up to date | medium | pacchetti Proxmox aggiornabili per nodo |
| Running the installed kernel | medium | kernel installato più recente di quello in esecuzione |
| No test repository in use | medium | repository standard abilitati |
| Package repositories correctly configured | medium | errori e avvisi che Proxmox VE segnala sui repository |
| Enterprise repository subscription | low | stato della sottoscrizione per nodo |
| Web interface certificate valid for 14+ days | medium | scadenza del certificato del nodo |
| Every guest is in a backup job | high | guest non selezionati da alcun job di backup |
| Backup jobs succeed | high | ultimo risultato di ogni job di backup |
Per migliorarlo:
- Usa un repository a cui hai diritto: enterprise con una sottoscrizione,
altrimenti
pve-no-subscription; maipvetestsu un nodo che conta. - Installa gli aggiornamenti dal pannello Updates del nodo, poi riavvia con il nuovo kernel.
- Metti ogni VM e container in un job di backup, idealmente verso un Proxmox Backup Server, e correggi ogni job che fallisce.
- Sostituisci il certificato web autofirmato con uno ACME.
Fonti: System Software Updates, Package Repositories, Backup and Restore.
Proxmox Backup Server { #proxmox-backup-server }
Sezione intitolata “Proxmox Backup Server { #proxmox-backup-server }”| Controllo | Gravità | Dato |
|---|---|---|
| System updates installed | high | aggiornamenti in sospeso (richiede Sys.Modify su /system) |
| Running the installed Backup Server version | medium | daemon che eseguono ancora la versione precedente all’aggiornamento |
| Verify job scheduled | high | numero di job di verifica |
| Prune job scheduled | medium | numero di job di prune |
| Backups copied elsewhere (sync or tape) | medium | job di sincronizzazione e di backup su nastro (regola 3-2-1) |
| Garbage collection clean, no bad chunks | high | ultimo risultato del GC e chunk difettosi per datastore |
| Certificate valid for 14+ days | medium | scadenza del certificato |
Per migliorarlo:
- Installa gli aggiornamenti e riavvia quando il kernel o
proxmox-backupsono cambiati. - Pianifica un job di verifica e un job di prune su ogni datastore.
- Conserva una copia altrove: un job di sincronizzazione verso un secondo Backup Server, o su nastro.
- Usa un certificato ACME per l’interfaccia web.
Fonti: Maintenance tasks, Remotes and sync.
Synology { #synology }
Sezione intitolata “Synology { #synology }”| Controllo | Gravità | Dato |
|---|---|---|
| DSM 7 or later | high | versione di DSM |
| DSM up to date | high | è disponibile un aggiornamento di DSM (solo account amministratore) |
| Built-in admin account disabled | medium | stato dell’account admin (solo account amministratore) |
| Auto Block enabled | medium | impostazione Auto Block (solo account amministratore) |
| DSM firewall enabled | medium | impostazione del firewall (solo account amministratore) |
| Hyper Backup task configured | medium | numero di attività Hyper Backup |
| Hyper Backup tasks succeed | high | ultimo risultato di ogni attività |
Le quattro impostazioni vengono lette una volta all’ora e solo quando DumbMonit accede con un account amministratore; con un account normale restano sconosciute e non contano. La verifica in due passaggi e il reindirizzamento a HTTPS non vengono letti.
Per migliorarlo:
- Esegui l’ultima release di DSM 7 per il tuo modello e lascia che DSM installi automaticamente gli aggiornamenti importanti (Pannello di controllo → Aggiornamento e ripristino).
- Disattiva l’account integrato
admin; accedi con un amministratore personale protetto dalla verifica in due passaggi. - Attiva Auto Block e il firewall (Pannello di controllo → Sicurezza) e non inoltrare le porte di DSM a internet: usa una VPN.
- Esegui il backup con Hyper Backup su un altro dispositivo o su una destinazione cloud e correggi ogni attività che fallisce: RAID e snapshot non sono backup.
Fonti: Product support status, How to add extra security to your Synology NAS.
OPNsense { #opnsense }
Sezione intitolata “OPNsense { #opnsense }”| Controllo | Gravità | Dato |
|---|---|---|
| Firmware updates installed | high | aggiornamenti di pacchetti in sospeso (sconosciuto finché OPNsense non ha cercato aggiornamenti) |
| On the current major release series | medium | nuova serie maggiore disponibile |
| No reboot pending after an update | medium | riavvio richiesto |
| Packet filter enabled | critical | stato di pf |
Per migliorarlo:
- Cerca aggiornamenti in System → Firmware → Status, installali e riavvia quando richiesto.
- Passa alla nuova release maggiore quando esce.
- Mantieni attivo il packet filter.
- Consenti la GUI web e SSH solo dalla LAN o da una VPN, mai dalla WAN.
Fonti: OPNsense updates, OPNsense firewall.
Siti web { #websites }
Sezione intitolata “Siti web { #websites }”Per i monitor HTTP(S) e TLS che negoziano TLS, e per i monitor Website health & SEO. Un monitor HTTP in chiaro non ha punteggio.
| Controllo | Gravità | Dato |
|---|---|---|
| Certificate valid for 14+ days | high | giorni alla scadenza (monitor HTTP(S) e TLS) |
| Certificate chain trusted | high | verifica della catena (monitor HTTP(S) e TLS) |
| TLS 1.3 negotiated | low | versione del protocollo negoziata (monitor HTTP(S) e TLS) |
| Served over HTTPS | high | indirizzo finale dopo i reindirizzamenti (Website health) |
| Strict-Transport-Security header | medium | header con un max-age superiore a 0 |
| X-Content-Type-Options: nosniff | low | valore dell’header |
| Protected against clickjacking | low | X-Frame-Options o frame-ancestors della CSP |
| Content-Security-Policy header | low | una policy applicata (report-only non conta) |
Gli header vengono letti solo sulle risposte HTTPS.
Per migliorarlo:
- Servi il sito solo via HTTPS e reindirizza l’HTTP in chiaro a HTTPS.
- Automatizza il rinnovo del certificato (ACME, ad es. Let’s Encrypt) e servi la catena completa.
- Aggiungi header di sicurezza nel web server o nel reverse proxy:
Strict-Transport-Security,X-Content-Type-Options: nosniffe unaContent-Security-Policyconframe-ancestors. - Confronta con Mozilla HTTP Observatory, che verifica molto più di questo punteggio.
Fonti: Mozilla Server Side TLS, MDN — HTTP headers.
Active Directory { #active-directory }
Sezione intitolata “Active Directory { #active-directory }”Valutato a partire dai rilievi in stile PingCastle del collector Active
Directory: account kerberoastable, account senza preautenticazione Kerberos,
delega non vincolata, età della password di krbtgt, dimensione dei gruppi
privilegiati, copertura LAPS, policy delle password, account obsoleti. Ogni
rilievo è un controllo che passa quando riguarda zero oggetti.
Per migliorarlo:
- Correggi prima i rilievi critici e alti: sono i percorsi abituali verso i Domain Admins.
- Se la password di
krbtgtè vecchia, reimpostala due volte, a distanza di qualche ora, e rimuovi la delega non vincolata dai computer che non sono controller di dominio. - Sposta i servizi eseguiti con account utente con SPN su account di servizio gestiti di gruppo (gMSA).
- Esegui PingCastle per una valutazione completa.
Fonti: PingCastle health check rules, Windows LAPS.
- Il punteggio riflette solo ciò che DumbMonit può vedere; molte buone pratiche non sono verificate perché nessun collector legge il dato: firewall e autenticazione a due fattori di Proxmox, GUI web di OPNsense esposta sulla WAN, container Docker eseguiti privilegiati o con il socket Docker montato, TLS 1.0/1.1 ancora offerti (la sonda negozia solo TLS 1.2 e 1.3), e molto altro.
- Un controllo è fresco quanto i suoi dati: alcuni collector rileggono gli aggiornamenti solo ogni poche ore.
- I pesi sono una scelta di prodotto, uguale per ogni installazione.
- Vengono valutati solo i tipi sopra elencati. Gli altri (switch, stampanti, UniFi, pfSense…) non mostrano un badge di proposito: un paio di controlli darebbero un voto privo di significato.