Come consentire SSH in ufw senza chiuderti fuori

Esegui prima sudo ufw allow OpenSSH, conferma la regola con sudo ufw show added, poi esegui sudo ufw enable. L'ordine conta: attivare ufw senza una regola per SSH blocca per impostazione predefinita ogni nuova connessione. Se SSH usa un'altra porta, consenti quella, come in sudo ufw allow 2222/tcp.

Aggiornata il . Tutti i comandi eseguiti con ufw 0.36 su Ubuntu 24.04 in un container usa e getta con systemd, con un secondo container che si collegava via SSH, compresi il blocco, la regola limit e la disattivazione a tempo.

L'ordine sicuro

sudo ufw allow OpenSSH
sudo ufw show added
sudo ufw enable
sudo ufw status

Finché ufw è spento, ufw status mostra solo Status: inactive e nasconde le tue regole. Per questo usi show added per controllarle.

Via SSH, ufw enable avverte che può interrompere le connessioni e chiede conferma. Il manuale avverte che l'attivazione può far cadere le connessioni esistenti. Nel nostro test la sessione aperta ha continuato a funzionare, ma non farci affidamento.

Cosa succede se sbagli

La policy predefinita è negare il traffico in ingresso. Abbiamo attivato ufw senza una regola per SSH e la connessione successiva è fallita così:

ssh: connect to host server port 22: Connection timed out

La tua sessione aperta è la via di ritorno: aggiungi la regola da lì. Se non c'è più, ti serve la console del tuo provider di hosting. Un firewall cloud davanti al server è un'altra cosa, e ufw non può aprirlo.

Una rete di sicurezza per i server remoti

Prima di attivare ufw, programma un comando che lo spenga di nuovo:

sudo systemd-run --on-active=5min --unit=ufw-undo ufw --force disable
sudo ufw enable

Prova una nuova connessione da un altro terminale. Se funziona, annulla il timer:

sudo systemctl stop ufw-undo.timer

Se resti tagliato fuori, aspetta circa sei minuti, perché il timer può scattare con un minuto di ritardo, e ufw si spegne da solo.

Quale regola usare

VuoiComando
Porta standardsudo ufw allow OpenSSH
Lo stesso, senza il profilosudo ufw allow 22/tcp
Un'altra portasudo ufw allow 2222/tcp
Solo da un indirizzosudo ufw allow from 203.0.113.10 to any port 22 proto tcp
Limitare le connessioni ripetutesudo ufw limit OpenSSH

Il profilo OpenSSH indica sempre la porta 22. Per vederlo, esegui sudo ufw app info OpenSSH. Arriva con il pacchetto openssh-server, quindi senza quel pacchetto il nome non è riconosciuto.

Cosa fa limit

ufw limit nega l'accesso a un indirizzo che apre 6 o più connessioni in 30 secondi. Nel nostro test, cinque login di fila hanno funzionato e il sesto è fallito con questo:

ssh: connect to host server port 22: Connection refused

Colpisce anche te. Un ciclo di comandi scp o un'esecuzione di Ansible che apre molte connessioni lo farà scattare, e il messaggio sembra indicare che sshd si sia fermato. Riusare una sola connessione aiuta: vedi il multiplexing SSH.

Rallenta i tentativi di indovinare la password, ma non sa se un login è riuscito. Per quello usa fail2ban. La vera protezione contro i tentativi a indovinare è non avere l'accesso con password.

Cambiare la porta SSH

Aggiungi prima la nuova regola e rimuovi la vecchia solo dopo aver fatto il login sulla nuova porta:

sudo ufw allow 2222/tcp
# change the port in sshd and test it
sudo ufw delete allow OpenSSH

L'intera procedura, compreso il socket sulle versioni recenti di Ubuntu, è in come cambiare la porta SSH.

Rimuovere una regola

Per numero, oppure ripetendo la regola dopo delete:

sudo ufw status numbered
sudo ufw delete 2
sudo ufw delete allow 22/tcp

Le regole sono elencate due volte, per IPv4 e IPv6, e i numeri cambiano dopo ogni cancellazione, quindi elencale di nuovo prima di eliminarne un'altra. Inoltre una regola creata con allow OpenSSH e una creata con allow 22/tcp sono voci separate, quindi puoi ritrovarti con entrambe.

Domande

Come controllo se ufw consente SSH?

Con ufw attivo esegui sudo ufw status e cerca 22/tcp, OpenSSH o la tua porta con ALLOW. Con ufw spento, status nasconde le regole: usa sudo ufw show added.

Qual è la differenza tra ufw allow ssh e ufw allow OpenSSH?

ufw allow ssh usa la porta da /etc/services e compare come 22/tcp. ufw allow OpenSSH usa il profilo applicativo installato dal pacchetto openssh-server, anch'esso per 22/tcp. Va bene l'uno o l'altro. Nessuno dei due segue una porta che hai cambiato in sshd_config.

ufw protegge le porte pubblicate da Docker?

No. La documentazione di Docker dice che le porte dei container pubblicate aggirano le regole di ufw.

Fonti

Altro in Mettere in sicurezza un server

Tutte le guide