Come configurare UFW su un VPS senza bloccare SSH
Configura UFW su un VPS con policy deny predefinita, autorizza solo le porte necessarie e consenti SSH prima dell'attivazione per non perdere l'accesso.
Cos'è UFW e perché utilizzarlo
UFW è l'acronimo di Uncomplicated Firewall, e il nome è appropriato. È un'interfaccia semplificata per il firewall già integrato nel kernel Linux. Invece di scrivere regole manualmente, si inseriscono comandi brevi come ufw allow 22/tcp. In un VPS appena installato, per impostazione predefinita ogni servizio in ascolto è raggiungibile da Internet. Un firewall inverte questa situazione: si nega tutto, quindi si autorizzano solo le poche porte effettivamente utilizzate. Questa singola modifica riduce gran parte della superficie di esposizione con circa quattro comandi.
Prima di configurarlo, è necessario sapere quali servizi sono in ascolto, perché il firewall decide come gestire proprio quei servizi. Verificare cosa è in ascolto con ss -tlnp è il primo passaggio corretto.
L'unica regola per evitare di bloccare l'accesso
Questo è l'errore che scoraggia molti dall'uso dei firewall. Attivi UFW con una policy predefinita di negazione, ma non hai mai consentito SSH. Quando il firewall si attiva, la connessione viene interrotta e non puoi più accedere al server. Per evitarlo, consenti sempre SSH prima di attivare UFW. Questo è l'unico passaggio importante e le istruzioni seguenti lo eseguono nell'ordine corretto.
Se accade comunque, non sei bloccato: la console web del provider, tramite VNC o seriale, non usa SSH. Puoi quindi accedere alla console ed eseguire ufw disable oppure aggiungere la regola mancante.
Passaggio 1: Impostare i criteri predefiniti
Iniziare chiedendo a UFW di negare tutte le connessioni in ingresso e consentire tutte le connessioni in uscita:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming è la parte importante. Indica che qualsiasi porta senza una regola esplicita di autorizzazione viene chiusa verso l'esterno, anche se su quella porta è in ascolto un servizio. allow outgoing consente al server di raggiungere normalmente Internet per gli aggiornamenti e attività simili. Questi due comandi modificano solo i criteri; non viene applicata alcuna regola finché non si abilita UFW nel passaggio 3.
Passaggio 2: Consenti le porte effettivamente necessarie
Prima di abilitare UFW, apri SSH per mantenere la connessione:
sudo ufw allow 22/tcpUFW può anche limitare la frequenza delle connessioni SSH: sudo ufw limit 22/tcp consente la porta, ma blocca qualsiasi indirizzo che effettui sei o più connessioni in trenta secondi. In questo modo limita gli script di forza bruta senza software aggiuntivo.
Se esegui un server web, consenti anche HTTP e HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpConsenti solo i servizi che rendi disponibili al pubblico. Un database come Postgres sulla porta 5432 non dovrebbe quasi mai avere una regola allow. Associalo invece a 127.0.0.1, così sarà raggiungibile solo dal computer locale. Ogni porta che apri deve essere protetta, quindi mantieni breve l’elenco.
Puoi anche creare qui la sequenza completa di comandi ufw per il server, quindi eseguirli nell’ordine:
Passaggio 3: Abilitalo e verifica che sia attivo
sudo ufw enableViene visualizzato un avviso: il comando potrebbe interrompere le connessioni SSH esistenti. Poiché nel passaggio 2 hai consentito 22/tcp, la sessione rimane attiva. Verifica il risultato:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN AnywhereQui devi verificare due elementi. Status: active indica che il firewall è in esecuzione. Inoltre, ogni regola compare due volte: una volta senza opzioni aggiuntive e una volta con (v6). Questo indica che UFW protegge sia IPv6 sia IPv4. Se mancano le righe (v6), il traffico IPv6 non è gestito dal firewall. Questo è un problema distinto, illustrato in l'articolo sul firewall IPv6.
Gestire le regole in un secondo momento
Per visualizzare le regole con i relativi numeri e poterne rimuovere una:
sudo ufw status numbered
sudo ufw delete 3Per consentire una porta solo da un determinato indirizzo, una soluzione utile per esporre un servizio di amministrazione esclusivamente al proprio IP:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpQuesto approccio non è più praticabile quando cambia il proprio indirizzo o devono accedere più macchine. La soluzione consueta consiste nel non esporre affatto la porta pubblicamente e nel raggiungere invece il servizio tramite una rete privata. A questo serve pubblicizzare la subnet privata del server sulla propria tailnet.
Un firewall è un livello di protezione. Controlla cosa può raggiungere una porta, ma non rallenta chi invia ripetutamente richieste a una porta lasciata aperta, come SSH. In questo caso, aggiungi Fail2ban davanti a SSH per bloccare i responsabili delle richieste ripetute. La difesa in profondità significa che ogni livello copre ciò che gli altri non possono coprire.
Un firewall è utile solo dopo aver capito cosa sono le porte e come restano in ascolto i servizi; configurarlo è un passaggio dei primi 10 minuti su un nuovo VPS.
FAQ
L'attivazione di UFW disconnette la sessione SSH?
No, se autorizzi prima SSH. Esegui sudo ufw allow 22/tcp prima di sudo ufw enable: la connessione resta attiva perché il firewall consente ora il traffico sulla porta 22. Il rischio consiste nell'attivare un firewall con criterio predefinito di negazione senza una regola che consenta SSH, interrompendo così l'accesso. In tal caso, accedi tramite la console VNC o seriale del provider ed esegui ufw disable.
Quali porte devo aprire su un VPS?
Apri solo le porte dei servizi che rendi pubblici. SSH (22/tcp) per amministrare il server, e HTTP e HTTPS (80/tcp, 443/tcp) se esegui un sito web. Mantieni negate tutte le altre. I servizi interni, come i database, devono essere associati a 127.0.0.1 e non devono avere alcuna regola del firewall, così non sono mai raggiungibili dalla rete.
UFW gestisce IPv6?
Sì, nelle versioni moderne di Ubuntu: IPV6=yes è impostato in /etc/default/ufw, quindi ogni regola si applica a entrambi gli stack e ufw status mostra le regole IPv6 con il suffisso (v6). I casi in cui la configurazione può comunque non funzionare sono descritti in la trappola del firewall IPv6.
Come rimuovo una regola UFW?
Esegui sudo ufw status numbered per elencare le regole con i relativi indici, quindi sudo ufw delete N, dove N è il numero della regola da rimuovere. Puoi anche eliminare una regola tramite la relativa specifica, ad esempio sudo ufw delete allow 80/tcp.
Come posso consentire l'accesso a una porta solo da un indirizzo IP?
Usa una regola from invece di una regola allow semplice. Per consentire solo all'indirizzo del tuo ufficio di raggiungere PostgreSQL, esegui sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. Con un criterio predefinito di negazione, la porta è chiusa a tutti finché una regola non la apre. Questa regola from è quindi l'unico punto di accesso: l'intera Internet resta bloccata e può passare solo l'indirizzo specificato. Non aggiungere anche una regola allow 5432/tcp semplice, perché aprirebbe la porta a tutti. È il metodo più sicuro per esporre un database o un pannello di amministrazione. Verifica la configurazione con sudo ufw status verbose, che mostra l'indirizzo sorgente accanto alla porta.