Configurare UFW su VPS: guida pratica
Impara a usare UFW per proteggere il tuo VPS. Configura la policy default-deny e autorizza la porta SSH per evitare di perdere l'accesso al server remoto.
Cos'è UFW e perché è necessario
UFW sta per Uncomplicated Firewall. Il nome è accurato. È un'interfaccia semplificata per il firewall già presente nel kernel Linux. Invece di scrivere regole complesse, si utilizzano comandi brevi come ufw allow 22/tcp. Su un VPS appena installato, ogni servizio in ascolto è raggiungibile da internet per impostazione predefinita. Un firewall inverte questo comportamento: si nega tutto e si autorizzano solo le poche porte effettivamente utilizzate. Questa configurazione riduce la superficie di attacco con circa quattro comandi.
Prima di procedere, è necessario identificare i servizi in ascolto, poiché il firewall ne gestisce l'accesso. Leggere i servizi in ascolto tramite ss -tlnp è il primo passo corretto.
L'unica regola per evitare di rimanere bloccati fuori dal sistema
Questo errore spaventa chiunque debba configurare i firewall. Se abiliti UFW con una policy di default-deny senza aver prima autorizzato SSH, la connessione verrà interrotta non appena il firewall sarà attivo. Non potrai più accedere al sistema. Per evitare il problema, autorizza sempre SSH prima di abilitare UFW. Segui l'ordine corretto descritto nei passaggi sotto.
Se dovesse accadere, non sei bloccato: la console web del tuo provider, tramite VNC o seriale, non utilizza SSH. Puoi usarla per effettuare il login e eseguire ufw disable o aggiungere la regola mancante.
Step 1: Impostare le policy predefinite
Iniziare configurando UFW per negare tutto il traffico in entrata e consentire tutto il traffico in uscita:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming è la parte fondamentale. Significa che ogni porta senza una regola di autorizzazione esplicita è chiusa verso l'esterno, anche se un servizio è in ascolto su di essa. allow outgoing consente al server di connettersi a Internet normalmente per gli aggiornamenti e operazioni simili. Questi due comandi modificano solo la policy; nessuna regola viene applicata finché non si abilita UFW nel passaggio 3.
Step 2: Consentire le porte effettivamente necessarie
Prima di abilitare il firewall, apri SSH per mantenere la connessione attiva:
sudo ufw allow 22/tcpUFW può anche applicare il rate-limiting a SSH: sudo ufw limit 22/tcp consente la porta ma blocca qualsiasi indirizzo che effettui sei o più connessioni in trenta secondi. Questo mitiga gli script brute-force senza richiedere software aggiuntivo.
Se gestisci un web server, consente anche HTTP e HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpConsenti solo i servizi destinati al pubblico. Un database come Postgres sulla porta 5432 non dovrebbe quasi mai avere una regola di autorizzazione. Configura il bind su 127.0.0.1 per renderlo raggiungibile solo localmente sulla macchina. Ogni porta aperta è un punto di accesso da difendere; mantieni l'elenco ridotto.
Puoi generare la sequenza completa di comandi ufw per il tuo server qui, per poi eseguirli in ordine:
Step 3: Enable, and confirm it is on
sudo ufw enableIl comando può interrompere le connessioni SSH attive. Poiché è stato abilitato 22/tcp nello step 2, la sessione rimane attiva. Conferma 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 AnywhereAnalizza questi due elementi. Status: active indica che il firewall è attivo. Ogni regola appare due volte: una versione standard e una con (v6), che indica che UFW gestisce sia IPv4 che IPv6. Se mancano le righe (v6), la parte IPv6 non è gestita; questo problema è trattato nel post sul firewall IPv6.
Gestione delle regole in seguito
Per visualizzare le regole con i relativi numeri per poterne rimuovere una:
sudo ufw status numbered
sudo ufw delete 3Per consentire l'accesso a una porta solo da un singolo indirizzo, metodo utile per esporre un servizio di amministrazione solo al proprio IP:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpIl firewall è solo uno strato di protezione. Controlla quali connessioni possono raggiungere una porta, ma non rallenta tentativi di forza su una porta aperta, come SSH. Per questo scopo, aggiungi Fail2ban davanti a SSH per bloccare gli utenti che tentano accessi ripetuti. La difesa in profondità implica che ogni strato copra ciò che gli altri non possono coprire.
Un firewall è utile solo dopo aver compreso cos'è una porta e come i servizi restano in ascolto, e la sua configurazione è un passaggio fondamentale nei primi 10 minuti su un nuovo VPS.
FAQ
L'attivazione di UFW interromperà la sessione SSH?
No, se si abilita prima SSH. Eseguire sudo ufw allow 22/tcp prima di sudo ufw enable per mantenere la connessione attiva, poiché il firewall permetterà la porta 22. Il rischio consiste nell'attivare un firewall con policy default-deny senza una regola allow per SSH, perdendo l'accesso. In tal caso, connettersi tramite la console VNC o seriale del provider ed eseguire ufw disable.
Quali porte devo aprire su un VPS?
Solo quelle necessarie per il servizio pubblico. SSH (22/tcp) per la gestione del server, e HTTP e HTTPS (80/tcp, 443/tcp) se si ospita un sito web. Lasciare tutto il resto negato. I servizi interni come i database devono essere vincolati a 127.0.0.1 e non devono avere regole nel firewall, per evitare che siano raggiungibili dalla rete.
UFW gestisce IPv6?
Sulle versioni moderne di Ubuntu, sì: 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 suffisco (v6). I possibili errori sono descritti in la trappola del firewall IPv6.
Come si rimuove una regola UFW?
Eseguire 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. È possibile eliminare una regola tramite specifica, ad esempio sudo ufw delete allow 80/tcp.
Come si permette l'accesso a una porta solo da un indirizzo IP specifico?
Utilizzare una regola from invece di una semplice allow. Per permettere solo all'indirizzo dell'ufficio di connettersi a PostgreSQL, eseguire sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. Con una policy default-deny la porta è chiusa per tutti finché una regola non la apre; pertanto, questa regola from è l'unico metodo di accesso: l'intera rete internet rimane bloccata e solo l'indirizzo specificato può connettersi. Non aggiungere una semplice allow 5432/tcp, altrimenti la porta risulterà aperta per tutti. Questo è il metodo più sicuro per esporre un database o un pannello di amministrazione. Verificare l'operazione con sudo ufw status verbose, che mostra l'indirizzo sorgente accanto alla porta.