Ubuntu Server: checklist minima di sicurezza dopo l’installazione

Introduzione

La sicurezza Ubuntu Server non inizia quando il server è già online da tre mesi, pieno di servizi esposti e con una password scelta “al volo” perché tanto “poi la cambiamo”. Inizia subito dopo l’installazione, prima di caricare siti, gestionali, database, pannelli, servizi web o qualsiasi altra cosa debba stare su quella macchina.

Ubuntu Server è una base solida, soprattutto nelle versioni LTS, ma “solido” non significa “automaticamente blindato”. Un server appena installato va configurato con un minimo di metodo: aggiornamenti, firewall, SSH, utenti, backup, log e qualche controllo periodico. Niente paranoia da bunker sotterraneo. Solo buone pratiche.

Questa è una checklist pratica, pensata per utenti tecnici, piccole aziende e PMI che vogliono mettere online un server senza lasciarlo in balia del primo scanner automatico che passa.



Perché serve una checklist di sicurezza

Un server esposto su Internet viene scansionato continuamente. Non perché qualcuno ce l’abbia con voi personalmente, ma perché la rete è piena di bot che cercano porte aperte, servizi vecchi, login deboli e configurazioni dimenticate.

La classica installazione “avanti, avanti, fine” può andare bene per provare Ubuntu in laboratorio. In produzione, invece, serve almeno una base di hardening.

La checklist minima serve a rispondere a domande molto semplici:

  • il sistema è aggiornato?
  • il firewall è attivo?
  • SSH è configurato in modo sensato?
  • il login root è disabilitato?
  • esiste un utente amministrativo dedicato?
  • ci sono backup verificabili?
  • i log vengono controllati?
  • il disco ha spazio sufficiente?
  • i servizi esposti sono davvero necessari?

Sembra banale. Infatti lo è. Ed è proprio per questo che spesso viene ignorato.

1 – Aggiornare subito il sistema

La prima operazione dopo l’installazione è aggiornare il sistema.

Comandi base:

sudo apt update

sudo apt upgrade

sudo apt autoremove

Con apt update aggiorni l’elenco dei pacchetti disponibili. Con apt upgrade installi gli aggiornamenti. Con apt autoremove rimuovi pacchetti non più necessari.

Su un server appena installato è buona norma riavviare se vengono aggiornati kernel o componenti importanti:

sudo reboot

Dopo il riavvio:

uname -a

e:

lsb_release -a

Così verifichi versione del kernel e release Ubuntu installata.

Aggiornamenti automatici: sì, ma con criterio

Per molti server ha senso abilitare gli aggiornamenti automatici di sicurezza:

sudo apt install unattended-upgrades

sudo dpkg-reconfigure unattended-upgrades

Non significa dimenticarsi del server. Significa ridurre il rischio di lasciare vulnerabilità note aperte per settimane.

Per server critici conviene comunque avere una finestra di manutenzione, backup prima degli aggiornamenti importanti e un minimo di controllo dopo il riavvio. Perché aggiornare è giusto, ma aggiornare a occhi chiusi su una macchina delicata è sport estremo mascherato da efficienza.

2 – Creare un utente sudo e non lavorare come root

Un server amministrato direttamente come root è comodo. Anche attraversare l’autostrada bendati è rapido, almeno per qualche secondo.

Meglio creare un utente dedicato:

sudo adduser nomeutente

sudo usermod -aG sudo nomeutente

Poi verificare l’accesso:

su – nomeutente

sudo whoami

Se il comando restituisce:

root

l’utente ha privilegi sudo.

Da quel momento, l’amministrazione ordinaria va fatta con l’utente sudo, non con login diretto root.



3 – Mettere mano a SSH prima di esporre il server

SSH è spesso la porta principale di amministrazione. Di conseguenza è anche una delle prime porte bersagliate.

Il file da controllare è:

sudo nano /etc/ssh/sshd_config

Le impostazioni minime da valutare sono:

PermitRootLogin no

PasswordAuthentication no

PubkeyAuthentication yes

Attenzione: prima di disabilitare l’accesso con password, bisogna configurare e testare l’accesso con chiave SSH. Altrimenti il server diventa molto sicuro: così sicuro che non ci entrate più nemmeno voi.

Configurare una chiave SSH

Sul PC client si genera una chiave:

ssh-keygen -t ed25519

Poi si copia la chiave pubblica sul server:

ssh-copy-id nomeutente@indirizzo-server

Testare l’accesso:

ssh nomeutente@indirizzo-server

Solo dopo aver verificato che l’accesso con chiave funziona, si può disabilitare l’autenticazione con password.

Riavvio del servizio SSH:

sudo systemctl restart ssh

Prima di chiudere la sessione attuale, aprire una seconda sessione SSH e verificare che l’accesso funzioni. Regola d’oro: mai chiudere l’unica porta mentre si è ancora dentro casa.

4 – Attivare UFW, il firewall di Ubuntu

