Introduzione
UFW, o Uncomplicated Firewall, è un’interfaccia per iptables
che mira a semplificare il processo di configurazione di un firewall. Mentre iptables
è uno strumento solido e flessibile, può essere difficile per i principianti imparare come usarlo per configurare correttamente un firewall. Se stai cercando di iniziare a proteggere la tua rete e non sei sicuro quale strumento utilizzare, UFW potrebbe essere la scelta giusta per te.
Questo tutorial ti mostrerà come configurare un firewall con UFW su Ubuntu v18.04 e versioni successive.
Prerequisiti
Se stai utilizzando Ubuntu versione 16.04 o inferiore, ti consigliamo di aggiornare a una versione più recente poiché Ubuntu non fornisce più supporto per queste versioni. Questa raccolta di guide ti aiuterà nell’aggiornamento della tua versione di Ubuntu.
Per seguire questo tutorial, avrai bisogno di:
-
Un server in esecuzione su Ubuntu, insieme a un utente non root con privilegi
sudo
. Per indicazioni su come configurarli, seleziona la tua distribuzione da questo elenco e segui la nostra Guida all’installazione iniziale del server. -
UFW è installato per impostazione predefinita su Ubuntu. Se è stato disinstallato per qualche motivo, puoi installarlo con
sudo apt install ufw
.
Configura il firewall di Ubuntu con UFW
- Abilita IPv6
- Imposta le politiche predefinite
- Consenti connessioni SSH
- Abilita UFW
- Consenti qualsiasi altra connessione richiesta
- Nega connessioni
- Eliminazione delle regole del firewall
- Controllare lo stato e le regole di UFW
- Come disabilitare o ripristinare il firewall su Ubuntu
Passaggio 1 — Assicurarsi che IPv6 sia abilitato
Nelle versioni recenti di Ubuntu, IPv6 è abilitato per impostazione predefinita. In pratica, ciò significa che la maggior parte delle regole del firewall aggiunte al server includeranno sia una versione IPv4 che una IPv6, quest’ultima identificata dal v6
all’interno dell’output del comando di stato di UFW. Per assicurarsi che IPv6 sia abilitato, è possibile controllare il file di configurazione di UFW in /etc/default/ufw
. Aprire questo file utilizzando nano
o il proprio editor della riga di comando preferito:
Poi assicurarsi che il valore di IPV6
sia impostato su yes
. Dovrebbe apparire così:
Salvare e chiudere il file. Se si sta utilizzando nano
, è possibile farlo digitando CTRL+X
, poi Y
e INVIO
per confermare.
Quando UFW è abilitato in un passaggio successivo di questa guida, sarà configurato per scrivere regole del firewall sia IPv4 che IPv6.
Passaggio 2 — Configurazione delle Politiche Predefinite
Se stai iniziando con UFW, un buon primo passo è controllare le tue politiche predefinite del firewall. Queste regole controllano come gestire il traffico che non corrisponde esplicitamente ad altre regole.
Per impostazione predefinita, UFW è configurato per negare tutte le connessioni in entrata e consentire tutte le connessioni in uscita. Ciò significa che chiunque cerchi di raggiungere il tuo server non sarà in grado di connettersi, mentre qualsiasi applicazione all’interno del server sarà in grado di raggiungere il mondo esterno. Regole aggiuntive per consentire servizi e porte specifici sono incluse come eccezioni a questa politica generale.
Per assicurarti di poter seguire il resto di questo tutorial, imposterai ora le politiche predefinite UFW per il traffico in entrata e in uscita.
Per impostare la politica predefinita UFW in entrata su deny
, esegui:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Per impostare la politica predefinita UFW in uscita su allow
, esegui:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Questi comandi impostano le predefinizioni per negare le connessioni in entrata e consentire le connessioni in uscita. Questi predefiniti del firewall potrebbero essere sufficienti da soli per un computer personale, ma i server tipicamente devono rispondere a richieste in ingresso da utenti esterni. Vedremo questo nel prossimo passaggio.
Passaggio 3 — Consentire le Connessioni SSH
Se attivassi ora il firewall UFW, negherebbe tutte le connessioni in ingresso. Ciò significa che dovrai creare regole che consentano esplicitamente le connessioni in ingresso legittime — ad esempio connessioni SSH o HTTP — se desideri che il tuo server risponda a quei tipi di richieste. Se stai utilizzando un server cloud, probabilmente vorrai consentire le connessioni SSH in ingresso in modo da poter connetterti e gestire il tuo server.
Consentire il Profilo Applicazione OpenSSH UFW
All’installazione, la maggior parte delle applicazioni che dipendono dalle connessioni di rete registrerà un profilo applicazione all’interno di UFW, che consente agli utenti di consentire o negare rapidamente l’accesso esterno a un servizio. Puoi verificare quali profili sono attualmente registrati in UFW con:
OutputAvailable applications:
OpenSSH
Per abilitare il profilo dell’applicazione OpenSSH, esegui:
OutputRule added
Rule added (v6)
Questo creerà regole del firewall per consentire tutte le connessioni sulla porta 22
, che è la porta su cui il demone SSH ascolta per impostazione predefinita.
Consentire SSH per nome del servizio
Un altro modo per configurare UFW per consentire le connessioni SSH in ingresso è facendo riferimento al suo nome di servizio: ssh
.
OutputRule added
Rule added (v6)
UFW sa quali porte e protocolli utilizza un servizio in base al file /etc/services
.
Consentire SSH per numero di porta
In alternativa, è possibile scrivere la regola equivalente specificando la porta invece del profilo dell’applicazione o del nome del servizio. Ad esempio, questo comando funziona allo stesso modo degli esempi precedenti:
OutputRule added
Rule added (v6)
Se hai configurato il tuo demone SSH per utilizzare una porta diversa, dovrai specificare la porta appropriata. Ad esempio, se il tuo server SSH è in ascolto sulla porta 2222
, puoi usare questo comando per consentire le connessioni su quella porta:
OutputRule added
Rule added (v6)
Ora che il tuo firewall è configurato per consentire le connessioni SSH in ingresso, puoi abilitarlo.
Passaggio 4 — Abilitare UFW
Il tuo firewall dovrebbe ora essere configurato per consentire connessioni SSH. Per verificare quali regole sono state aggiunte finora, anche quando il firewall è ancora disabilitato, puoi usare:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Dopo aver confermato di avere una regola per consentire le connessioni SSH in entrata, puoi abilitare il firewall con:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Riceverai un avviso che indica che il comando potrebbe interrompere le connessioni SSH esistenti. Hai già configurato una regola del firewall che consente le connessioni SSH, quindi dovrebbe essere sicuro continuare. Rispondi al prompt con y
e premi INVIO
.
Il firewall è ora attivo. Esegui il comando sudo ufw status verbose
per vedere le regole impostate. Il resto di questo tutorial illustra come utilizzare UFW in modo più dettagliato, come consentire o negare diversi tipi di connessioni.
Passaggio 5 — Consenti altre connessioni
A questo punto, dovresti consentire tutte le altre connessioni a cui il tuo server deve rispondere. Le connessioni che dovresti consentire dipendono dalle tue esigenze specifiche. Sai già come scrivere regole che consentono connessioni basate su un profilo di applicazione, un nome di servizio o una porta; hai già fatto questo per SSH sulla porta 22
. Puoi fare lo stesso anche per:
- HTTP sulla porta 80, che è ciò che utilizzano i server web non crittografati, utilizzando
sudo ufw allow http
osudo ufw allow 80
. - HTTPS sulla porta 443, che è quella utilizzata dai server web criptati, usando
sudo ufw allow https
osudo ufw allow 443
- Apache con sia HTTP che HTTPS, usando
sudo ufw allow ‘Apache Full’
- Nginx con sia HTTP che HTTPS, usando
sudo ufw allow ‘Nginx Full’
Non dimenticare di controllare quali profili di applicazioni sono disponibili per il tuo server con sudo ufw app list
.
Ci sono diversi altri modi per permettere le connessioni, oltre alla specifica di una porta o a un nome di servizio conosciuto. Vedremo alcuni di questi successivamente.
Intervallo di Porte Specifiche
Puoi specificare intervalli di porte con UFW. Alcune applicazioni utilizzano più porte, invece di una singola porta.
Per esempio, per permettere le connessioni X11, che utilizzano le porte 6000
–6007
, usa questi comandi:
Quando si specificano intervalli di porte con UFW, è necessario specificare il protocollo (tcp
o udp
) a cui le regole devono essere applicate. Non lo abbiamo menzionato prima perché non specificare il protocollo permette automaticamente entrambi i protocolli, il che va bene nella maggior parte dei casi.
Indirizzi IP Specifici
Quando si lavora con UFW, è possibile specificare anche gli indirizzi IP all’interno delle regole. Ad esempio, se si desidera consentire le connessioni da un indirizzo IP specifico, come un indirizzo IP lavorativo o domestico di 203.0.113.4
, è necessario utilizzare il parametro from
, fornendo quindi l’indirizzo IP che si desidera consentire:
OutputRule added
È inoltre possibile specificare una porta alla quale l’indirizzo IP è autorizzato a connettersi aggiungendo to any port
seguito dal numero di porta. Ad esempio, se si desidera consentire a 203.0.113.4
di connettersi alla porta 22
(SSH), utilizzare questo comando:
OutputRule added
Sottoreti
Se si desidera consentire una sottorete di indirizzi IP, è possibile farlo utilizzando la notazione CIDR per specificare una maschera di rete. Ad esempio, se si desidera consentire tutti gli indirizzi IP compresi tra 203.0.113.1
e 203.0.113.254
, è possibile utilizzare questo comando:
OutputRule added
Allo stesso modo, è possibile specificare anche la porta di destinazione a cui la sottorete 203.0.113.0/24
è autorizzata a connettersi. Ancora una volta, useremo la porta 22
(SSH) come esempio:
OutputRule added
Connessioni a una specifica interfaccia di rete
Se vuoi creare una regola del firewall che si applichi solo a una specifica interfaccia di rete, puoi farlo specificando “consenti in su” seguito dal nome dell’interfaccia di rete.
Potresti voler cercare le tue interfacce di rete prima di continuare. Per farlo, utilizza questo comando:
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
L’output evidenziato indica i nomi delle interfacce di rete. Di solito sono nominati qualcosa come eth0
o enp3s2
.
Quindi, se il tuo server ha un’interfaccia di rete pubblica chiamata eth0
, potresti consentire il traffico HTTP (porta 80
) ad essa con questo comando:
OutputRule added
Rule added (v6)
Fare ciò consentirebbe al tuo server di ricevere richieste HTTP dall’internet pubblico.
Oppure, se vuoi che il tuo server del database MySQL (porta 3306
) ascolti le connessioni sull’interfaccia di rete privata eth1
, ad esempio, potresti usare questo comando:
OutputRule added
Rule added (v6)
Questo consentirebbe ad altri server sulla tua rete privata di connettersi al tuo database MySQL.
Passaggio 6 — Negazione delle Connessioni
Se non hai cambiato la policy predefinita per le connessioni in ingresso, UFW è configurato per negare tutte le connessioni in ingresso. In generale, questo semplifica il processo di creazione di una politica del firewall sicura, richiedendo di creare regole che consentano esplicitamente specifiche porte e indirizzi IP.
Tuttavia, talvolta vorrai negare connessioni specifiche in base all’indirizzo IP di origine o alla subnet, forse perché sai che il tuo server sta subendo attacchi da lì. Inoltre, se desideri cambiare la tua politica predefinita in ingresso in consenti (cosa non consigliata), dovresti creare regole di negazione per qualsiasi servizio o indirizzo IP per cui non desideri consentire connessioni.
Per scrivere regole di negazione, puoi utilizzare i comandi precedentemente descritti, sostituendo consenti con negare.
Ad esempio, per negare le connessioni HTTP, potresti utilizzare questo comando:
OutputRule added
Rule added (v6)
O se desideri negare tutte le connessioni da 203.0.113.4
potresti utilizzare questo comando:
OutputRule added
In alcuni casi, potresti anche voler bloccare le connessioni in uscita dal server. Per negare a tutti gli utenti l’utilizzo di una porta sul server, come la porta 25
per il traffico SMTP, puoi utilizzare negare out
seguito dal numero di porta:
OutputRule added
Rule added (v6)
Questo bloccherà tutto il traffico SMTP in uscita dal server.
Passaggio 7 — Eliminazione delle regole
Conoscere come eliminare le regole del firewall è altrettanto importante quanto sapere come crearle. Ci sono due modi diversi per specificare quali regole eliminare: per numero di regola o per la sua denominazione leggibile dall’uomo (simile a come le regole sono state specificate quando sono state create).
Eliminazione di una regola UFW per numero
Per eliminare una regola UFW dal suo numero, prima è necessario ottenere un elenco numerato di tutte le regole del firewall. Il comando di stato di UFW ha un’opzione per visualizzare i numeri accanto a ciascuna regola, come mostrato qui:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Se decidi di voler eliminare la regola numero 2, quella che consente le connessioni sulla porta 80 (HTTP), puoi specificarla in un comando di eliminazione UFW come segue:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Questo chiederà una conferma e poi eliminerà la regola 2, che consente le connessioni HTTP. Nota che se hai IPv6 abilitato, vorrai eliminare anche la corrispondente regola IPv6.
Eliminazione di una regola UFW per nome
Invece di utilizzare i numeri di regola, è anche possibile fare riferimento a una regola mediante la sua denominazione leggibile dall’uomo, che si basa sul tipo di regola (tipicamente allow
o deny
) e il nome del servizio o il numero di porta che era il bersaglio per questa regola, oppure il nome del profilo dell’applicazione nel caso in cui fosse stato utilizzato. Ad esempio, se si desidera eliminare una regola allow
per un profilo di applicazione chiamato Apache Full
che era stato precedentemente abilitato, è possibile utilizzare:
OutputRule deleted
Rule deleted (v6)
Il comando delete
funziona allo stesso modo per le regole che sono state create facendo riferimento a un servizio per il suo nome o porta. Ad esempio, se in precedenza hai impostato una regola per consentire le connessioni HTTP con sudo ufw allow http
, ecco come potresti eliminare tale regola:
OutputRule deleted
Rule deleted (v6)
Poiché i nomi dei servizi sono intercambiabili con i numeri di porta quando si specificano le regole, potresti anche fare riferimento alla stessa regola come allow 80
, invece di allow http
:
OutputRule deleted
Rule deleted (v6)
Quando si eliminano le regole UFW per nome, vengono eliminate entrambe le regole IPv4 e IPv6 se esistono.
Passaggio 8 — Verifica dello Stato e delle Regole di UFW
In qualsiasi momento, puoi verificare lo stato di UFW con questo comando:
Se UFW è disabilitato, che è il valore predefinito, vedrai qualcosa del genere:
OutputStatus: inactive
Se UFW è attivo, il che dovrebbe essere se hai seguito il Passaggio 3, l’output indicherà che è attivo e elencherà eventuali regole impostate. Ad esempio, se il firewall è impostato per consentire le connessioni SSH (porta 22
) da qualsiasi parte, l’output potrebbe assomigliare a questo:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Usa il comando status
se vuoi controllare come UFW ha configurato il firewall.
Passo 9 — Disabilitare o Reimpostare il Firewall
Se decidi di non voler utilizzare il firewall UFW, puoi disattivarlo con questo comando:
OutputFirewall stopped and disabled on system startup
Eventuali regole che hai creato con UFW non saranno più attive. Puoi sempre eseguire sudo ufw enable
se hai bisogno di attivarlo in seguito.
Se hai già configurato delle regole UFW ma decidi di voler ricominciare da capo, puoi usare il comando di reset:
OutputResetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
Questo disabiliterà UFW e eliminerà tutte le regole precedentemente definite. Questo ti darà un nuovo inizio con UFW. Tieni presente che le politiche predefinite non cambieranno alle loro impostazioni originali, se le hai modificate in qualche momento.
Implementa le tue applicazioni frontend da GitHub utilizzando la Piattaforma App di DigitalOcean. Lascia che DigitalOcean si occupi di scalare la tua app.
Conclusione
Il tuo firewall è ora configurato per consentire (almeno) le connessioni SSH. Assicurati di consentire qualsiasi altra connessione in ingresso che il tuo server richiede, limitando al contempo qualsiasi connessione non necessaria, in modo che il tuo server sia funzionale e sicuro.
Per apprendere ulteriori configurazioni UFW comuni, consulta il tutorial UFW Essentials: Regole e Comandi Comuni del Firewall.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04