Migliori Pratiche per Rafforzare la Sicurezza SSH sui Server Linux

Proteggi immediatamente il tuo server Linux padroneggiando queste tecniche essenziali di hardening SSH. Questa guida esperta fornisce passaggi attuabili, concentrandosi sulle modifiche di configurazione in `sshd_config`. Scopri come disabilitare il login root ad alto rischio, implementare l'autenticazione obbligatoria basata su chiave per eliminare le password deboli, cambiare la porta predefinita e installare Fail2Ban per un limitazione efficace della velocità contro gli attacchi di forza bruta. Proteggi il tuo sistema trasformando SSH in un canale robusto e sicuro.

40 visualizzazioni

Migliori Pratiche per il Rafforzamento della Sicurezza SSH sui Server Linux

Secure Shell (SSH) è la spina dorsale della gestione remota per praticamente ogni server Linux. Sebbene sia incredibilmente potente e generalmente sicuro fin dall'installazione, SSH è anche l'obiettivo principale per attori malevoli che tentano di ottenere accesso non autorizzato tramite attacchi a forza bruta, attacchi a dizionario e credential stuffing.

Rafforzare la configurazione SSH è probabilmente il passo più critico per proteggere una nuova implementazione Linux. Implementando alcune best practice fondamentali—andando oltre la semplice autenticazione con nome utente e password—è possibile ridurre drasticamente la superficie di attacco, minimizzare il "rumore" nei log e garantire che solo gli utenti autorizzati che utilizzano metodi sicuri possano accedere al sistema.

Questa guida illustra passaggi essenziali e attuabili per la messa in sicurezza del servizio SSH su qualsiasi distribuzione Linux, concentrandosi sul file di configurazione principale: /etc/ssh/sshd_config.


Prerequisito: Eseguire il Backup della Configurazione

Prima di apportare qualsiasi modifica alla configurazione del demone SSH (sshd_config), è fondamentale crearne un backup. Una configurazione errata può bloccare l'accesso al server. Testare sempre accuratamente le modifiche.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)

Dopo aver modificato il file, controllare la sintassi prima di riavviare il servizio:

sudo sshd -t

Se il test ha successo, è possibile riavviare in sicurezza il servizio SSH (il comando varia a seconda della distribuzione):

# Per sistemi che utilizzano systemd (la maggior parte delle distribuzioni moderne)
sudo systemctl restart sshd

1. Disabilitare l'Accesso Root

Consentire l'accesso diretto come utente root è uno dei maggiori rischi per la sicurezza. Se un aggressore riesce a forzare una password, ottiene istantaneamente il controllo completo del sistema. Invece, gli utenti non-root dovrebbero accedere prima ed elevare i privilegi utilizzando sudo.

Passo di Configurazione

Aprire /etc/ssh/sshd_config e individuare la direttiva PermitRootLogin. Cambiare il suo valore in no.

# Prima:
# PermitRootLogin yes

# Dopo (Migliore Pratica):
PermitRootLogin no

Nota Importante

Assicurarsi di aver creato e configurato almeno un utente standard con privilegi sudo prima di disabilitare l'accesso root. In caso contrario, si rimarrà bloccati fuori dall'accesso amministrativo.

2. Implementare l'Autenticazione Obbligatoria Basata su Chiave

L'autenticazione tramite password è suscettibile agli attacchi a forza bruta e a dizionario. Le chiavi SSH, composte da una chiave pubblica (sul server) e una chiave privata (sul client), offrono una sicurezza significativamente maggiore grazie alla loro estrema complessità e lunghezza.

A. Generare e Installare le Chiavi

  1. Generare la Coppia di Chiavi (sulla macchina client locale):
    bash ssh-keygen -t ed25519 -C "[email protected]"
  2. Copiare la Chiave Pubblica (sul server):
    bash ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip

B. Disabilitare l'Autenticazione tramite Password

Una volta confermato che è possibile accedere con successo utilizzando la chiave SSH, disabilitare completamente l'autenticazione tramite password.

# Disabilita le password
PasswordAuthentication no

# Assicura che le chiavi siano abilitate
PubkeyAuthentication yes

Migliore Pratica: Utilizzare tipi di chiave forti come Ed25519 o RSA a 4096 bit. Proteggere sempre la chiave privata con una passphrase robusta.

3. Cambiare la Porta SSH Predefinita (Difesa in Profondità)

La porta SSH predefinita (porta TCP 22) è costantemente scansionata da bot automatizzati. Cambiare la porta con un numero alto e non standard (ad esempio, 2222, 22222 o 30000+) riduce significativamente la quantità di "rumore" nei log del server e rende invisibili agli scanner casuali.

Passo di Configurazione

In /etc/ssh/sshd_config, modificare la direttiva Port:

