Come configurare un accesso SSH sicuro su VPS (chiavi SSH + hardening)
L’accesso SSH è il punto principale di ingresso in un VPS, rafforzarlo e renderlo sicuro è fondamentale per prevenire accessi non autorizzati da parte di malintenzionati.
In questa guida configureremo un accesso SSH sicuro tramite chiavi SSH e applicheremo alcune tecniche specifiche di hardening per aumentare la protezione del server.
Aggiornare il sistema
Prima di iniziare, aggiorna i pacchetti di sistema per avere le ultime patch di sicurezza.
sudo apt update && sudo apt upgrade -y
Creare una coppia di chiavi SSH
Ora, invece del server, passeremo a utilizzare il terminale nel nostro computer locale.
Scrivi "cmd" nella barra di ricerca e apri il Promt dei Comandi.
Genera la chiave con il comando:
ssh-keygen -t ed25519
ssh-keygen -t rsa -b 4096
Questo comando ti richiederà, in ordine:
- Il nome del file in cui salvare la chiave (es. nomechiave)
- Una passphrase (es. PasswordSicura123!)
- Una conferma della passphrase (es. PasswordSicura123)
Una volta terminato l'inserimento di tutti i dati avrai a tua disposizione:
- una chiave privata → ~/.ssh/nomechiave
- una chiave pubblica → ~/.ssh/nomechiave.pub
Caricare la chiave SSH sul server
Rimanendo nella console locale, carica la chiave pubblica nel server con:
ssh-copy-id user@IP_DEL_SERVER
Se ssh-copy-id non è disponibile nel tuo computer:
cat ~/.ssh/id_ed25519.pub | ssh user@IP_DEL_SERVER "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Ora puoi accedere al server senza password:
ssh-copy-id user@IP_DEL_SERVER
Disabilitare l’accesso SSH tramite password
Una volta verificato che l’accesso con chiave funziona, disabilita quello con password.
Spostiamoci nel terminale del server. Apri il file di configurazione SSH:
sudo nano /etc/ssh/sshd_config
Modifica o controlla queste voci:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
ChallengeResponseAuthentication no
Salva e riavvia il servizio:
sudo systemctl restart ssh
Cambiare la porta SSH
Per un'ulteriore misura di sicurezza, consigliamo anche di modificare la porta di default per l'accesso SSH.
Apri di nuovo il file con il comando
sudo nano /etc/ssh/sshd_config
Cambia il valore della stringa "Port: 22" con una porta che non utilizzi, per esempio 2222
Inoltre, dato che collegarsi al server con l'utente root è rischioso, suggeriamo di usare un utente normale + sudo.
Disabilita l'accesso a SSH con l'utente root verificando che nel file la voce "PermitRootLogin" sia impostato su "no".
Salva e riavvia il servizio:
sudo systemctl restart ssh
Abilitare il firewall per SSH
Ora passiamo a un fattore altrettanto importante nell'ambito SSH, il firewall.
Abilitiamo l'accesso alla porta per accedere con il comando:
Su Ubuntu o Debian (UFW)
sudo ufw allow 22/tcp
Su AlmaLinux o Centos (firewalld)
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
Mentre se hai cambiato porta, sostituire il numero "22", con il numero inserito precedentemente nel file.
Cambia il valore della stringa "Port: 22" con una porta che non utilizzi, per esempio 2222
Limitare i tentativi di accesso con Fail2ban
Utilizzare Fail2ban riduce il rischio di attacchi brute-force.
Installiamo il pacchetto:
Su Ubuntu o Debian
sudo apt install fail2ban -y
Su AlmaLinux o Centos
sudo dnf install fail2ban -y
Apri e configura il file locale:
sudo nano /etc/fail2ban/jail.local
Aggiungi le seguenti voci nel file appena aperto:
[sshd]
enabled = true
maxretry = 5
bantime = 1h
findtime = 10m
Salva e riavvia il servizio:
sudo systemctl restart fail2ban