Migliori pratiche di sicurezza SSH: Rafforzamento del tuo server e client

Questa guida completa illustra le migliori pratiche di sicurezza essenziali per le connessioni SSH. Impara come rafforzare il tuo server disabilitando l'autenticazione tramite password, cambiando le porte predefinite e limitando l'accesso. Scopri abitudini cruciali lato client, inclusa la protezione delle chiavi private e la verifica delle chiavi host. Trattiamo anche misure avanzate come l'autenticazione a due fattori e Fail2ban per salvaguardare il tuo accesso remoto contro intrusioni non autorizzate.

44 visualizzazioni

Migliori Pratiche di Sicurezza SSH: Rafforzare il Server e il Client

Secure Shell (SSH) è uno strumento indispensabile per gli amministratori di sistema e gli sviluppatori, che consente l'accesso remoto sicuro a server e altri dispositivi di rete. Sebbene SSH offra una crittografia robusta per impostazione predefinita, la sua sicurezza può essere notevolmente migliorata implementando una serie di migliori pratiche sia sul lato server che sul lato client. Questo articolo approfondisce le misure di sicurezza critiche progettate per rafforzare le connessioni SSH, proteggere dalle vulnerabilità comuni e prevenire l'accesso non autorizzato.

Trascurare la sicurezza SSH può lasciare i sistemi esposti ad attacchi di forza bruta, minacce man-in-the-middle e violazioni di dati non autorizzate. Adottando le pratiche descritte di seguito, è possibile rafforzare significativamente la propria postura di sicurezza e garantire l'integrità e la riservatezza delle operazioni remote.

Rafforzamento della Sicurezza Lato Server

La configurazione del server SSH (sshd_config) è fondamentale per stabilire una base sicura per l'accesso remoto. Queste modifiche influiscono direttamente sul modo in cui i client si connettono e si autenticano al server.

1. Disabilitare l'Autenticazione tramite Password

L'autenticazione tramite password è intrinsecamente vulnerabile agli attacchi di forza bruta. Sostituirla con l'autenticazione basata su chiavi SSH è uno dei miglioramenti di sicurezza più efficaci che si possano apportare.

  • Perché: Le chiavi SSH sono molto più complesse delle password e non possono essere facilmente indovinate o violate tramite metodi di forza bruta. Forniscono una forma di autenticazione molto più forte.
  • Come: Modificare il file sshd_config (che si trova in genere in /etc/ssh/sshd_config) e impostare PasswordAuthentication no. Dopo aver apportato le modifiche, riavviare il servizio SSH:

    ```bash
    sudo systemctl restart sshd

    o sui sistemi più vecchi:

    sudo service ssh restart
    ```

    Importante: Assicurarsi di aver configurato e testato con successo l'autenticazione basata su chiavi SSH prima di disabilitare l'autenticazione tramite password per evitare di bloccarsi fuori dal sistema.

2. Utilizzare una Porta Non Standard

Sebbene non sia una misura di sicurezza primaria contro attaccanti sofisticati, cambiare la porta SSH predefinita (22) può ridurre il rumore dei bot automatizzati che scansionano i server vulnerabili.

  • Come: In sshd_config, modificare la direttiva Port. Ad esempio, per utilizzare la porta 2222:

    Port 2222

    Ricordarsi di aggiornare le regole del firewall per consentire il traffico sulla nuova porta e specificare la porta quando ci si connette dal client:

    bash ssh -p 2222 user@your_server_ip

3. Limitare l'Accesso di Utenti e Gruppi

Controllare quali utenti e gruppi sono autorizzati ad accedere tramite SSH.

  • AllowUsers e AllowGroups: Utilizzare queste direttive in sshd_config per specificare esplicitamente chi può connettersi.
    AllowUsers admin user1 AllowGroups sshusers
  • DenyUsers e DenyGroups: In alternativa, utilizzare queste per bloccare utenti o gruppi specifici.

4. Disabilitare l'Accesso Root

L'accesso diretto come root tramite SSH dovrebbe essere disabilitato per impedire agli attaccanti di prendere immediatamente di mira l'account più potente. Gli utenti dovrebbero invece accedere con i propri account e utilizzare sudo per le attività amministrative.

  • Come: Impostare PermitRootLogin no in sshd_config.

5. Configurare Timeout di Inattività e Keepalive

Impedire che sessioni SSH attive e non sorvegliate rimangano aperte indefinitamente.

  • ClientAliveInterval e ClientAliveCountMax: Queste impostazioni lato server inviano pacchetti nulli al client a intervalli regolari per verificare se la connessione è ancora attiva. Se il client non risponde dopo ClientAliveCountMax tentativi, il server disconnette la sessione.
    ClientAliveInterval 300 # Invia un pacchetto ogni 5 minuti ClientAliveCountMax 2 # Disconnetti dopo 2 risposte mancate (10 minuti)

6. Abilitare Solo il Protocollo 2