# Prima:
# Port 22

# Dopo (Esempio di porta non standard):
Port 22222

Avviso: Necessaria Modifica del Firewall

Se si cambia la porta, si deve aggiornare il firewall (ad esempio, iptables, firewalld o AWS Security Groups) per consentire il traffico sulla nuova porta. La mancata esecuzione di questa operazione comporterà l'immediata perdita della connessione.

Esempio usando firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload

4. Limitare l'Accesso a Utenti e Gruppi Specifici

Per applicare un controllo degli accessi rigoroso, è necessario definire esplicitamente quali utenti o gruppi sono autorizzati a connettersi tramite SSH. Ciò limita i potenziali punti di ingresso anche se un account viene compromesso o non è utilizzato.

Direttive di Configurazione

Utilizzare una o entrambe le seguenti direttive in sshd_config:

  1. Consentire utenti specifici:
    config AllowUsers alice bob
  2. Consentire gruppi specifici:
    config AllowGroups sshaccess admins

Se queste direttive sono presenti, a qualsiasi utente o gruppo non esplicitamente elencato verrà negato l'accesso.

5. Imporre Protocolli e Cifratori più Forti

Assicurarsi di utilizzare il moderno e sicuro SSH Protocol 2 e imporre l'uso di cifrari crittografici e Codici di Autenticazione dei Messaggi (MAC) robusti.

Passaggi di Configurazione

Verificare che i protocolli legacy meno sicuri siano disabilitati:

Protocol 2

# Nega i metodi di autenticazione legacy non sicuri
HostbasedAuthentication no
IgnoreRhosts yes

Sebbene le implementazioni SSH moderne siano spesso ben configurate per impostazione predefinita, definire esplicitamente cifrari e MAC robusti può prevenire attacchi di downgrade. Un set minimo consigliato include:

Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256

6. Implementare la Limitazione della Frequenza e il Rilevamento delle Intrusioni (Fail2Ban)

Anche con l'autenticazione basata su chiave, la scansione continua da parte dei bot consuma risorse e ingombra i log. Fail2Ban è uno strumento cruciale che monitora i log alla ricerca di tentativi di accesso falliti (o altre attività sospette) e regola dinamicamente il firewall per bannare temporaneamente o permanentemente l'indirizzo IP di origine.

Installazione e Configurazione (Passaggi Generali)

  1. Installare Fail2Ban:
    ```bash
    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban

    RHEL/CentOS/Fedora

    sudo dnf install fail2ban
    `` 2. **Configurare la Jail SSH:** Fail2Ban utilizza configurazioni chiamate 'jails'. La jailsshdpredefinita è altamente efficace nel monitorare/var/log/auth.log` (o equivalente) per guasti ripetuti sul servizio SSH e applicare automaticamente ban temporanei.

  2. Assicurarsi che il Servizio sia in Esecuzione:
    bash sudo systemctl enable fail2ban sudo systemctl start fail2ban

Fail2Ban mitiga significativamente i tentativi automatizzati a forza bruta ed è considerato obbligatorio per i server esposti a Internet.

7. Altre Direttive Essenziali per il Rafforzamento SSH

Questi piccoli aggiustamenti aiutano a gestire le sessioni e a ridurre la potenziale finestra di attacco:

Direttiva Valore Consigliato Scopo
ClientAliveInterval 300 Invia un pacchetto nullo ogni 300 secondi (5 minuti) per mantenere viva la sessione.
ClientAliveCountMax 3 Numero massimo di controlli 'alive' falliti prima della disconnessione (15 minuti totali di inattività).
UsePAM yes Abilita i Moduli di Autenticazione Pluggable (PAM) per ulteriori politiche di sicurezza del sistema locale.
PermitEmptyPasswords no Proibisce agli utenti con password vuote di accedere (dovrebbe essere no per impostazione predefinita).

Riepilogo Checklist di Rafforzamento

Utilizzare questa checklist per assicurarsi che il server soddisfi gli standard di base di rafforzamento SSH:

  1. [ ] Eseguire il backup di sshd_config prima di apportare modifiche.
  2. [ ] Impostare PermitRootLogin no.
  3. [ ] Impostare PasswordAuthentication no (dopo la configurazione della chiave).
  4. [ ] Cambiare la Port a un valore non standard.
  5. [ ] Aggiornare il firewall per consentire la nuova porta.
  6. [ ] Usare AllowUsers o AllowGroups per limitare l'accesso.
  7. [ ] Impostare Protocol 2.
  8. [ ] Installare e configurare Fail2Ban.
  9. [ ] Controllare la configurazione con sshd -t prima di riavviare.

Implementando queste best practice, si trasforma SSH da una potenziale vulnerabilità a un canale di amministrazione remota altamente sicuro.