Cyber-security su Linux: le basi per comprendere e proteggere un sistema
Quando parliamo di sicurezza su Linux, è facile cadere in due estremi: pensare che Linux sia automaticamente sicuro oppure immaginare che per proteggere un sistema servano immediatamente strumenti complessi.
La realtà è molto più interessante.
La sicurezza di un sistema Linux nasce soprattutto da un insieme di buone pratiche, applicate con criterio e mantenute nel tempo. Aggiornamenti, gestione degli utenti, controllo dei servizi, autenticazione, rete e backup sono tutti pezzi dello stesso puzzle.
Non dobbiamo quindi pensare alla sicurezza come a un singolo programma da installare, ma come a un processo.
Anche la documentazione ufficiale di Ubuntu raccomanda infatti un approccio “a strati”, nel quale nessuna singola misura costituisce l’unica difesa del sistema.
In questa guida vogliamo costruire proprio questa base: capire quali sono i principali aspetti da controllare su un sistema Linux e perché sono importanti.
La sicurezza comincia dagli aggiornamenti
Partiamo da una misura semplice, ma fondamentale: mantenere aggiornato il sistema.
Quando una vulnerabilità viene scoperta in un programma, in una libreria o nel kernel, gli sviluppatori possono distribuire una correzione. Se il nostro sistema continua a utilizzare una versione vulnerabile, quella correzione non ci proteggerà finché non verrà installata.
Su una distribuzione Debian o Ubuntu possiamo aggiornare l’indice dei pacchetti e installare gli aggiornamenti disponibili con:
sudo apt update
sudo apt upgrade
Il primo comando aggiorna le informazioni disponibili nei repository; il secondo installa gli aggiornamenti disponibili.
Non è quindi sufficiente installare Linux una volta e considerarlo “a posto per sempre”. La sicurezza è anche manutenzione.
Ubuntu documenta inoltre strumenti come unattended-upgrades per automatizzare l’installazione degli aggiornamenti, con una configurazione che può essere adattata alle esigenze del sistema.
Questo è particolarmente importante per un server o per un homelab che rimane acceso per lunghi periodi.
Utenti, password e privilegi: non usare più poteri del necessario
Un altro principio fondamentale è quello del minimo privilegio.
In pratica, ogni utente o servizio dovrebbe avere soltanto i permessi necessari per svolgere il proprio lavoro.
Linux ci aiuta molto in questo senso perché distingue chiaramente gli utenti normali dall’utente root, che dispone di privilegi amministrativi molto elevati.
Quando utilizziamo sudo, chiediamo temporaneamente di eseguire un’operazione con privilegi amministrativi:
sudo apt update
Questo è preferibile rispetto all’utilizzo continuo di una sessione root, perché riduce la possibilità di eseguire accidentalmente un’operazione amministrativa.
Lo stesso principio vale per le applicazioni. Se un servizio non ha bisogno di accedere a determinate risorse, non dovrebbe averne automaticamente la possibilità .
Ubuntu indica proprio il principio del least privilege tra le pratiche generali di sicurezza.
La gestione dettagliata dei permessi dei file merita invece un articolo specifico: la affronteremo più avanti nel nostro percorso dedicato alla sicurezza Linux.
Anche le applicazioni che installiamo fanno parte della sicurezza
Un sistema operativo aggiornato può essere comunque esposto a rischi se installiamo software proveniente da fonti poco affidabili.
Per questo è importante sapere da dove arriva ciò che installiamo.
Quando possibile, è preferibile utilizzare i repository ufficiali della distribuzione oppure fonti che conosciamo e possiamo verificare.
Questo non significa che software esterno ai repository sia necessariamente pericoloso. Significa piuttosto che aggiungere un repository, scaricare uno script o installare manualmente un pacchetto significa introdurre una nuova componente di cui dobbiamo comprendere la provenienza e il comportamento.
Un semplice principio può aiutarci:
Prima di installare qualcosa, chiediamoci da dove arriva e di quali privilegi avrà bisogno.
È una domanda banale, ma spesso molto più utile di una lunga lista di strumenti di sicurezza.
SSH: quando il computer può essere raggiunto da remoto
Nel nostro percorso abbiamo già incontrato SSH, il protocollo utilizzato per amministrare sistemi Linux da remoto.
SSH è estremamente utile, soprattutto in un homelab o su un server senza interfaccia grafica. Ma proprio perché permette di accedere al sistema, deve essere configurato con attenzione.
Per prima cosa possiamo verificare se il servizio SSH è attivo e quali porte sono in ascolto:
ss -tulpen
Questo comando, che abbiamo già incontrato nella nostra guida al networking Linux, mostra socket e porte in ascolto e può aiutarci a capire quali servizi stanno effettivamente accettando connessioni.
Per l’autenticazione SSH esiste inoltre la possibilità di utilizzare una coppia di chiavi pubblica e privata invece della sola password. Abbiamo già una guida dedicata su OrvietoLinux che approfondisce proprio questo metodo.
Un altro aspetto importante è evitare di esporre inutilmente SSH direttamente a Internet. Se un servizio non deve essere raggiungibile dall’esterno, non c’è motivo di renderlo accessibile pubblicamente.
Il firewall: una porta aperta non è sempre una porta necessaria
Arriviamo così a un altro elemento fondamentale: il firewall.
Un firewall permette di definire quali connessioni di rete possono essere accettate o rifiutate secondo determinate regole.
Su Ubuntu uno degli strumenti utilizzati per configurare il firewall è UFW, un’interfaccia semplificata per la gestione del filtraggio del traffico.
Possiamo almeno controllarne lo stato con:
sudo ufw status
Il concetto importante, però, non è imparare subito una lunga serie di comandi.
È capire che ogni servizio esposto sulla rete aumenta la superficie di attacco del sistema.
Se abbiamo un server web che deve essere raggiungibile sulla porta 80, quella porta ha una funzione. Se invece abbiamo un servizio che non utilizziamo e che ascolta inutilmente su una porta, vale la pena chiedersi perché sia attivo.
Questo si collega direttamente al concetto di superficie d’attacco: meno servizi inutili lasciamo esposti, meno componenti dobbiamo controllare.
Nel prossimo articolo dedicato alla sicurezza di rete entreremo molto più nel dettaglio di firewall, porte e traffico.
I log ci aiutano a capire cosa succede
La sicurezza non significa soltanto impedire un problema.
Significa anche accorgersi quando qualcosa non va.
Linux registra moltissime informazioni nei log di sistema e dei servizi. Possiamo quindi utilizzarli per capire se un servizio sta generando errori, se un’autenticazione sta fallendo oppure se qualcosa si comporta diversamente dal previsto.
Nel nostro percorso su systemd abbiamo già incontrato journalctl, che permette di consultare il journal di sistema.
Per esempio:
journalctl -b
mostra i messaggi relativi all’avvio corrente.
Questo diventa particolarmente utile quando amministriamo un server o un homelab: invece di limitarci a dire “qualcosa non funziona”, possiamo cercare informazioni concrete nei log.
La sicurezza, in questo senso, è strettamente legata anche alla capacità di diagnosticare il sistema.
Backup e sicurezza non sono la stessa cosa
C’è poi un concetto che vale la pena chiarire subito: un backup non impedisce un attacco, ma può limitare le conseguenze di un incidente.
Se un file viene cancellato accidentalmente, un disco si guasta oppure un servizio viene compromesso, avere una copia separata dei dati può fare una grande differenza.
D’altra parte, avere un backup non significa automaticamente essere protetti.
Dobbiamo sapere:
- cosa stiamo salvando;
- dove si trova il backup;
- quanto spesso viene eseguito;
- per quanto tempo conserviamo le copie;
- soprattutto, se siamo davvero in grado di ripristinarle.
Quest’ultimo punto è spesso trascurato.
Un backup che non abbiamo mai provato a ripristinare è, in parte, una promessa che non abbiamo ancora verificato.
Nel nostro homelab questo diventa ancora più importante man mano che iniziamo a ospitare dati e servizi personali.
La sicurezza non è installare cento programmi
Quando si comincia a parlare di cyber-security è facile accumulare strumenti: antivirus, scanner, monitoraggio, firewall, sistemi di rilevamento e molti altri.
Gli strumenti possono essere utili, ma non sostituiscono una configurazione corretta e una buona manutenzione.
Un sistema con molti software di sicurezza ma con aggiornamenti dimenticati, servizi inutili esposti su Internet e password deboli rimane un sistema problematico.
Al contrario, una buona base può essere costruita progressivamente:
Sistema aggiornato
↓
Utenti e privilegi corretti
↓
Software da fonti affidabili
↓
Servizi realmente necessari
↓
Accesso remoto protetto
↓
Firewall e rete controllata
↓
Log e monitoraggio
↓
Backup verificati
Non è una checklist magica e non rende un sistema invulnerabile. È semplicemente un modo ordinato per iniziare a ragionare sulla sicurezza.
La sicurezza è un processo, non un traguardo
Non esiste un comando che possiamo eseguire una volta per poter dire che il nostro sistema è “sicuro”.
Una distribuzione aggiornata oggi potrebbe avere nuovi aggiornamenti di sicurezza domani. Un servizio che oggi non utilizziamo potrebbe diventare necessario in futuro. Una configurazione che funziona bene su un computer personale potrebbe non essere adatta a un server esposto su Internet.
Per questo è più utile sviluppare una mentalità orientata alla sicurezza.
Ogni volta che installiamo un nuovo servizio possiamo chiederci:
Deve essere attivo?
Chi deve poterlo raggiungere?
Di quali privilegi ha bisogno?
Quali dati può leggere o modificare?
Come faccio a sapere se qualcosa va storto?
Come posso recuperare i dati se qualcosa viene perso?
Sono domande semplici, ma costituiscono una base molto più solida di una sicurezza fatta soltanto di strumenti.
Conclusione
La cyber-security su Linux non è un argomento da affrontare tutto in una volta.
Possiamo iniziare dalle fondamenta: mantenere aggiornato il sistema, utilizzare account e privilegi con criterio, installare software da fonti affidabili, controllare i servizi esposti, proteggere l’accesso remoto, utilizzare il firewall quando appropriato e mantenere backup verificati.
Da qui possiamo costruire conoscenze sempre più specifiche.
Ed è proprio quello che faremo nei prossimi articoli: partire da questi concetti generali per capire meglio porte, firewall, permessi, autenticazione e sicurezza dei servizi Linux.
L’obiettivo non è trasformare ogni utente Linux in un esperto di sicurezza.
È molto più semplice: imparare a riconoscere i rischi e a prendere decisioni consapevoli prima che diventino problemi.
LICENZA E CONDIZIONI D’USO
Questo How-to è rilasciato sotto licenza Creative Commons Attribution-NonCommercial 3.0 Italy.Â
CONTATTI DELL’AUTORE
Marco Ciammella marco@orvietolinux.it
Orvieto Linux User Group info@orvietolinux.it