Hardening SSH
Nella guida sul login SSH senza password abbiamo configurato l'autenticazione con chiave. Ma di per sé non mette in sicurezza il server: se l'accesso con password resta attivo, l'attaccante può ancora ignorare la tua chiave e provare a indovinare le credenziali. Vediamo le diverse opzioni di difesa.
Tutte le modifiche riguardano la configurazione del server SSH in /etc/ssh/sshd_config. Dopo ogni modifica va ricaricato il servizio:
sudo systemctl reload sshdTieni aperta una seconda sessione
Prima di toccare la configurazione SSH, apri una seconda connessione al server e lasciala attiva. Se sbagli qualcosa e ti blocchi fuori, quella sessione ti permette di rimediare senza perdere l'accesso.
Disabilitare l'autenticazione con password
Una volta verificato che il login con chiave funziona, l'accesso con password diventa solo una superficie d'attacco. Disabilitalo in /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yesPer ubuntu server
È probabile che il file /etc/ssh/sshd_config.d/50-cloud-init.conf riscriva la configurazione di PasswordAuthentication, in questo caso bisogna creare un file xx-nome.conf (xx < 50) contenente la stringa "PasswordAuthentication no" per sovrascriverlo a sua volta.
Da questo momento solo chi possiede una chiave autorizzata può entrare: i brute-force sulle password diventano inutili.
Disabilitare il login di root
L'utente root esiste su ogni sistema, quindi è il bersaglio numero uno dei tentativi automatici. Conviene impedirne il login diretto e usare un utente normale con sudo:
PermitRootLogin noAssicurati di avere già un utente non-root con privilegi
sudoe la tua chiave installata, altrimenti rischi di non poter più amministrare la macchina.
Fermare i brute-force con fail2ban
Alternativamente all'approccio mostrato nella sezione precedente possiamo introdurre meccanismi per proteggere gli accessi con password. fail2ban legge i log di autenticazione e banna automaticamente gli IP che accumulano tentativi falliti.
Installazione (Debian/Ubuntu):
sudo apt install fail2banCrea un file di configurazione locale (non modificare quello di default, che verrebbe sovrascritto dagli aggiornamenti):
sudo nano /etc/fail2ban/jail.local[sshd]
enabled = true
maxretry = 3
bantime = 1h
findtime = 10mCon questa configurazione un IP che fallisce 3 volte in 10 minuti viene bannato per un'ora. Attiva il servizio:
sudo systemctl enable --now fail2banPuoi controllare lo stato e gli IP bannati con:
sudo fail2ban-client status sshdCambiare la porta: utile, ma non è sicurezza
Spostare SSH da 22 a una porta alta riduce drasticamente il rumore nei log, perché la maggior parte dei bot scansiona solo la 22, modificala in /etc/ssh/sshd_config:
Port 2222Attenzione
È security through obscurity: nasconde, non protegge. Uno scanner di porte la trova comunque. Fallo per pulire i log, non al posto delle misure precedenti. E se usi un firewall, ricordati di aprire la nuova porta prima di riavviare il servizio.
Aggiungere un secondo fattore (MFA)
Per gli accessi più sensibili puoi richiedere, oltre alla password, un codice OTP (in questo esempio useremo Google Authenticator).
sudo apt install libpam-google-authenticatorEsegui la configurazione con l'utente con cui ti colleghi: genererà un QR code da scansionare con l'app e dei codici di recupero da salvare.
google-authenticatorPoi aggiungi la seguente riga in /etc/pam.d/sshd:
auth required pam_google_authenticator.soE in /etc/ssh/sshd_config modifica:
KbdInteractiveAuthentication yesOra il login richiede la password e il codice a sei cifre.
L'MFA funziona con la combinazione di due o più fattori, in questo caso “ciò che sai” (la password) e “ciò che hai” (OTP).
Riepilogo
L'hardening di SSH è difesa in profondità: queste precauzioni insieme riducono drasticamente la superficie d'attacco.
- Solo chiavi niente brute-force sulle password.
- No root login elimina il bersaglio più "ovvio".
- fail2ban riduce il rumore e il pericolo dei bot.
- Porta non standard log più puliti (non è un sistema di sicurezza).
- MFA un secondo fattore che ti protegge in caso di password rubata.
Configurati una volta, questi controlli lavorano in background e trasformano un server esposto in un bersaglio molto poco interessante.