Introduzione al Linux Security Hardening
La sicurezza dei sistemi Linux non è mai stata così critica. Con l’aumento degli attacchi ransomware, delle violazioni dei dati e delle minacce APT (Advanced Persistent Threats), proteggere adeguatamente i propri server Linux è diventato un requisito fondamentale per qualsiasi organizzazione.
Il Linux Security Hardening è il processo di riduzione della superficie d’attacco di un sistema operativo Linux attraverso una serie di configurazioni, aggiornamenti e best practice. In questa guida completa, esploreremo ogni aspetto del hardening con esempi pratici e una checklist da seguire passo dopo passo.
Secondo il NIST Cybersecurity Framework e le linee guida CIS Benchmarks, un sistema Linux ben configurato può resistere a oltre il 90% degli attacchi comuni. Non si tratta di rendere il sistema impenetrabile, ma di alzare significativamente il costo e la difficoltà per un potenziale attaccante.
Prerequisiti
Prima di iniziare con il processo di hardening, assicurati di avere:
- Accesso root o sudo al sistema Linux (testato su Ubuntu 22.04/24.04, Debian 12, RHEL/CentOS 9)
- Un backup completo e verificato del sistema — non procedere senza uno snapshot o backup funzionante
- Accesso fisico o out-of-band (IPMI/iDRAC) in caso di blocco accidentale
- Conoscenza base della riga di comando Linux
- Un ambiente di test su cui sperimentare prima della produzione
Attenzione: alcune configurazioni possono bloccare l’accesso al sistema se applicate in modo errato. Testa sempre in ambiente sandbox prima di procedere su sistemi critici.
Step 1: Aggiornamenti del Sistema e Patch Management
Il primo e più importante passo è mantenere il sistema aggiornato. La maggior parte delle violazioni sfrutta vulnerabilità note per le quali esistono già patch.
Aggiornamento manuale immediato
# Ubuntu/Debian/SysLinuxOS sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y # RHEL/CentOS/Rocky Linux sudo dnf update -y && sudo dnf autoremove -y
Configurare gli aggiornamenti automatici di sicurezza
# Ubuntu: installare unattended-upgrades sudo apt install unattended-upgrades -y sudo dpkg-reconfigure --priority=low unattended-upgrades # Verifica configurazione cat /etc/apt/apt.conf.d/20auto-upgrades
Configura il file /etc/apt/apt.conf.d/50unattended-upgrades per abilitare le notifiche email in caso di aggiornamenti critici.
Step 2: Hardening SSH — La Prima Linea di Difesa
SSH è il vettore di attacco più comune per i server esposti su Internet. Una configurazione SSH errata è responsabile di milioni di compromissioni ogni anno.
Configurazione sicura di sshd_config
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo nano /etc/ssh/sshd_config
Applica le seguenti impostazioni nel file di configurazione:
Port 2222 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 X11Forwarding no AllowUsers tuousername Protocol 2
Generare e configurare chiavi SSH sicure
# Genera chiave ED25519 (più sicura di RSA) ssh-keygen -t ed25519 -C 'admin@tuoserver.it' -f ~/.ssh/id_ed25519 # Copia la chiave pubblica sul server ssh-copy-id -i ~/.ssh/id_ed25519.pub utente@server # Riavvia SSH dopo le modifiche sudo systemctl restart sshd
Importante: Prima di chiudere la sessione corrente, apri un’altra finestra e verifica che il nuovo accesso SSH funzioni correttamente.
Step 3: Configurazione del Firewall con UFW o nftables
Un firewall ben configurato è essenziale per limitare la superficie d’attacco. Linux offre diverse opzioni: UFW per semplicità, nftables per controllo avanzato.
Configurazione UFW (Ubuntu/Debian)
# Reset e configurazione base sudo ufw reset sudo ufw default deny incoming sudo ufw default allow outgoing # Permetti solo servizi necessari sudo ufw allow 2222/tcp comment 'SSH custom port' sudo ufw allow 443/tcp comment 'HTTPS' sudo ufw allow 80/tcp comment 'HTTP redirect' # Abilita e verifica sudo ufw enable sudo ufw status verbose
Rate limiting per prevenire brute force
# UFW rate limiting automatico sudo ufw limit 2222/tcp # Oppure con iptables manuale sudo iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set sudo iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Step 4: Hardening degli Account Utente e dei Permessi
La gestione degli account è fondamentale per il principio del least privilege — ogni utente e processo deve avere solo i permessi strettamente necessari.
Politiche password robuste
# Installare libpam-pwquality sudo apt install libpam-pwquality -y # Configurare /etc/security/pwquality.conf minlen = 14 dcredit = -1 ucredit = -1 ocredit = -1 lcredit = -1 rufatt = 3
Bloccare account inattivi e configurare aging password
# Configurare aging per tutti i nuovi utenti sudo nano /etc/login.defs # Imposta: PASS_MAX_DAYS 90, PASS_MIN_DAYS 7, PASS_WARN_AGE 14 # Bloccare account dopo tentativi falliti sudo nano /etc/pam.d/common-auth # Aggiungi: auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=1800
Audit degli utenti con privilegi elevati
# Visualizza tutti gli utenti con UID 0 (root)
awk -F: '($3 == 0) {print}' /etc/passwd
# Verifica utenti nel gruppo sudo
getent group sudo
# Blocca account inutilizzati
sudo usermod -L nomeutente
sudo usermod -s /sbin/nologin nomeutente
Step 5: Kernel Hardening con sysctl
Il kernel Linux offre numerosi parametri configurabili che migliorano significativamente la sicurezza a livello di rete e sistema.
sudo nano /etc/sysctl.d/99-hardening.conf
Aggiungi le seguenti configurazioni:
# Protezione rete net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 # Protezione kernel kernel.randomize_va_space = 2 kernel.dmesg_restrict = 1 kernel.kptr_restrict = 2 fs.suid_dumpable = 0 # Applica le modifiche sudo sysctl -p /etc/sysctl.d/99-hardening.conf
Step 6: Audit e Monitoring con auditd e Fail2ban
Senza monitoring, non puoi sapere se il tuo sistema è stato compromesso. L’implementazione di audit e logging è cruciale.
Installazione e configurazione auditd
sudo apt install auditd audispd-plugins -y # Regole audit critiche sudo auditctl -w /etc/passwd -p wa -k identity sudo auditctl -w /etc/shadow -p wa -k identity sudo auditctl -w /etc/sudoers -p wa -k sudo_changes sudo auditctl -w /var/log/auth.log -p wa -k auth_log # Rendere le regole permanenti sudo nano /etc/audit/rules.d/hardening.rules
Configurazione Fail2ban
sudo apt install fail2ban -y sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Configurazione base in jail.local [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 [sshd] enabled = true port = 2222 logpath = /var/log/auth.log sudo systemctl enable fail2ban && sudo systemctl start fail2ban
Step 7: Rimozione Servizi Non Necessari e Hardening Avanzato
- Disabilita servizi inutili:
sudo systemctl disable --now cups bluetooth avahi-daemon - Rimuovi software non necessario:
sudo apt purge telnet rsh-client ftp -y - Configura AppArmor o SELinux per il controllo obbligatorio degli accessi (MAC)
- Imposta AIDE (Advanced Intrusion Detection Environment) per il monitoraggio dell’integrità dei file
- Configura il boot sicuro con GRUB password per prevenire accessi fisici non autorizzati
# Installare e inizializzare AIDE sudo apt install aide -y sudo aideinit sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db # Verifica giornaliera con cron echo '0 3 * * * root /usr/bin/aide --check' | sudo tee /etc/cron.d/aide-check
Troubleshooting: Problemi Comuni e Soluzioni
Problema 1: Bloccato fuori da SSH dopo la modifica
Se non riesci più ad accedere via SSH, usa la console out-of-band (IPMI, iDRAC, VNC) o accesso fisico:
# Verifica lo stato del servizio SSH sudo systemctl status sshd # Controlla i log per errori sudo journalctl -u sshd -n 50 # Ripristina la configurazione backup sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config sudo systemctl restart sshd
Problema 2: UFW blocca traffico legittimo
# Visualizza le regole attive sudo ufw status numbered # Rimuovi una regola specifica sudo ufw delete [numero_regola] # Log di UFW per diagnostica sudo tail -f /var/log/ufw.log
Problema 3: Fail2ban banna IP legittimi
# Sblocca un IP bannato sudo fail2ban-client set sshd unbanip 192.168.1.100 # Aggiungi IP alla whitelist in jail.local [DEFAULT] ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
Problema 4: sysctl non si applica al riavvio
# Verifica che il file sia nella directory corretta ls /etc/sysctl.d/ # Applica manualmente tutte le configurazioni sudo sysctl --system
Conclusione
Il Linux Security Hardening non è un’attività da svolgere una tantum, ma un processo continuo e iterativo. La checklist che abbiamo esplorato in questa guida copre i fondamentali, ma la sicurezza evolve costantemente insieme alle minacce.
Ecco i punti chiave da ricordare:
- Mantieni sempre il sistema aggiornato con patch di sicurezza
- Segui il principio del least privilege per utenti e servizi
- Monitora costantemente i log e configura alerting automatico
- Esegui vulnerability assessment periodici con strumenti come Lynis o OpenVAS
- Documenta ogni modifica apportata al sistema
- Testa le procedure di ripristino regolarmente
Un sistema sicuro al 100% non esiste, ma con una corretta implementazione del hardening puoi rendere il tuo server Linux significativamente più resiliente alle minacce moderne.