Ubuntu mette a disposizione UFW, cioè Uncomplicated Firewall, un’interfaccia semplice per gestire le regole firewall.

Prima di abilitarlo, bisogna permettere SSH. Se si usa la porta standard:

sudo ufw allow OpenSSH

oppure:

sudo ufw allow 22/tcp

Poi si abilita il firewall:

sudo ufw enable

Controllo dello stato:

sudo ufw status verbose

Una configurazione minima dovrebbe consentire solo ciò che serve davvero. Per esempio, su un server web:

sudo ufw allow 80/tcp

sudo ufw allow 443/tcp

Poi verificare:

sudo ufw status numbered

Regola pratica

Aprire solo le porte necessarie.

Se il server deve fare web, servono HTTP e HTTPS. Se deve essere amministrato via SSH, serve SSH. Se non deve esporre MySQL, PostgreSQL, Redis o altri servizi verso Internet, quelle porte non devono essere aperte pubblicamente.

Sembra ovvio. Poi però si trovano database ascoltare allegramente su tutte le interfacce, perché “tanto era solo per fare una prova”.



5 – Installare fail2ban

Fail2ban controlla i log e può bloccare temporaneamente indirizzi IP che generano troppi tentativi falliti.

Installazione:

sudo apt install fail2ban

Creare una configurazione locale:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Aprire il file:

sudo nano /etc/fail2ban/jail.local

Per SSH si può partire da una configurazione semplice:

[sshd]

enabled = true

port = ssh

maxretry = 5

bantime = 1h

findtime = 10m

Riavviare fail2ban:

sudo systemctl restart fail2ban

Verificare lo stato:

sudo fail2ban-client status

sudo fail2ban-client status sshd

Fail2ban non sostituisce chiavi SSH, firewall e password robuste. È uno strato in più. E sugli accessi SSH esposti è uno strato che ha senso.



6 – Controllare quali servizi sono in ascolto

Dopo l’installazione e dopo ogni configurazione importante, conviene vedere quali servizi ascoltano sulla rete.

Comando utile:

sudo ss -tulpn

Qui si vedono porte TCP/UDP, indirizzi di ascolto e processi collegati.

Attenzione particolare agli indirizzi:

0.0.0.0

o:

::

Significano che il servizio ascolta su tutte le interfacce.

Non è sempre sbagliato, ma va saputo. Un servizio interno dovrebbe spesso ascoltare solo su:

127.0.0.1

oppure su una rete privata.

7 – Disattivare quello che non serve

Ogni servizio attivo è una superficie d’attacco in più.

Per vedere i servizi:

systemctl –type=service –state=running

Per disabilitare un servizio non necessario:

sudo systemctl disable nome-servizio

sudo systemctl stop nome-servizio

Non bisogna disattivare cose a caso, naturalmente. Prima si capisce cosa fa il servizio, poi si decide.

La sicurezza non è spegnere tutto come un interruttore generale e poi chiedersi perché il server non funziona più. È lasciare attivo solo ciò che serve.

8 – Verificare AppArmor

Ubuntu usa AppArmor per limitare cosa possono fare alcuni processi. È uno strato di protezione importante perché riduce i danni nel caso un’applicazione venga compromessa.

Controllo stato:

sudo aa-status

Se il comando non è disponibile:

sudo apt install apparmor-utils

Poi:

sudo aa-status

In genere non serve modificare AppArmor su un server base, ma è utile sapere se è attivo e quali profili sono in enforcement.

9 – Configurare backup veri, non “copie speriamo bene”

Un server senza backup non è un server: è una scommessa con il destino.

La checklist minima:

  • backup dei file importanti;
  • backup dei database;
  • backup delle configurazioni;
  • copia fuori dal server;
  • test periodico di ripristino.

Per esempio, per salvare configurazioni importanti:

sudo tar -czf etc-backup-$(date +%F).tar.gz /etc

Per database MySQL/MariaDB:

mysqldump -u utente -p nome_database > nome_database-$(date +%F).sql

Poi il backup va copiato altrove: NAS, storage remoto, server di backup, cloud, repository sicuro. Tenere il backup solo sullo stesso server è utile quanto tenere la ruota di scorta dentro l’auto mentre l’auto brucia.

Backup da controllare

Un backup non testato è una decorazione.

Ogni tanto bisogna provare a ripristinare:

  • un file;
  • un database;
  • una configurazione;
  • un intero servizio, se possibile.

È noioso. Ma molto meno noioso che spiegare al cliente che “i dati forse ci sono, ma non siamo sicuri”.

10 – Controllare log e accessi

I log raccontano cosa succede sul server. Non leggerli mai significa guidare con il parabrezza coperto.

Comandi utili:

sudo journalctl -xe

Per SSH:

sudo journalctl -u ssh

oppure, in base alla versione e configurazione:

sudo tail -f /var/log/auth.log

Per controllare gli ultimi accessi:

last

Per tentativi falliti:

lastb

Se lastb non mostra dati, può dipendere dalla configurazione del file /var/log/btmp.

