Firewall: come configurarlo con ufw su Ubuntu

Come usare il firewall ufw (Uncomplicated Firewall) su Ubuntu e distribuzioni derivate da Debian.

Quando si parla di firewall Linux si fa generalmente riferimento alle tecnologie di packet filtering a basso livello come iptables (al quale abbiamo dedicato altri articoli in passato, vedere ad esempio Iptables: come impostare il firewall nei sistemi operativi Linux) e nftables.
Nell’articolo Cos’è il firewall e come funziona quello di Windows abbiamo pubblicato qualche considerazione di carattere generale sui firewall, con particolare riferimento a quello integrato in Windows.

Per configurare il firewall in maniera sicura ed efficace su Ubuntu e distribuzioni Linux derivate da Debian è possibile orientarsi sull’ottimo ufw (Uncomplicated Firewall).
Ormai installato di default non solo su Ubuntu ma anche in altre popolari distribuzioni, ufw risulta – per impostazione predefinita – disattivato.

In tutti i comandi presentati nel seguito abbiamo evitato di anteporre sudo: andrà specificato se non si fossero precedentemente acquisiti i diritti di root sul sistema in uso.

Configurare il firewall ufw su Ubuntu: stato e attivazione

Per verificare lo stato del firewall ufw sul sistema Linux, basta digitare il comando seguente:

ufw status

Il comando mostra anche la lista completa delle eventuali regole firewall già impostate.
Nel caso in cui ufw non risultasse installato, basterà ricorrere al comando apt install ufw.

Il bello di ufw è che riconosce automaticamente le applicazioni Linux installate che usano funzionalità server ovvero che si pongono in ascolto delle richieste di connessione in ingresso e permette di configurare le regole firewall più pertinenti senza alcuna difficoltà.

Per iniziare si può configurare ufw in maniera tale da permettere tutte le comunicazioni in uscita dalla macchina Linux e bloccare tutte quelle in ingresso.
Attenzione però perché se si fosse collegati via SSH alla macchina Linux, bisognerà – prima dei successivi – impartire il comando (altrimenti si resterà “chiusi fuori”):

ufw allow ssh

Quindi:

ufw default deny incoming
ufw default allow outgoing

Il comando ufw allow ssh fa sì che ufw aprà automaticamente la porta TCP 22 usata da SSH in ingresso. Il firewall sa cosa significa ssh perché nel file /etc/services sono annotate tutte le corrispondenze (è possibile aprirlo digitando nano /etc/services).

Lo stesso effetto, con la creazione di una regola per le connessioni SSH in ingresso, si otterrebbe ovviamente digitando ufw allow 22.
In questo caso, però, saranno aperte in ingresso sia la porta TCP 22 che UDP 22. Se si volesse aprire solo TCP 22, basterà usare il comando ufw allow 22/TCP.

L’attivazione del firewall, con la gestione delle regole configurate (verificarle con il comando ufw status), può essere richiesta digitando:

ufw enable

Lista delle regole firewall configurabili automaticamente da ufw

Per conoscere la lista delle applicazioni installate sulla macchina Linux e riconosciute da ufw, è sufficiente digitare:

ufw app list

Così, dopo aver installato il server web Apache esso risulterà tra le applicazioni automaticamente configurabili sulla macchina. Usando ufw si potrà consentire l’accesso sulle porte di comunicazione in ingresso usate di default da Apache.

Non solo. Scrivendo ufw app info seguito dal nome della regola, si otterrà un’indicazione sulle porte che saranno aperte dal firewall.
Ad esempio, con ufw app info "Apache Full" (notare l’utilizzo delle virgolette) si può verificare che la regola chiamata Apache Full – usando il comando ufw allow "Apache Full" – aprirà in ingresso sia la porta TCP 80 (HTTP) che la porta TCP 443 (HTTPS).

Impartendo il comando ufw status verbose si otterranno maggiori informazioni (con l’indicazione delle porte) per ciascuna regola firewall in essere.

Una volta aggiunte le regole (a patto che ufw sia stato abilitato con ufw enable) non è necessario usare il comando ufw reload per caricare le nuove policy che saranno immediatamente applicate.
Per verificare se la macchina Linux risponde sulle porte configurate lato firewall, basta usare il comando telnet da client Windows, Linux o macOS. Basta digitare telnet seguito dall’indirizzo IP del server e dalla porta da verificare.

Consentire le comunicazioni solo da singoli indirizzi IP e sottoreti

Con ufw è possibile anche consentire le connessioni soltanto da indirizzi IP specifici con il comando ufw allow from seguito dall’indirizzo IP autorizzato a collegarsi alla macchina.
Il comando seguente, per esempio, autorizza la connessione di uno specifico IP client solo sulla porta 22:

ufw allow from IP_CLIENT to any port 22

Allo stesso modo è possibile consentire le connessioni da intere reti usando correttamente la subnet mask (notare che nell’esempio /24 corrisponde a 255.255.255.0; per maggiori informazioni vedere Subnet mask, cos’è e a che cosa serve):

ufw allow from IP_CLIENT/24 to any port 22

Il comando ip addr show, come visto nell’articolo Comandi Linux per gestire la configurazione di rete, consente di conoscere le interfacce di rete in uso sul sistema e i relativi indirizzi IP.
Con il comando seguente, è possibile fare in modo che ufw risponda ai tentativi di connessione in ingresso (sulla porta 3306 usati da MySQL/MariaDB) solo sull’interfaccia chiamata eth1 ma non sulle altre:

allow in on eth1 to any port 3306

Eliminare le regole firewall da ufw

Per rimuovere una o più regole firewall con ufw, suggeriamo di digitare ufw status numbered.
A sinistra di ciascuna regola, ufw mostrerà un numero: per rimuovere una singola regola, si dovrà annotare tale numero e digitare ufw delete seguito dal numero che identifica la regola della quale ci si vuole sbarazzare.

Ti consigliamo anche

Link copiato negli appunti