Modifica della porta SSH
La modifica della porta SSH predefinita (22) riduce l'esposizione alle scansioni automatizzate e ai semplici attacchi brute-force, ma non sostituisce le corrette misure di sicurezza.
Prima di apportare qualsiasi modifica, assicurati di avere una sessione SSH attiva aperta. Non chiuderla finché non avrai verificato che la nuova porta funzioni. In caso di problemi, perderesti l'accesso al server.
Scegliere un numero di porta
Scegli un numero di porta superiore a 1024. Le porte nell'intervallo 49152–65535 hanno meno probabilità di entrare in conflitto con altri servizi conosciuti. Evita alternative comunemente utilizzate come 2222 o 22222, poiché sono spesso prese di mira dagli scanner automatizzati. In questa guida viene utilizzata 22777 come esempio.
Eseguire il backup del file di configurazione
Prima di apportare qualsiasi modifica, crea una copia di backup del file di configurazione SSH:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Cambiare la porta SSH su Ubuntu e Debian
A partire da Debian 12 e da alcune versioni più recenti di Ubuntu (22.04+), SSH può utilizzare per impostazione predefinita l'attivazione dei socket systemd. In questo caso, modificare solamente la direttiva Port in sshd_config spesso non è sufficiente.
Per prima cosa, verifica se l'attivazione tramite socket è attiva:
systemctl is-active ssh.socket
Se il comando restituisce active, configura il socket SSH affinché utilizzi la nuova porta.
Crea un override systemd per il socket SSH:
systemctl edit ssh.socket
Aggiungi il seguente contenuto:
[Socket] ListenStream= ListenStream=22777
La riga vuota ListenStream= rimuove la porta predefinita (22). Senza di essa, SSH potrebbe rimanere in ascolto sia sulla porta 22 sia sulla nuova porta.
Per una maggiore affidabilità, imposta la porta anche nella configurazione SSH. Questo aiuta il generatore systemd e mantiene l'impostazione anche dopo gli aggiornamenti di OpenSSH:
mkdir -p /etc/ssh/sshd_config.d echo "Port 22777" | tee /etc/ssh/sshd_config.d/10-port.conf
Per una migliore compatibilità, puoi specificare esplicitamente anche gli indirizzi:
[Socket] ListenStream= ListenStream=0.0.0.0:22777 ListenStream=[::]:22777
Salva la configurazione e applica le modifiche:
systemctl daemon-reload systemctl restart ssh.socket systemctl restart ssh
Verifica che il servizio sia in esecuzione:
systemctl status ssh.socket
Su alcuni sistemi più recenti, come Ubuntu 24.04+, il generatore systemd può leggere automaticamente la porta da sshd_config. In questo caso, potrebbe essere sufficiente modificare direttamente Port ed eseguire systemctl daemon-reload seguito da systemctl restart ssh.socket. Il metodo con override descritto sopra funziona su tutte le versioni.
Versioni precedenti di Ubuntu e Debian
Nelle versioni di Ubuntu precedenti alla 22.04 e nelle versioni di Debian precedenti alla 12, SSH non è gestito tramite l'attivazione dei socket. Apri il file di configurazione SSH:
nano /etc/ssh/sshd_config
Trova la seguente riga:
Port 22
Rimuovi il commento e sostituisci 22 con il numero di porta scelto:
Port 22777
Salva il file e verifica la configurazione:
sshd -t
Se il comando non viene trovato, utilizza:
/usr/sbin/sshd -t
Se il comando non restituisce alcun output, la configurazione è valida. Riavvia il servizio SSH:
systemctl restart ssh
Disabilitare l'attivazione tramite socket
Se preferisci gestire SSH tramite il servizio tradizionale anziché tramite il socket, puoi disabilitare l'attivazione dei socket:
systemctl disable --now ssh.socket systemctl enable --now ssh
Dopodiché modifica sshd_config come descritto sopra e riavvia SSH con:
systemctl restart ssh
Cambiare la porta SSH su AlmaLinux, Rocky Linux e CentOS
Modificare il file di configurazione SSH
Apri il file di configurazione SSH:
nano /etc/ssh/sshd_config
Trova la seguente riga:
Port 22
Rimuovi il commento e sostituisci 22 con il numero di porta scelto:
Port 22777
Salva il file e verifica la configurazione:
/usr/sbin/sshd -t
Se il comando non restituisce alcun output, la configurazione è valida. Riavvia il servizio SSH:
systemctl restart sshd
Verifica che il servizio sia in esecuzione:
systemctl status sshd
Consentire la porta in SELinux
Sui sistemi con SELinux abilitato, devi consentire la nuova porta anche nella policy di SELinux. Per verificare quali porte sono attualmente consentite per SSH, esegui:
semanage port -l | grep ssh
Quindi aggiungi o modifica la nuova porta:
semanage port -a -t ssh_port_t -p tcp 22777 || semanage port -m -t ssh_port_t -p tcp 22777
Se semanage non è installato, installa il pacchetto necessario:
dnf install policycoreutils-python-utils
Configurare il firewall
Consenti sempre la nuova porta nel firewall prima di riavviare SSH. Se riavvii prima SSH, potresti perdere l'accesso al server.
UFW
ufw allow 22777/tcp ufw reload ufw status
firewalld
firewall-cmd --permanent --zone=public --add-port=22777/tcp firewall-cmd --reload
iptables
iptables -I INPUT -p tcp --dport 22777 -j ACCEPT iptables-save > /etc/iptables/rules.v4
Il comando iptables-save salva le regole in un file solo se iptables-persistent è installato e configurato sul sistema. Per installarlo, esegui:
apt install -y iptables-persistent
Verifica che la tua distribuzione utilizzi questo file prima di affidarti ad esso per la persistenza. Tieni presente che i sistemi moderni possono utilizzare nftables al posto di iptables. Se utilizzi nftables, aggiungi una regola che consenta la nuova porta nella configurazione di nftables.
Configurare Fail2Ban
Se Fail2Ban è configurato sul server, aggiorna la porta SSH nella relativa configurazione. Apri /etc/fail2ban/jail.local oppure il file appropriato in /etc/fail2ban/jail.d/ e imposta:
port = 22777
Dopo aver aggiornato la configurazione, riavvia Fail2Ban:
systemctl restart fail2ban
Verificare la nuova porta
Verifica che SSH sia in ascolto sulla nuova porta:
ss -tlnp | grep :22777
In alternativa, puoi elencare tutti i listener relativi a SSH:
ss -tlnp | grep ssh
Sui sistemi meno recenti, utilizza invece netstat:
netstat -tlnp | grep :22777
Puoi anche verificare direttamente lo stato del servizio.
Su Ubuntu e Debian:
systemctl status ssh.socket
Su AlmaLinux, Rocky Linux e CentOS:
systemctl status sshd
Senza chiudere la sessione SSH corrente, apri una nuova finestra del terminale e connettiti utilizzando la nuova porta:
ssh root@YOUR_SERVER_IP -p 22777
Se la connessione ha esito positivo, puoi chiudere la sessione precedente. Quindi rimuovi la porta 22 dalle regole del firewall se non è più necessaria.
Per UFW:
ufw delete allow 22/tcp ufw reload
Per firewalld:
firewall-cmd --permanent --zone=public --remove-port=22/tcp firewall-cmd --reload
Non rimuovere la porta 22 dal firewall prima di aver verificato che la nuova porta funzioni. Se la nuova connessione non riesce, utilizza la sessione SSH aperta per risolvere il problema o ripristinare le modifiche:
systemctl revert ssh.socket cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config rm -f /etc/ssh/sshd_config.d/10-port.conf systemctl daemon-reload systemctl restart ssh.socket
Se l'attivazione tramite socket è disabilitata, sostituisci gli ultimi due comandi con:
systemctl restart ssh
Conclusione
Cambiare la porta SSH predefinita da 22 a una porta personalizzata può ridurre l'esposizione alle scansioni automatizzate e ai tentativi di brute-force di base. Tuttavia, la modifica della porta deve essere considerata una misura di sicurezza aggiuntiva e non un sostituto di una corretta protezione di SSH.
Mantieni sempre aperta la sessione SSH corrente finché non ti sei connesso correttamente utilizzando la nuova porta. Dopo aver verificato la nuova connessione, puoi chiudere in sicurezza la vecchia sessione e rimuovere la porta 22 dal firewall se non è più necessaria.