Una buona abitudine è controllare periodicamente:

  • accessi SSH;
  • errori di autenticazione;
  • servizi che falliscono;
  • riavvii anomali;
  • errori disco;
  • log del firewall.



11 – Monitorare spazio disco e risorse

Un server può fermarsi anche senza essere “bucato”. Basta un disco pieno.

Controllo spazio:

df -h

Controllo inode:

df -i

Controllo directory più pesanti:

sudo du -h –max-depth=1 /var | sort -h

Controllo memoria:

free -h

Processi:

top

oppure:

htop

se installato:

sudo apt install htop

Da monitorare con attenzione:

  • /var/log;
  • directory dei backup;
  • directory dei siti web;
  • database;
  • cache applicative;
  • code email;
  • snapshot dimenticati.

Un server con disco pieno può bloccare database, posta, aggiornamenti e servizi web. E naturalmente lo farà nel momento peggiore, perché ha senso dell’umorismo.

12 – Impostare hostname e timezone

Non è solo ordine estetico. Hostname e timezone corretti aiutano nei log, nel monitoraggio e nella gestione multi-server.

Hostname:

hostnamectl

Impostarlo:

sudo hostnamectl set-hostname nome-server

Timezone:

timedatectl

Per l’Italia:

sudo timedatectl set-timezone Europe/Rome

Verifica:

timedatectl

Log con orari sbagliati significano perdite di tempo quando bisogna capire cosa è successo. E quando c’è un problema, perdere tempo sui fusi orari è una forma raffinata di autolesionismo.



13 – Controllare gli utenti presenti

Verificare gli utenti locali:

cat /etc/passwd

Utenti con shell interattiva:

grep -E ‘/bin/bash|/bin/sh’ /etc/passwd

Verificare chi ha privilegi sudo:

getent group sudo

Controllare chi può accedere via SSH è fondamentale. Account dimenticati, utenti di test e vecchie credenziali sono un classico.

Quando un utente non serve più:

sudo deluser nomeutente

Se bisogna rimuovere anche la home:

sudo deluser –remove-home nomeutente

Da fare con attenzione, naturalmente.

14 – Proteggere i permessi dei file sensibili

Alcuni file meritano attenzione particolare.

Per esempio:

ls -l /etc/ssh/sshd_config

ls -l ~/.ssh

ls -l ~/.ssh/authorized_keys

Permessi tipici per .ssh:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

Se i permessi sono troppo aperti, SSH può rifiutare la chiave o, peggio, si rischia di esporre configurazioni sensibili.

15 – Tenere traccia delle modifiche

Su un server aziendale è utile sapere cosa è stato cambiato, quando e perché.

Anche una documentazione minima può bastare:

  • data installazione;
  • versione Ubuntu;
  • servizi installati;
  • porte aperte;
  • utenti amministrativi;
  • posizione backup;
  • procedure di ripristino;
  • modifiche principali.

Non serve scrivere un romanzo. Serve evitare la classica scena: “Chi ha cambiato questa cosa?” seguita da silenzio, sguardi nel vuoto e colpe attribuite genericamente “agli aggiornamenti”.

Checklist rapida finale

Dopo l’installazione di Ubuntu Server, controllare almeno questi punti:

  1. Sistema aggiornato con apt update e apt upgrade.
  2. Utente amministrativo creato con privilegi sudo.
  3. Login diretto root disabilitato.
  4. Accesso SSH con chiave configurato e testato.
  5. Autenticazione SSH con password disabilitata, se possibile.
  6. Firewall UFW attivo.
  7. Solo porte necessarie aperte.
  8. Fail2ban installato e attivo.
  9. Servizi in ascolto controllati con ss -tulpn.
  10. Servizi inutili disabilitati.
  11. AppArmor verificato.
  12. Backup configurati e copiati fuori dal server.
  13. Ripristino backup testato.
  14. Log SSH e sistema controllati.
  15. Spazio disco monitorato.
  16. Timezone e hostname corretti.
  17. Utenti locali verificati.
  18. Documentazione minima aggiornata.

Conclusione

La sicurezza Ubuntu Server non è una singola opzione da attivare. È una somma di buone pratiche: aggiornamenti, firewall, accessi corretti, backup, log e manutenzione.

Un server ben configurato non diventa invulnerabile, perché l’invulnerabilità esiste solo nelle brochure commerciali e nei discorsi di chi non deve poi intervenire alle due di notte. Però diventa molto meno esposto agli errori banali, agli attacchi automatici e alle dimenticanze più comuni.

Per una PMI o per un professionista, questa checklist è il minimo sindacale prima di considerare un server “pronto”. Poi si può andare oltre con monitoraggio avanzato, hardening specifico, VPN, autenticazione a più fattori, segmentazione di rete e procedure più strutturate.

Ma il primo passo resta sempre lo stesso: non mettere online un server appena installato sperando che Ubuntu faccia tutto da solo. Ubuntu aiuta. Il resto bisogna configurarlo.



Condividi