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
| Vuoi | Comando |
|---|---|
| Porta standard | sudo ufw allow OpenSSH |
| Lo stesso, senza il profilo | sudo ufw allow 22/tcp |
| Un'altra porta | sudo ufw allow 2222/tcp |
| Solo da un indirizzo | sudo ufw allow from 203.0.113.10 to any port 22 proto tcp |
| Limitare le connessioni ripetute | sudo 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.