Da cosa protegge e da cosa no
Una nuova porta ferma le scansioni automatiche che provano solo la porta 22, quindi i log diventano molto più silenziosi. Questo è tutto il vantaggio. Una scansione di tutte le porte trova comunque SSH, perché il server si annuncia appena qualcuno si connette. Le password deboli restano deboli su qualsiasi porta. Fai prima le cose che contano davvero: disattiva il login con password e rivedi la configurazione di sshd.
Ha anche piccoli costi: ogni strumento ora richiede la porta e il tuo known_hosts tratta la nuova porta come una voce nuova, quindi confermi di nuovo l'impronta.
Scegli una porta che nessun altro usa. Le porte sotto 1024 possono essere aperte solo da root, un piccolo vantaggio se sshd dovesse fermarsi.
1. Tieni una via di ritorno
Tieni aperta la tua sessione attuale fino all'ultimo passaggio. Una sessione esistente di solito sopravvive al riavvio di sshd, quindi è la tua via di ritorno. Se puoi raggiungere una console dal tuo provider, trovala prima di iniziare.
2. Apri prima la nuova porta
Con ufw:
sudo ufw allow 2222/tcp
Con firewalld, su RHEL, Rocky, AlmaLinux e Fedora:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
Un server cloud di solito ha anche un firewall o un security group nel pannello del provider. Apri la porta anche lì. È il motivo più comune di un timeout dopo questa modifica.
SELinux
Sui sistemi della famiglia RHEL con SELinux in modalità enforcing, sshd non può usare una nuova porta finché non la etichetti. Lo dice anche il sshd_config predefinito di quei sistemi. Controlla, poi aggiungi l'etichetta:
getenforce
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh
Se getenforce dice Disabled, salta questo passaggio. In quello stato semanage fallisce con SELinux policy is not managed or store cannot be accessed, ed è innocuo. Se manca semanage, si trova nel pacchetto policycoreutils-python-utils.
3. Aggiungi la nuova porta accanto alla vecchia
Non sostituire ancora la vecchia porta. Crea un piccolo file, che lascia intatta la configurazione principale:
printf 'Port 22\nPort 2222\n' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t
Se sshd -t non stampa nulla, la sintassi è valida. I sistemi più vecchi senza quella cartella richiedono le stesse due righe in /etc/ssh/sshd_config.
4. Applica la modifica: dipende dal sistema
Prima chiediti in quale caso sei:
systemctl is-active ssh.socket
Dice active (Ubuntu 24.04 e 26.04 per impostazione predefinita). Il socket tiene la porta ed è generato dalla tua configurazione, quindi riavviare il servizio non basta:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
È la trappola più comune. Nella nostra prova, il solo sudo systemctl restart ssh ha lasciato in ascolto le vecchie porte senza alcun errore.
Dice inactive (Debian, Ubuntu 22.04):
sudo systemctl restart ssh
Famiglia RHEL, dove il servizio ha un altro nome:
sudo systemctl restart sshd
Ubuntu da 22.10 a 23.10 usava il socket in modo diverso e non è più supportata. Lì controlla systemctl cat ssh.socket prima di fare affidamento su questi passaggi.
Ora controlla che entrambe le porte siano in ascolto:
ss -tln | grep -E ':(22|2222)\b'
5. Prova da un nuovo terminale
Lascia aperta la vecchia sessione e, dal tuo computer, esegui:
ssh -p 2222 user@server
Un timeout significa che un firewall è ancora in mezzo. Connection refused significa che nulla è in ascolto, oppure che SELinux ha impedito a sshd di agganciarsi alla porta. Risolvi adesso, mentre la porta 22 funziona ancora.
6. Chiudi la porta 22
Solo dopo che la prova funziona:
echo 'Port 2222' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t
Se il file principale /etc/ssh/sshd_config ha una riga Port 22 non commentata, commentala anche lei, altrimenti sshd continua ad ascoltare lì. Applica la modifica come al passaggio 4, conferma con sudo sshd -T | grep -i ^port, poi rimuovi la vecchia regola del firewall, usando quella che si applica:
sudo ufw delete allow 22/tcp
sudo ufw delete allow OpenSSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
Prova ancora una volta in un nuovo terminale, e solo allora chiudi la vecchia sessione.
Aggiorna il tuo client
Salva la porta così non devi più digitarla:
Host server
HostName 203.0.113.10
Port 2222
User user
Per altre impostazioni da salvare per ogni host, guarda questi esempi di file ssh config.
Nota che scp usa una -P maiuscola per la porta, a differenza di ssh. Se usi fail2ban, comunica anche a lui la nuova porta. Vedi fail2ban per SSH.
Domande
Conviene cambiare la porta SSH?
Riduce il rumore dei bot che provano solo la porta 22. Non ferma un attacco mirato: contano di più l'accesso solo con chiave e un server aggiornato.
Perché la nuova porta SSH non funziona su Ubuntu 24.04?
Ubuntu 24.04 avvia sshd tramite ssh.socket. Dopo aver cambiato Port, esegui sudo systemctl daemon-reload e sudo systemctl restart ssh.socket, poi controlla con ss -tln.
Come mi collego in SSH su un'altra porta?
Usa ssh -p 2222 utente@server, oppure metti Port 2222 sotto la voce Host del server in ~/.ssh/config. scp vuole la porta con -P maiuscola.
Fonti
- sshd_config(5), manuale OpenBSD
- Launchpad bug 2069041: cambiare Port richiede daemon-reload
- Configuring SELinux for non-standard configurations, Red Hat
- ufw(8), manuale Ubuntu