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:
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”):
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:
Lista delle regole firewall configurabili automaticamente da ufw
Per conoscere la lista delle applicazioni installate sulla macchina Linux e riconosciute da ufw, è sufficiente digitare:
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:
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):
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:
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.