10 Migliori Pratiche Essenziali per Rafforzare il Tuo Server SSH
Secure Shell (SSH) è la spina dorsale dell'amministrazione remota dei server, fornendo un protocollo di rete crittografico per comunicazioni dati sicure, esecuzione di comandi remoti e altri servizi di rete. Tuttavia, la sua natura onnipresente lo rende anche un obiettivo primario per gli aggressori. Un server SSH non adeguatamente protetto può aprire una vulnerabilità critica, portando ad accessi non autorizzati, violazioni di dati e compromissione del sistema. Proteggere il tuo ambiente di accesso remoto non è solo una buona pratica; è una necessità.
Questo articolo illustra 10 migliori pratiche essenziali per rafforzare la configurazione del tuo server SSH. Implementando queste direttive di configurazione critiche, le impostazioni dei permessi consigliate e i suggerimenti di sicurezza, è possibile rafforzare in modo significativo le difese del server contro accessi non autorizzati e vettori di attacco comuni come tentativi di forza bruta e credential stuffing. Seguire queste linee guida aiuterà a garantire che la tua amministrazione remota rimanga sicura e che l'infrastruttura del tuo server sia protetta.
1. Modificare la Porta SSH Predefinita
La porta SSH predefinita è 22. Questa è universalmente nota e costantemente scansionata da bot automatizzati alla ricerca di server vulnerabili. La modifica della porta predefinita fornisce un livello di oscurità semplice, ma efficace. Sebbene non sia di per sé una misura di sicurezza, riduce significativamente il rumore delle scansioni automatizzate e aiuta a evitare molti attacchi opportunistici.
Per modificare la porta, modifica il file sshd_config, solitamente situato in /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
Trova la riga Port 22 (o aggiungila se non esiste) e cambia 22 con un numero di porta non standard e non assegnato (ad esempio, 2222, 49152-65535 sono porte utente/dinamiche).
#Port 22
Port 2222
Dopo aver salvato il file, riavvia il servizio SSH. Ricorda di aggiornare le regole del firewall per consentire il traffico sulla nuova porta e bloccare quella vecchia.
sudo systemctl restart sshd
# Per UFW (Uncomplicated Firewall):
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload
# Per Firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload
Suggerimento: Lascia sempre una sessione SSH aperta mentre testi le modifiche alla configurazione. Se rimani bloccato fuori, puoi annullare le modifiche nella sessione attiva.
2. Disabilitare l'Accesso Root
L'accesso diretto come root tramite SSH è fortemente sconsigliato. L'utente root dispone di privilegi illimitati, il che lo rende un obiettivo primario per gli aggressori. Se un aggressore ottiene l'accesso come root, ha il controllo completo del tuo sistema. Esegui invece il login come utente normale e non privilegiato e quindi usa sudo per eseguire attività amministrative.
In sshd_config, trova la direttiva PermitRootLogin e impostala su no.
PermitRootLogin no
Salva e riavvia il servizio SSH:
sudo systemctl restart sshd
3. Utilizzare l'Autenticazione Basata su Chiavi
L'autenticazione basata su password è suscettibile agli attacchi di forza bruta e agli attacchi a dizionario, specialmente se gli utenti scelgono password deboli. L'autenticazione SSH basata su chiavi è un'alternativa molto più sicura. Utilizza una coppia di chiavi crittografiche: una chiave pubblica memorizzata sul server e una chiave privata conservata sulla tua macchina locale. Solo i client con la chiave privata corrispondente possono autenticarsi.
Passaggi per implementare l'autenticazione basata su chiavi (in breve):
- Genera una coppia di chiavi sulla tua macchina locale:
bash ssh-keygen -t ed25519 -b 4096 -C "[email protected]"ed25519è un algoritmo moderno e sicuro. Anchersaè comune, spesso con-b 4096per la robustezza della chiave.
- Copia la chiave pubblica sul tuo server:
bash ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip
In alternativa, aggiungi manualmente il contenuto di~/.ssh/id_ed25519.puba~/.ssh/authorized_keyssul server per l'utente con cui desideri effettuare l'accesso. -
Assicurati dei permessi corretti sul server:
- Directory
~/.ssh:700(rwx solo per il proprietario) - File
~/.ssh/authorized_keys:600(rw solo per il proprietario)
bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - Directory
4. Disabilitare l'Autenticazione tramite Password
Una volta configurata e testata con successo l'autenticazione basata su chiavi per tutti gli utenti necessari, è necessario disabilitare completamente l'autenticazione tramite password. Questo rimuove l'anello debole della sicurezza SSH rendendo impossibili gli attacchi di forza bruta basati su password.
In sshd_config, imposta PasswordAuthentication su no.
PasswordAuthentication no
Salva e riavvia il servizio SSH:
sudo systemctl restart sshd
Avviso: Non disabilitare mai l'autenticazione tramite password prima di aver verificato che l'autenticazione basata su chiavi funzioni correttamente per tutti gli utenti che necessitano di accesso. Altrimenti, rischi di bloccarti fuori dal server.
5. Limitare l'Accesso degli Utenti
Per impostazione predefinita, qualsiasi account utente sul server può tentare di accedere tramite SSH. È possibile limitare l'accesso SSH solo a utenti o gruppi specifici, riducendo la superficie di attacco.
Utilizza le direttive AllowUsers o AllowGroups in sshd_config.
Per consentire solo utenti specifici (ad esempio, adminuser, devuser):
AllowUsers adminuser devuser
Per consentire solo i membri di un gruppo specifico (ad esempio, sshusers):
AllowGroups sshusers
Suggerimento: È generalmente meglio usare AllowGroups se si dispone di più utenti. Crea un gruppo dedicato per l'accesso SSH e aggiungi gli utenti autorizzati.
sudo groupadd sshusers
sudo usermod -aG sshusers adminuser
sudo usermod -aG sshusers devuser
Dopo aver apportato le modifiche, salva e riavvia SSH.
6. Utilizzare Passphrase Robuste per le Chiavi SSH
Sebbene l'autenticazione basata su chiavi sia robusta, la tua chiave privata è comunque un asset critico. Se un aggressore ottiene l'accesso alla tua macchina locale, potrebbe rubare la tua chiave privata. Una passphrase robusta crittografa la tua chiave privata, richiedendo la passphrase per sbloccarla prima dell'uso. Questo aggiunge un ulteriore livello di sicurezza, proteggendo la tua chiave anche se cade nelle mani sbagliate.
Quando generi la tua chiave SSH (come al punto 3), ti verrà chiesto di inserire una passphrase. Scegli una passphrase lunga, complessa e memorabile, diversa da qualsiasi altra password utilizzata.
7. Implementare il Limite di Velocità delle Connessioni (Fail2Ban)
Anche con l'autenticazione basata su chiavi, un server SSH è ancora soggetto a tentativi di connessione. Strumenti come Fail2Ban possono monitorare attivamente i log SSH per tentativi di accesso falliti ripetuti dallo stesso indirizzo IP e bloccare automaticamente tale indirizzo IP utilizzando le regole del firewall per un periodo prestabilito.
Installazione (esempio per Debian/Ubuntu):
sudo apt update
sudo apt install fail2ban
Fail2Ban funziona immediatamente con le regole SSH predefinite, ma è possibile personalizzarne la configurazione copiando jail.conf in jail.local e modificandolo.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
All'interno di jail.local, è possibile regolare bantime, findtime e maxretry per la sezione [sshd].
[sshd]
enabled = true
port = 2222 # La tua nuova porta SSH
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h # Blocca per 1 ora
findtime = 10m # Cerca 3 fallimenti entro 10 minuti
Riavvia Fail2Ban dopo le modifiche alla configurazione:
sudo systemctl restart fail2ban
8. Mantenere Aggiornato il Software del Server SSH
Le vulnerabilità del software vengono costantemente scoperte e corrette. L'esecuzione di software daemon SSH obsoleto (OpenSSH) significa che potresti essere esposto a exploit noti. Aggiornare regolarmente il software del server, incluso il pacchetto del server OpenSSH, è fondamentale per correggere le vulnerabilità di sicurezza.
# Per Debian/Ubuntu:
sudo apt update && sudo apt upgrade
# Per CentOS/RHEL:
sudo yum update
# oppure
sudo dnf update
Configura il sistema per applicare automaticamente gli aggiornamenti di sicurezza ove appropriato, o stabilisci una routine per gli aggiornamenti manuali.
9. Monitorare i Log SSH per Attività Sospette
Anche con misure preventive robuste, la vigilanza è fondamentale. Rivedi regolarmente i log di autenticazione SSH per rilevare modelli insoliti, tentativi di accesso falliti o tentativi di accesso non autorizzati. Questo ti aiuta a identificare potenziali violazioni o attacchi in corso.
I log SSH si trovano tipicamente in:
/var/log/auth.log(Debian/Ubuntu)/var/log/secure(CentOS/RHEL)- Utilizzando
journalctl(sistemi systemd):
bash sudo journalctl -u sshd -f
Cerca tentativi di autenticazione falliti ripetuti, accessi da indirizzi IP insoliti o accessi riusciti da parte di utenti sconosciuti. Strumenti come Logwatch o Elastic Stack (ELK) possono automatizzare l'analisi dei log e l'allerta per ambienti più grandi.
10. Configurare le Regole del Firewall per Limitare l'Accesso
Un firewall è la tua prima linea di difesa. Per impostazione predefinita, dovrebbe bloccare tutto il traffico in entrata ad eccezione dei servizi che devi esporre esplicitamente. Per SSH, ciò significa consentire connessioni solo sulla porta scelta (ad esempio, 2222) e, idealmente, solo da indirizzi IP o reti attendibili specifici.
Esempio utilizzando UFW (Uncomplicated Firewall):
Consenti SSH da un indirizzo IP specifico 192.168.1.100 sulla porta 2222:
sudo ufw allow from 192.168.1.100 to any port 2222
Consenti SSH da una sottorete specifica 192.168.1.0/24:
sudo ufw allow from 192.168.1.0/24 to any port 2222
Esempio utilizzando Firewalld (CentOS/RHEL):
Consenti SSH da un indirizzo IP specifico 192.168.1.100 sulla porta 2222:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=2222 protocol="tcp" accept'
sudo firewall-cmd --reload
Avviso: Se stai gestendo un server da un indirizzo IP dinamico, fai attenzione alle regole del firewall troppo rigide. Potrebbe essere necessario consentire l'accesso da un intervallo più ampio o utilizzare una VPN.
Suggerimenti Aggiuntivi per il Rafforzamento
Oltre alle 10 essenziali, considera queste direttive per una sicurezza ancora maggiore:
MaxAuthTries: Limita il numero di tentativi di autenticazione per connessione. Il valore predefinito è 6. Ridurlo (ad esempio, a3) diminuisce le possibilità di attacchi di forza bruta. Impostato insshd_config.
config MaxAuthTries 3LoginGraceTime: Limita il tempo concesso a un utente per autenticarsi. Il valore predefinito è 2 minuti. Ridurlo (ad esempio, a30s) riduce la finestra per attacchi lenti.
config LoginGraceTime 30sClientAliveIntervaleClientAliveCountMax: Impedisce che le sessioni SSH inattive rimangano aperte indefinitamente.ClientAliveIntervalinvia un pacchetto nullo ogni X secondi. Se si perdonoClientAliveCountMax(predefinito 3) risposte, la connessione viene terminata.
config ClientAliveInterval 300 ClientAliveCountMax 0 # Disabilita il controllo client alive se si desidera che le sessioni persistano indefinitamenteBanner: Visualizza un messaggio di avviso prima dell'autenticazione. Questo funge da avviso legale per i potenziali utenti non autorizzati.
config Banner /etc/issue.net
Crea il file/etc/issue.netcon il messaggio di avviso desiderato.
Conclusione
Rafforzare il tuo server SSH è un processo continuo, non una configurazione una tantum. Implementando queste 10 migliori pratiche essenziali – dalla modifica delle porte predefinite e la disabilitazione dell'accesso root all'applicazione dell'autenticazione basata su chiavi e l'implementazione di firewall – stabilisci una solida postura di sicurezza per il tuo accesso remoto. Ricorda sempre di testare attentamente le modifiche, mantenere aggiornati i sistemi e monitorare regolarmente i log per qualsiasi attività sospetta. La vigilanza costante è fondamentale per mantenere un ambiente di amministrazione remota sicuro e affidabile.
Queste pratiche sono fondamentali per qualsiasi amministratore di server e ridurranno significativamente la tua esposizione alle minacce informatiche comuni, salvaguardando l'infrastruttura del tuo server contro accessi non autorizzati e potenziali compromissioni.