Introduzione
UFW, o Uncomplicated Firewall, è un’interfaccia per iptables
progettata per semplificare il processo di configurazione di un firewall. Mentre iptables
è uno strumento solido e flessibile, può essere difficile per i principianti imparare come utilizzarlo 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.
In questo tutorial ti mostreremo 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 eseguire l’aggiornamento a una versione più recente poiché Ubuntu non fornisce più supporto per queste versioni. Questa raccolta di guide ti aiuterà nell’aggiornare la tua versione di Ubuntu.
Per seguire questo tutorial, avrai bisogno di:
-
Un server in esecuzione Ubuntu, insieme a un utente non root con privilegi
sudo
. Per una guida su come configurare questi, seleziona la tua distribuzione da questo elenco e segui la nostra Guida all’Configurazione Iniziale del Server. -
UFW è installato per default 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
- Abilitazione di UFW
- Consenti eventuali altre connessioni necessarie
- Negazione delle connessioni
- Eliminazione delle regole del firewall
- Verifica dello stato e delle regole di UFW
- Come disabilitare o ripristinare il firewall su Ubuntu
Passaggio 1 — Verifica 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 includerà sia una versione IPv4 che una versione IPv6, quest’ultima identificata dal v6
nell’output del comando di stato di UFW. Per verificare che IPv6 sia abilitato, è possibile controllare il file di configurazione di UFW in /etc/default/ufw
. Apri questo file utilizzando nano
o il tuo editor della riga di comando preferito:
Poi assicurati che il valore di IPV6
sia impostato su yes
. Dovrebbe apparire così:
Salva e chiudi il file. Se stai utilizzando nano
, puoi farlo digitando CTRL+X
, poi Y
e INVIO
per confermare.
Quando UFW è abilitato in un passaggio successivo di questa guida, sarà configurato per scrivere sia regole del firewall IPv4 che IPv6.
Passaggio 2 — Configurazione delle Politiche Predefinite
Se stai iniziando ad utilizzare 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 riuscirebbe a connettersi, mentre qualsiasi applicazione all’interno del server sarebbe in grado di raggiungere il mondo esterno. Regole aggiuntive per consentire servizi e porte specifiche sono incluse come eccezioni a questa politica generale.
Per assicurarti di poter seguire il resto di questo tutorial, ora imposterai 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 da soli potrebbero essere sufficienti per un computer personale, ma i server tipicamente hanno bisogno di rispondere alle richieste in entrata da utenti esterni. Vedremo questo nel prossimo passo.
Passaggio 3 — Consenso Connessioni SSH
Se attivassi ora il firewall UFW, verrebbe negato l’accesso a tutte le connessioni in entrata. Ciò significa che dovrai creare regole che consentano esplicitamente le connessioni in arrivo legittime — come quelle SSH o HTTP — se desideri che il server risponda a quei tipi di richieste. Se stai utilizzando un server cloud, probabilmente vorrai consentire le connessioni SSH in entrata per 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 registreranno 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 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 servizio
Un altro modo per configurare UFW per consentire le connessioni SSH in ingresso è facendo riferimento al nome del 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 connessioni su quella porta:
OutputRule added
Rule added (v6)
Ora che il tuo firewall è configurato per consentire 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 utilizzare:
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 ingresso, 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 dice 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 copre come utilizzare UFW in modo più dettagliato, come permettere o negare diversi tipi di connessioni.
Passaggio 5 — Consentire 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 dell’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 è quella utilizzata dai server web non criptati, utilizzando
sudo ufw allow http
osudo ufw allow 80
- HTTPS sulla porta 443, che è ciò che utilizzano i server web criptati, utilizzando
sudo ufw allow https
osudo ufw allow 443
- Apache con sia HTTP che HTTPS, utilizzando
sudo ufw allow ‘Apache Full’
- Nginx con sia HTTP che HTTPS, utilizzando
sudo ufw allow ‘Nginx Full’
Non dimenticare di verificare quali profili di applicazione sono disponibili per il tuo server con sudo ufw app list
.
Esistono diversi altri modi per consentire connessioni, oltre a specificare una porta o un nome di servizio noto. Vedremo alcuni di questi prossimamente.
Intervallo di Porte Specifico
Puoi specificare intervalli di porte con UFW. Alcune applicazioni utilizzano più porte, invece di una singola porta.
Per esempio, per consentire le connessioni X11, che utilizzano le porte 6000
–6007
, utilizza questi comandi:
Quando si specificano intervalli di porte con UFW, è necessario specificare il protocollo (tcp
o udp
) a cui si applicano le regole. Non lo abbiamo menzionato prima perché non specificare il protocollo consente 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 di lavoro o di casa 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 a cui l’indirizzo IP è autorizzato a connettersi aggiungendo a qualsiasi porta
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. Di nuovo, useremo la porta 22
(SSH) come esempio:
OutputRule added
Connessioni a una specifica interfaccia di rete
Se desideri creare una regola del firewall che si applichi solo a una specifica interfaccia di rete, puoi farlo specificando “allow in on” 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 hanno nomi come eth0
o enp3s2
.
Quindi, se il tuo server ha un’interfaccia di rete pubblica chiamata eth0
, potresti consentire il traffico HTTP (porta 80
) su di essa con questo comando:
OutputRule added
Rule added (v6)
In questo modo il tuo server potrebbe ricevere richieste HTTP dall’Internet pubblico.
Oppure, se desideri che il tuo server di database MySQL (porta 3306
) ascolti le connessioni sull’interfaccia di rete privata eth1
, ad esempio, potresti utilizzare 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 modificato la policy predefinita per le connessioni in ingresso, UFW è configurato per negare tutte le connessioni in ingresso. Generalmente, ciò semplifica il processo di creazione di una politica del firewall sicura richiedendoti di creare regole che consentano esplicitamente specifiche porte e indirizzi IP.
Tuttavia, a volte vorrai negare connessioni specifiche in base all’indirizzo IP di origine o alla subnet, forse perché sai che il tuo server sta subendo un attacco da lì. Inoltre, se vuoi cambiare la tua politica predefinita in ingresso in consentire (che non è consigliato), dovresti creare regole di negazione per tutti i servizi o gli indirizzi IP per i quali non vuoi consentire connessioni.
Per scrivere regole di negazione, puoi utilizzare i comandi precedentemente descritti, sostituendo consentire con negare.
Ad esempio, per negare le connessioni HTTP, potresti utilizzare questo comando:
OutputRule added
Rule added (v6)
O se vuoi 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 di utilizzare una porta sul server, come la porta 25
per il traffico SMTP, puoi utilizzare negare uscita
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).
Eliminare una regola UFW per numero
Per eliminare una regola UFW per il 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 connessioni alla porta 80 (HTTP), puoi specificarla in un comando di eliminazione di UFW in questo modo:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Questo richiederà una conferma quindi eliminerà la regola 2, che consente connessioni HTTP. Nota che se hai IPv6 abilitato, vorresti eliminare anche la corrispondente regola IPv6.
Eliminare una regola UFW per nome
Invece di utilizzare i numeri di regola, è possibile fare riferimento a una regola attraverso la sua denominazione leggibile dall’utente, 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 di questa regola, o il nome del profilo dell’applicazione nel caso in cui sia stato utilizzato. Ad esempio, se si desidera eliminare una regola allow
per un profilo di applicazione chiamato Apache Full
che è 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 hai precedentemente impostato una regola per consentire le connessioni HTTP con sudo ufw allow http
, ecco come potresti eliminare questa 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 sia le regole IPv4 che 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, il che avviene per impostazione predefinita, vedrai qualcosa del genere:
OutputStatus: inactive
Se UFW è attivo, il che dovrebbe essere se hai seguito il Passaggio 3, l’output dirà 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.
Passaggio 9 — Disattivare 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 utilizzare 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 cancellerà tutte le regole precedentemente definite. Questo ti darà un nuovo inizio con UFW. Tieni presente che le policy predefinite non cambieranno alle impostazioni originali se le hai modificate in qualche momento.
Implementa le tue applicazioni frontend da GitHub usando la Piattaforma App di DigitalOcean. Lascia che DigitalOcean si occupi di scalare la tua app.
Conclusioni
Il tuo firewall è ora configurato per consentire (almeno) connessioni SSH. Assicurati di consentire eventuali altre connessioni in ingresso di cui il tuo server ha bisogno, limitando al contempo qualsiasi connessione non necessaria, in modo che il tuo server sia funzionale e sicuro.
Per apprendere di più sulle configurazioni comuni UFW, dai un’occhiata al tutorial UFW Essentials: Regole e Comandi Firewall Comuni.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu