Un firewall è uno strumento per monitorare e filtrare il traffico di rete in entrata e in uscita. Funziona definendo un insieme di regole di sicurezza che determinano se consentire o bloccare un traffico specifico.
Ubuntu viene fornito con uno strumento di configurazione del firewall chiamato UFW (Uncomplicated Firewall). È un front-end intuitivo per la gestione delle regole del firewall iptables. Il suo obiettivo principale è rendere la gestione del firewall più semplice o, come dice il nome, semplice.
Questo articolo descrive come utilizzare lo strumento UFW per configurare e gestire un firewall su Ubuntu 20.04. Un firewall correttamente configurato è uno degli aspetti più importanti della sicurezza generale del sistema.
Prerequisiti #
Solo root o utenti con privilegi sudo possono gestire il firewall di sistema. La migliore pratica consiste nell'eseguire attività amministrative come utente sudo.
Installa UFW #
UFW fa parte dell'installazione standard di Ubuntu 20.04 e dovrebbe essere presente sul tuo sistema. Se per qualche motivo non è installato, puoi installare il pacchetto digitando:
sudo apt update
sudo apt install ufw
Verifica stato UFW #
UFW è disabilitato per impostazione predefinita. Puoi controllare lo stato del servizio UFW con il seguente comando:
sudo ufw status verbose
L'output mostrerà che lo stato del firewall è inattivo:
Status: inactive
Se UFW è attivato, l'output avrà un aspetto simile a quanto segue:
Politiche predefinite UFW #
Il comportamento predefinito del firewall UFW consiste nel bloccare tutto il traffico in entrata e in uscita e consentire tutto il traffico in uscita. Ciò significa che chiunque tenti di accedere al tuo server non sarà in grado di connettersi a meno che tu non apra specificamente la porta. Le applicazioni e i servizi in esecuzione sul tuo server potranno accedere al mondo esterno.
Le politiche predefinite sono definite in /etc/default/ufw
file e può essere modificato modificando manualmente il file o con il sudo ufw default <policy> <chain>
comando.
I criteri del firewall sono la base per la creazione di regole più complesse e definite dall'utente. In generale, le politiche predefinite UFW iniziali sono un buon punto di partenza.
Profili applicazione #
Un profilo dell'applicazione è un file di testo in formato INI che descrive il servizio e contiene le regole del firewall per il servizio. I profili delle applicazioni vengono creati in /etc/ufw/applications.d
directory durante l'installazione del pacchetto.
Puoi elencare tutti i profili delle applicazioni disponibili sul tuo server digitando:
sudo ufw app list
A seconda dei pacchetti installati sul tuo sistema, l'output sarà simile al seguente:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Per trovare ulteriori informazioni su un profilo specifico e sulle regole incluse, utilizza il comando seguente:
sudo ufw app info 'Nginx Full'
L'output mostra che il profilo "Nginx Full" apre le porte 80
e 443
.
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
Puoi anche creare profili personalizzati per le tue applicazioni.
Abilitazione UFW #
Se ti stai connettendo a Ubuntu da una posizione remota, prima di abilitare il firewall UFW, devi consentire esplicitamente le connessioni SSH in entrata. In caso contrario, non sarai più in grado di connetterti alla macchina.
Per configurare il firewall UFW per consentire le connessioni SSH in entrata, digita il seguente comando:
sudo ufw allow ssh
Rules updated
Rules updated (v6)
Se SSH è in esecuzione su una porta non standard, devi aprire quella porta.
Ad esempio, se il tuo demone ssh è in ascolto sulla porta 7722
, inserisci il seguente comando per consentire le connessioni su quella porta:
sudo ufw allow 7722/tcp
Ora che il firewall è configurato per consentire le connessioni SSH in entrata, puoi abilitarlo digitando:
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Sarai avvisato che l'abilitazione del firewall potrebbe interrompere le connessioni ssh esistenti, basta digitare y
e premi Enter
.
Apertura porte #
A seconda delle applicazioni in esecuzione sul sistema, potrebbe essere necessario aprire anche altre porte. La sintassi generale per aprire una porta è la seguente:
ufw allow port_number/protocol
Di seguito sono riportati alcuni modi per consentire le connessioni HTTP.
La prima opzione consiste nell'usare il nome del servizio. UFW controlla il /etc/services
file per la porta e il protocollo del servizio specificato:
sudo ufw allow http
Puoi anche specificare il numero di porta e il protocollo:
sudo ufw allow 80/tcp
Quando non viene fornito alcun protocollo, UFW crea regole per entrambi tcp
e udp
.
Un'altra opzione consiste nell'utilizzare il profilo dell'applicazione; in questo caso, 'Nginx HTTP':
sudo ufw allow 'Nginx HTTP'
UFW supporta anche un'altra sintassi per specificare il protocollo usando il proto
parola chiave:
sudo ufw allow proto tcp to any port 80
Intervalli di porte #
UFW ti consente anche di aprire intervalli di porte. Le porte di inizio e fine sono separate da due punti (:
), e devi specificare il protocollo, tcp
o udp
.
Ad esempio, se desideri consentire le porte da 7100
a 7200
su entrambi tcp
e udp
, eseguiresti il seguente comando:
sudo ufw allow 7100:7200/tcp
sudo ufw allow 7100:7200/udp
Indirizzo IP specifico e numero di porta
Per consentire le connessioni su tutte le porte da un determinato IP sorgente, usa il from
parola chiave seguita dall'indirizzo di origine.
Ecco un esempio di inserimento nella whitelist di un indirizzo IP:
sudo ufw allow from 64.63.62.61
Se desideri consentire all'indirizzo IP specificato di accedere solo a una porta specifica, utilizza il to any port
parola chiave seguita dal numero di porta.
Ad esempio, per consentire l'accesso sulla porta 22
da una macchina con indirizzo IP 64.63.62.61
, inserisci:
sudo ufw allow from 64.63.62.61 to any port 22
Subnet #
La sintassi per consentire le connessioni a una sottorete di indirizzi IP è la stessa di quando si utilizza un singolo indirizzo IP. L'unica differenza è che devi specificare la netmask.
Di seguito è riportato un esempio che mostra come consentire l'accesso per indirizzi IP che vanno da 192.168.1.1
a 192.168.1.254
per portare 3360
(MySQL):
sudo ufw allow from 192.168.1.0/24 to any port 3306
Interfaccia di rete specifica #
Per consentire le connessioni su una particolare interfaccia di rete, usa il in on
parola chiave seguita dal nome dell'interfaccia di rete:
sudo ufw allow in on eth2 to any port 3306
Negare connessioni #
Il criterio predefinito per tutte le connessioni in entrata è impostato su deny
e, se non lo hai modificato, UFW bloccherà tutte le connessioni in entrata a meno che tu non apra specificamente la connessione.
Scrivere regole di negazione equivale a scrivere regole di autorizzazione; devi solo usare il deny
parola chiave invece di allow
.
Supponiamo che tu abbia aperto le porte 80
e 443
e il tuo server è sotto attacco da 23.24.25.0/24
Rete. Per negare tutte le connessioni da 23.24.25.0/24
eseguiresti il seguente comando:
sudo ufw deny from 23.24.25.0/24
Ecco un esempio di negare l'accesso solo alle porte 80
e 443
da 23.24.25.0/24
puoi usare il seguente comando:
sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443
Eliminazione delle regole UFW #
Esistono due modi diversi per eliminare le regole UFW in base al numero di regola e specificando la regola effettiva.
Eliminare le regole in base al numero di regola è più semplice, soprattutto quando sei nuovo in UFW. Per eliminare prima una regola in base a un numero di regola, devi trovare il numero della regola che desideri eliminare. Per ottenere un elenco di regole numerate, utilizza ufw status numbered
comando:
sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere
Per eliminare la regola numero 3
, quello che consente le connessioni alla porta 8080
, dovresti inserire:
sudo ufw delete 3
Il secondo metodo consiste nell'eliminare una regola specificando la regola effettiva. Ad esempio, se hai aggiunto una regola per aprire la porta 8069
puoi eliminarlo con:
sudo ufw delete allow 8069
Disabilitazione UFW #
Se per qualsiasi motivo vuoi interrompere l'UFW e disattivare tutte le regole, puoi utilizzare:
sudo ufw disable
Successivamente, se vuoi riattivare UTF e attivare tutte le regole, digita semplicemente:
sudo ufw enable
Ripristino UFW #
Il ripristino di UFW disabiliterà UFW ed eliminerà tutte le regole attive. Questo è utile se vuoi annullare tutte le modifiche e ricominciare da capo.
Per reimpostare UFW, digita il seguente comando:
sudo ufw reset
Masquerading IP #
IP Masquerading è una variante di NAT (network address translation) nel kernel Linux che traduce il traffico di rete riscrivendo gli indirizzi IP e le porte di origine e destinazione. Con IP Masquerading, puoi consentire a una o più macchine in una rete privata di comunicare con Internet utilizzando una macchina Linux che funge da gateway.
La configurazione di IP Masquerading con UFW prevede diversi passaggi.
Innanzitutto, è necessario abilitare l'inoltro IP. Per farlo, apri il /etc/ufw/sysctl.conf
file:
sudo nano /etc/ufw/sysctl.conf
Trova e decommenta la riga che legge net.ipv4.ip_forward = 1
:
net/ipv4/ip_forward=1
Successivamente, è necessario configurare UFW per consentire i pacchetti inoltrati. Apri il file di configurazione UFW:
sudo nano /etc/default/ufw
Individua il DEFAULT_FORWARD_POLICY
e cambia il valore da DROP
per ACCEPT
:
DEFAULT_FORWARD_POLICY="ACCEPT"
Ora devi impostare la politica predefinita per il POSTROUTING
catena nella nat
tavola e la regola della mascherata. Per farlo, apri il /etc/ufw/before.rules
archiviare e aggiungere le righe evidenziate in giallo, come mostrato di seguito:
sudo nano /etc/ufw/before.rules
Aggiungi le seguenti righe:
/etc/ufw/before.rules#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through eth0 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
Non dimenticare di sostituire eth0
nel -A POSTROUTING
riga in modo che corrisponda al nome dell'interfaccia di rete pubblica:
Quando hai finito, salva e chiudi il file.
Infine, ricarica le regole UFW disabilitando e riattivando UFW:
sudo ufw disable
sudo ufw enable