Introduzione
UFW, o Uncomplicated Firewall, è un’interfaccia per iptables
progettata per semplificare la configurazione di un firewall. Sebbene iptables
sia uno strumento solido e flessibile, può essere difficile per i principianti imparare a usarlo per configurare correttamente un firewall. Se stai cercando di iniziare a proteggere la tua rete e non sei sicuro di 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 superiori.
Prerequisiti
Se stai utilizzando la versione 16.04 di Ubuntu o una versione 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à ad aggiornare la tua versione di Ubuntu.
Per seguire questo tutorial, avrai bisogno di:
- A server running Ubuntu, con un utente non root che ha privilegi di
sudo
. Per guida su come impostare questi elementi, scegli la tua distribuzione da questa lista e segui il nostro Guida per l’installazione iniziale del server. -
UFW è installato di default su Ubuntu. Se per qualche motivo è stato disinstallato, puoi installarlo con
sudo apt install ufw
.
Imposta il firewall di Ubuntu con UFW
- Abilita IPv6
- Imposta le politiche predefinite
- Permetti connessioni SSH
- Abilita UFW
- Permetti altre connessioni necessarie
- Nega connessioni
- Elimina regole firewall
- Controlla lo stato e le regole di UFW
- Come disabilitare o reimpostare il firewall su Ubuntu
Passo 1 — Assicurarsi che l’IPv6 sia abilitato
Nelle versioni più recenti di Ubuntu, l’IPv6 è abilitato come predefinito. In pratica questo significa che la maggior parte delle regole aggiunte al server includeranno sia l’IPv4 che l’IPv6, identificati rispettivamente con v6
nell’output della comanda di stato di UFW. Per assicurarti che l’IPv6 sia abilitato, puoi controllare la configurazione del file di UFW su /etc/default/ufw
. Apri questo file usando nano
o il tuo editor preferito per la linea di comandi:
Che sia impostata la valore di IPV6
su yes
. Deve apparire così:
Salva e chiudi il file. Se stai usando nano
, puoi fare questo digitando CTRL+X
, poi Y
e ENTER
.
Quando UFW sarà abilitato in un passo successivo di questo guida, verrà configurato ad essere in grado di scrivere regole di firewall sia per IPv4 che per IPv6.
Passo 2 — Impostazione delle politiche di default
Se ti stai avvicinando all’uso di UFW, un buon primo passo è quello di verificare le tue regole di default per i traffici. Queste regole controllano come trattare il traffico che non corrisponde ad alcuna altra regola specifica.
Inizialmente, UFW è impostato per rifiutare tutti i collegamenti entranti e consentire tutti i collegamenti usciti. Ciò significa che nessuno potrebbe connettersi al tuo server, mentre qualsiasi applicazione all’interno del server potrebbe raggiungere il mondo esterno. Le regole aggiuntive per consentire specifiche servizi e porte sono inclusi come eccezioni alla politica generale di sicurezza.
Per assicurarti che sarai in grado di seguire le altre istruzioni di questo tutorial, ora imposterai le politiche predefunte di UFW per i collegamenti entranti e usciti.
Per impostare la politica predefinita di UFW per i collegamenti entranti su rifiuta
, esegui:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Per impostare la politica predefinita di UFW per i collegamenti usciti su permette
, esegui:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Queste comandi impostano le predefiniti su rifiuta per i collegamenti entranti e su permette per i collegamenti usciti. Queste impostazioni di sicurezza predefinite possono essere sufficienti per un computer personale, ma i server normalmente necessitano rispondere ai richieste provenienti dall’esterno degli utenti. Vedremo ciò nel prossimo passo.
Passo 3 — Permettendo le connessioni SSH
Se avviassi ad abilitare il tuo firewall UFW ora, rifiuterà tutti i collegamenti entranti. Ciò significa che dovrai creare regole che consentono le connessioni entranti legittime — ad esempio, connessioni SSH o HTTP. Se stai usando un server in cloud, probabilmente vuoi consentire le connessioni SSH entranti così puoi accedere e gestire il tuo server.
<|observation|>
Autorizzare il profilo applicativo OpenSSH in UFW
Al momento dell’installazione, la maggior parte delle applicazioni che dipendono da connessioni di rete registrerà un profilo applicativo in UFW, che consente agli utenti di consentire o negare facilmente l’accesso esterno ad un servizio. È possibile controllare quali profili sono attualmente registrati in UFW utilizzando:
OutputAvailable applications:
OpenSSH
Per abilitare il profilo applicativo OpenSSH, eseguire:
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 default.
Autorizzare SSH tramite il Nome del Servizio
Un’altra modalità per configurare UFW per consentire connessioni SSH in entrata è riferirsi al suo nome del servizio: ssh
.
OutputRule added
Rule added (v6)
UFW sa quali porte e protocolli utilizza un servizio in base al file /etc/services
.
Autorizzare SSH tramite il numero della porta
Alternativamente, puoi scrivere la regola equivalente specificando la porta invece del profilo dell’applicazione o del nome del servizio. Per esempio, questo comando funziona allo stesso modo dei precedenti esempi:
OutputRule added
Rule added (v6)
Se hai configurato il tuo demone SSH per utilizzare una porta diversa, dovrai specificare la porta appropriata. Per esempio, se il tuo server SSH sta ascoltando sulla porta 2222
, puoi utilizzare questo comando per permettere le connessioni su quella porta:
OutputRule added
Rule added (v6)
Adesso che il tuo firewall è configurato per permettere le connessioni SSH in entrata, puoi abilitarlo.
Passo 4 — Abilitazione di UFW
Il tuo firewall dovrebbe ora essere configurato per permettere le connessioni SSH. Per verificare quali regole sono state aggiunte fino ad ora, anche quando il firewall è ancora disabilitato, puoi utilizzare:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Dopo aver confermato che hai una regola per permettere 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 dice che il comando potrebbe interrompere le connessioni SSH esistenti. Hai già impostato una regola del firewall che permette le connessioni SSH, quindi dovrebbe andare bene continuare. Rispondi alla richiesta 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.
Passo 5 — Permettendo altre connessioni
Al momento attuale, dovresti permettere tutte le altre connessioni che il tuo server ha bisogno di rispondere. Le connessioni che devono essere permessi dipendono dai tuoi requisiti specifici. E’ già stato spiegato come scrivere regole che permettono le connessioni basate su profili di applicazione, su nomi di servizio o su porte; si è visto che per SSH usare la porta 22
. Puoi anche fare questo per:
- HTTP su porta 80, che è quella che i server web senza crittografia usano, usando
sudo ufw allow http
osudo ufw allow 80
- HTTPS su porta 443, che è quella che i server web con crittografia usano, 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 dimenticarti di controllare quali profili di applicazione sono disponibili per il tuo server con sudo ufw app list
.
Esistono diverse altre modalità per consentire le connessioni, oltre a specificare una porta o un nome noto del servizio. Vi aspetto al prossimo passo.
Intervalli 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 specifichi intervalli di porte con UFW, devi specificare il protocollo (tcp
o udp
) a cui le regole dovrebbero applicarsi. Non lo abbiamo menzionato prima perché l’omissione del protocollo permette automaticamente entrambi i protocolli, il che è accettabile nella maggior parte dei casi.
Indirizzi IP Specifici
Quando lavori con UFW, puoi anche specificare gli indirizzi IP nelle tue regole. Per esempio, se vuoi permettere le connessioni da un indirizzo IP specifico, come un indirizzo IP di lavoro o casa 203.0.113.4
, devi usare il parametro from
, fornendo poi l’indirizzo IP che vuoi permettere:
OutputRule added
Puoi anche specificare una porta a cui l’indirizzo IP è permesso connettersi aggiungendo to any port
seguito dal numero della porta. Per esempio, se vuoi permettere a 203.0.113.4
di connettersi alla porta 22
(SSH), usa questo comando:
OutputRule added
Subnet
Se vuoi permettere un sottorete di indirizzi IP, puoi farlo usando la notazione CIDR per specificare una maschera di rete. Ad esempio, se vuoi consentire tutti gli indirizzi IP che si spaziano da 203.0.113.1
a 203.0.113.254
potresti usare questo comando:
OutputRule added
Analogamente, puoi anche specificare il porto destinativo su cui è permesso che la sottorete 203.0.113.0/24
connessione. Ancora una volta, usiamo come esempio il porto 22
(SSH):
OutputRule added
Connessioni ad una Specifica Interfaccia di Rete
Se vuoi creare una regola del firewall che si applica solo a una specifica interfaccia di rete, puoi fare così indicando “allow in on” seguito al nome dell’interfaccia di rete.
Potrebbe aiutarti a trovare le tue interfacce di rete prima di continuare. Per fare ciò, usa 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 accennato indica i nomi delle interfacce di rete. Essi sono generalmente chiamati qualcosa come eth0
o enp3s2
.
Quindi, se il tuo server ha una interfaccia di rete pubblica chiamata eth0
, potresti consentire le richieste HTTP (porta 80
) a essa con questo comando:
OutputRule added
Rule added (v6)
Fatto questo, consentirete al tuo server di ricevere richieste HTTP dall’internet pubblico.
Per ascoltare le connessioni su interfaccia eth1
(ad esempio), potete usare questo comando:
OutputRule added
Rule added (v6)
Questo permetterà ai server sul tuo network privato di connettersi al tuo database MySQL.
Passaggio 6 — Rifiuta connessioni
Se non hai cambiato la politica predefinita per le connessioni in arrivo, UFW è configurato per rifiutare tutte le connessioni dall’interno. In genere, questo semplifica il processo di creazione della politica del firewall sicuro richiedendo che tu creii regole che permettano specificamente ai porti e agli IP specifici di passare.
Tuttavia, spesso avrai bisogno di rifiutare specifiche connessioni basate sull’indirizzo IP o sulla subnet, ad esempio se sappienze che il tuo server è stato attacco da lì. Altrimenti, se vuoi cambiare la tua politica predefinita di ricezione in permetti (che non è raccomandabile), dovresti creare rifiuta regole per qualsiasi servizio o IP che non vuoi consentire connessioni.
Per scrivere rifiuta regole, puoi usare i comandi descritti precedentemente, sostituendo permetti con rifiuta.
Ad esempio, per rifiutare le connessioni HTTP potete usare questo comando:
OutputRule added
Rule added (v6)
O se vuoi rifiutare tutte le connessioni da 203.0.113.4
potete usare questo comando:
OutputRule added
In alcuni casi potresti anche volere bloccare le connessioni uscenti dal server. Per impedire che tutti i utenti utilizzassero un certo numero di porta sul server, ad esempio la porta
OutputRule added
Rule added (v6)
Questo bloccherà tutto il traffico SMTP uscente sul 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 quale regola eliminare: per numero o per denominazione umana (similmente a come era specificata quando erano state create).
Eliminare una Regola del Firewall UFW per Numero
Per eliminare una regola del UFW tramite il suo numero, prima dovrai ottenere un elenco numerato di tutte le tue regole. Il comando stato del UFW ha un’opzione per mostrare numeri accanto ogni 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 che vuoi eliminare la regola n° 2, quella che consente le connessioni su porta 80 (HTTP), puoi specificarla in un comando delete UFW come questo:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Questo ti chiederà conferma e poi eliminerà la regola 2, che consente le connessioni HTTP. Nota che se hai abilitato l’IPv6, dovrebbero essere eliminate anche le regole IPv6 corrispondenti.
Eliminare una regola UFW per nome
Invece di utilizzare i numeri di regola, è anche possibile riferirsi a una regola tramite una denominazione leggibile da umano, che si basa sul tipo di regola (di solito allow
o deny
) e il nome del servizio o il numero di porta che era l’obiettivo di questa regola, o il nome del profilo dell’applicazione in caso che fosse stato utilizzato. Per esempio, se si desidera eliminare una regola allow
per un profilo dell’applicazione chiamato Apache Full
che era stata abilitata in precedenza, è possibile usare:
OutputRule deleted
Rule deleted (v6)
Il comando delete
funziona allo stesso modo per le regole create facendo riferimento a un servizio tramite il suo nome o il numero di porta. Per esempio, se in precedenza hai impostato una regola per consentire le connessioni HTTP con sudo ufw allow http
, è così che potresti eliminare la regola citata:
OutputRule deleted
Rule deleted (v6)
Poiché i nomi dei servizi sono interscambiabili con i numeri di porta quando si specificano le regole, puoi anche riferirti alla stessa regola come allow 80
, invece di allow http
:
OutputRule deleted
Rule deleted (v6)
Quando si eliminano le regole UFW per nome, entrambe le regole IPv4 e IPv6 vengono eliminate se esistono.
Step 8 — Controllare lo stato e le regole di UFW
In qualsiasi momento, puoi controllare lo stato di UFW con questo comando:
Se il firewall UFW è disattivato, che è il caso predefinito, vedrai qualcosa di simile a questo:
OutputStatus: inactive
Se il firewall UFW è attivo, che dovrebbe essere il caso se hai seguito la procedura al passo 3, allora l’output dirà che è attivo e mostrera le regole che sono state impostate. Ad esempio, se il firewall è impostato per consentire connessioni SSH (porta 22
) da qualsiasi punto, l’output potrebbe apparire come questo:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Usare il comando status
se vuoi controllare come il firewall UFW ha configurato il firewall.
Passaggio 9 — Disattivare o Resettare il Firewall
Se decidessi di non usare più il firewall UFW, puoi disattivarlo con questo comando:
OutputFirewall stopped and disabled on system startup
Tutte le regole che hai creato con UFW non saranno più attive. Puoi sempre eseguire sudo ufw enable
se hai bisogno di attivarlo più tardi.
Se avessi già regole UFW configurate ma decidi che vuoi iniziare da capo, puoi usare il comando 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 disattiverà UFW e eliminerà tutte le regole che erano state definite precedentemente. Questo dovrebbe te dare un nuovo inizio con UFW. Tieniti presente che le politiche di default non cambieranno alla loro configurazione originale, se le avevi modificate alcuna volta.
Impieghera le tue applicazioni front-end provenienti da GitHub usando DigitalOcean App Platform. Lascia che DigitalOcean si occupi della scalabilità dell’app.
Conclusione
La tua firewall è ora configurata per consentire (almeno) le connessioni SSH. Assicurati di consentire anche altre connessioni in entrata che il tuo server richieda, limitando le connessioni non necessarie, così il tuo server sarà funzionale e sicuro.
Per imparare di più riguardo alle configurazioni di UFW comuni, consulta il tutorial UFW Essentials: Common Firewall Rules and Commands.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04