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 impostarePasswordAuthentication no. Dopo aver apportato le modifiche, riavviare il servizio SSH:```bash
sudo systemctl restart sshdo 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 direttivaPort. Ad esempio, per utilizzare la porta2222:Port 2222Ricordarsi 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.
AllowUserseAllowGroups: Utilizzare queste direttive insshd_configper specificare esplicitamente chi può connettersi.
AllowUsers admin user1 AllowGroups sshusersDenyUserseDenyGroups: 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 noinsshd_config.
5. Configurare Timeout di Inattività e Keepalive
Impedire che sessioni SSH attive e non sorvegliate rimangano aperte indefinitamente.
ClientAliveIntervaleClientAliveCountMax: Queste impostazioni lato server inviano pacchetti nulli al client a intervalli regolari per verificare se la connessione è ancora attiva. Se il client non risponde dopoClientAliveCountMaxtentativi, 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 2insshd_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,600o400) 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 fail2banosudo yum install fail2ban). - Configurazione: Configurare i "jails" (celle) in
/etc/fail2ban/jail.localper 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.