La versione 1 del Protocollo SSH è obsoleta e presenta vulnerabilità di sicurezza note. Assicurarsi che sia abilitato solo il Protocollo 2.

  • Come: Impostare Protocol 2 in sshd_config.

7. Rafforzare le Chiavi Host

Assicurarsi che le chiavi host del server siano protette e gestite correttamente.

  • Permessi: Verificare che i file delle chiavi host (ad esempio, /etc/ssh/ssh_host_rsa_key) abbiano permessi restrittivi (ad esempio, 600) e siano di proprietà di root.

Migliori Pratiche di Sicurezza Lato Client

Proteggere la macchina client e le chiavi SSH è cruciale quanto il rafforzamento lato server.

1. Proteggere le Chiavi Private

La chiave privata SSH è il gateway per i vostri server. Trattatela con la massima cura.

  • Permessi: Assicurarsi che il file della chiave privata (ad esempio, ~/.ssh/id_rsa) abbia permessi rigorosi (ad esempio, 600 o 400) in modo che solo voi possiate leggerlo.
    bash chmod 600 ~/.ssh/id_rsa
  • Passphrase: Utilizzare sempre una passphrase forte per crittografare la chiave privata. Ciò aggiunge un ulteriore livello di sicurezza, richiedendo la passphrase anche se il file della chiave viene compromesso.
  • Evitare di Copiare: Non condividere la chiave privata con nessuno o archiviarla in posizioni non sicure.

2. Utilizzare il Port Forwarding dell'Agente SSH (Agent Forwarding) con Cautela

L'agent forwarding SSH consente di utilizzare le chiavi SSH locali per autenticarsi ai server remoti senza copiare le chiavi private su tali server. Sebbene sia comodo, può rappresentare un rischio per la sicurezza se il server remoto viene compromesso.

  • Abilitare: ssh -A user@your_server_ip
  • Migliore Pratica: Utilizzare l'agent forwarding solo quando assolutamente necessario e disconnettersi il prima possibile. Valutare la possibilità di disabilitarlo di default nella configurazione del client.

3. Verificare le Impronte Digitali della Chiave Host

Quando ci si connette a un server SSH per la prima volta, il client richiede di verificare l'impronta digitale della chiave host del server. Questo aiuta a prevenire attacchi man-in-the-middle.

  • Come: Verificare sempre l'impronta digitale rispetto a una fonte fidata (ad esempio, fornita dal provider di hosting o dall'amministratore di sistema). Se l'impronta digitale cambia inaspettatamente nelle connessioni successive, ciò potrebbe indicare un problema di sicurezza.

4. Mantenere Aggiornato il Software Client SSH

Assicurarsi che il software client SSH (OpenSSH, PuTTY, ecc.) sia mantenuto aggiornato per beneficiare delle ultime patch e funzionalità di sicurezza.

Misure di Sicurezza Avanzate

Oltre ai passaggi fondamentali, considerare queste tecniche avanzate:

1. Autenticazione a Due Fattori (2FA)

Implementare l'2FA per un ulteriore livello di sicurezza. Ciò comporta in genere una combinazione di qualcosa che si conosce (la chiave SSH o la password) e qualcosa che si possiede (un codice da un'app di autenticazione o un token hardware).

  • Strumenti: Google Authenticator, Duo Security o token hardware possono essere integrati con PAM (Pluggable Authentication Modules) per SSH.

2. Fail2ban

Fail2ban è un framework software per la prevenzione delle intrusioni che analizza i file di log (ad esempio, /var/log/auth.log) e banna gli IP che mostrano segni malevoli – troppi errori di password, tentativi di exploit, ecc. Aggiorna le regole del firewall per rifiutare gli IP per un periodo di tempo specificato.

  • Installazione: Tipicamente disponibile tramite package manager (sudo apt install fail2ban o sudo yum install fail2ban).
  • Configurazione: Configurare i "jails" (celle) in /etc/fail2ban/jail.local per monitorare i log SSH e definire i tempi di ban e le soglie.

3. Configurazione del Firewall

Impiegare un firewall (come ufw, firewalld o iptables) per limitare l'accesso alla porta SSH (predefinita o personalizzata) solo da indirizzi IP o intervalli fidati.

  • Esempio (ufw):
    bash sudo ufw allow from trusted_ip to any port 22 sudo ufw enable

Conclusione

Proteggere le connessioni SSH è un processo continuo, non una configurazione una tantum. Applicando diligentemente queste migliori pratiche lato server e lato client, è possibile mitigare significativamente i rischi associati all'accesso remoto. Dare la priorità all'autenticazione tramite chiave SSH, a controlli di accesso robusti e a strumenti di monitoraggio come Fail2ban costituisce la base di un ambiente SSH sicuro. La revisione e l'aggiornamento regolari delle configurazioni di sicurezza garantiranno che i vostri sistemi rimangano protetti contro le minacce in evoluzione.