Il server hardening è il processo di configurazione di un server web per ridurre al minimo la superficie di attacco — cioè l'insieme di tutti i punti potenziali attraverso cui un attaccante potrebbe compromettere il sistema. Un server installato con le impostazioni predefinite è progettato per funzionare, non per essere sicuro: espone servizi non necessari, usa configurazioni permissive e non applica le restrizioni che una produzione sicura richiede.
L'hardening non è un evento una tantum ma un processo continuo: nuove vulnerabilità vengono scoperte, le configurazioni devono essere verificate periodicamente e le best practice evolvono nel tempo.
Sistema operativo: le basi
- Patch management sistematico: applicare aggiornamenti di sicurezza del sistema operativo entro 24-72 ore dal rilascio per vulnerabilità critiche. Automatizzare dove possibile, verificare gli aggiornamenti automatici siano effettivamente applicati.
- Principio del minimo privilegio: il processo del web server (Nginx, Apache) deve girare con un utente dedicato senza privilegi di root. Il processo PHP deve avere accesso solo alle directory strettamente necessarie.
- Servizi non necessari disabilitati: disinstallare o disabilitare ogni servizio non strettamente richiesto per il funzionamento del sito. Ogni servizio attivo è una potenziale vulnerabilità.
- Firewall del sistema operativo (iptables/ufw): regole che permettono solo il traffico necessario (80/443 per HTTP/HTTPS, 22 per SSH da IP specifici) e bloccano tutto il resto.
Hardening SSH
SSH è il protocollo di accesso remoto al server. Una configurazione non hardened è uno dei bersagli più frequenti:
- Autenticazione a chiave pubblica, non password: le chiavi SSH sono enormemente più sicure delle password e non possono essere oggetto di brute force efficace
- Disabilitare il login root via SSH:
PermitRootLogin nonel file di configurazione SSH - Cambiare la porta SSH da 22: riduce significativamente il rumore di fondo dei tentativi automatici
- Fail2ban: blocca automaticamente gli IP che superano un numero definito di tentativi di login falliti
- Whitelist IP per SSH: se il team di gestione accede da IP fissi, limitare SSH solo a quegli IP
Hardening del web server (Nginx/Apache)
- Nascondere la versione del software: le intestazioni HTTP non devono rivelare la versione di Nginx, Apache o PHP — informazioni che permettono agli attaccanti di cercare vulnerabilità specifiche
- Security headers HTTP: configurare header come
X-Content-Type-Options,X-Frame-Options,Strict-Transport-Security,Content-Security-PolicyeReferrer-Policy - Disabilitare l'elenco delle directory: impedire che una URL senza file index mostri il contenuto della directory
- TLS 1.2 minimo, preferibilmente TLS 1.3: disabilitare TLS 1.0 e 1.1, configurare solo cipher suite sicure
- Rate limiting a livello web server: limitare il numero di connessioni per IP e il numero di richieste per secondo
Hardening PHP
expose_php = Off: non rivela la versione PHP negli header HTTPallow_url_fopen = Offeallow_url_include = Off: previene attacchi Remote File Inclusiondisable_functions: disabilitare funzioni PHP non necessarie e pericolose (exec,passthru,system,shell_exec)- Mantenere PHP aggiornato all'ultima versione supportata: PHP 7.x non riceve più aggiornamenti di sicurezza
Verifica dell'hardening
L'hardening va verificato con strumenti di scansione automatica e, per ambienti critici, con penetration test manuali. Alcuni strumenti di verifica utili: Mozilla Observatory per gli header HTTP, SSL Labs per la configurazione TLS, Lynis per l'audit del sistema operativo Linux.
Il team tecnico di NEO WEB applica procedure di hardening su tutti i server gestiti e verifica periodicamente la conformità delle configurazioni di sicurezza. Per un audit della configurazione del tuo server, contattaci.