Un firewall è uno dei componenti fondamentali per la sicurezza di un sistema. È responsabile della gestione delle connessioni in entrata e in uscita sulla rete. È la linea di difesa principale per i tuoi server e dati. Ecco perché è fondamentale avere un firewall ben configurato. In questa guida, ti guideremo attraverso i passaggi per configurare un firewall con UFW su Ubuntu 18.04.
UFW su Ubuntu
Il termine UFW sta per “Uncomplicated Firewall”. Si tratta di un programma firewall predefinito che viene fornito preinstallato con Ubuntu. UFW è in realtà un'interfaccia per iptables. L'obiettivo di UFW è rendere più semplice la configurazione e la gestione di un firewall. Sebbene iptables, di per sé, sia un'opzione solida e flessibile, non è molto accessibile per i principianti. UFW rende le cose più facili sia per i principianti che per gli utenti esperti.
Innanzitutto, dai un'occhiata alla nostra guida completa che ti aiuterà a familiarizzare con le funzioni di base di UFW. Puoi anche seguire questa guida per installare il tuo server Ubuntu. Ora, iniziamo!
Per cominciare, se per qualche motivo il tuo UFW non è installato, installalo subito:
|
1 |
$ sudo apt install ufw |
Configurazione di UFW
-
Utilizzo di IPv6
Al momento, IPv4 è ancora la forza dominante. Tenendo presente questo, la maggior parte di questa guida si concentra su IPv4. Fortunatamente, UFW include anche il supporto per IPv6. Tutto ciò che devi fare è abilitare la funzionalità dal file di configurazione di UFW.
Innanzitutto, apri il file di configurazione di UFW in un editor di testo. Per salvare le modifiche, l'editor di testo deve essere eseguito con i privilegi di sudo:
|
1 |
$ sudo vim /etc/default/ufw |
Cerca “IPV6” e assicurati che sia impostato su “yes”.
-
Politica predefinita
Se è la prima volta che armeggi con un firewall, si consiglia di definire prima le politiche predefinite. Queste regole determinano come viene controllato il traffico che non corrisponde a nessuna regola esplicita. Per impostazione predefinita, UFW è configurato per rifiutare tutte le connessioni in entrata ma consentire tutte le connessioni in uscita. Definisce che nessuno può raggiungere il server mentre un'applicazione in esecuzione sul server può raggiungere l'esterno.
I seguenti comandi ridefiniranno semplicemente il comportamento predefinito di UFW. Nota che cambierà il comportamento di UFW se è stato modificato in precedenza:
|
1 2 |
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing |
Per un computer personale, queste sole regole del firewall sarebbero sufficienti. Tuttavia, i server richiedono di più per rafforzare adeguatamente la loro sicurezza.
Consentire le connessioni SSH
Per come è configurato ora UFW, rifiuterà tutte le connessioni in entrata. Per un server remoto, questo è inaccettabile. Senza accesso al server, non si può fare nulla. Per evitare questo problema, UFW può essere configurato per consentire le connessioni in entrata SSH o HTTP connessioni.
Per consentire le connessioni SSH al server, esegui il comando seguente. In sostanza dirà a UFW di consentire tutte le connessioni sulla porta 22. È la porta su cui il demone SSH è in ascolto per impostazione predefinita:
|
1 |
$ sudo ufw allow ssh |
Invece di questo comando, è possibile configurare direttamente l'abilitazione delle connessioni alla porta 22. Questa porta è definita nel file /etc/services :
|
1 |
$ sudo ufw allow 22 |
Poiché la porta 22 è quella predefinita per il demone SSH, può anche essere suscettibile di attacchi. Cosa succede se il server SSH è configurato per ascoltare su una porta diversa? In una situazione del genere, UFW deve consentire la connessione a quella porta. Supponendo che il server SSH sia in ascolto sulla porta 1234, usa il comando seguente:
|
1 |
$ sudo ufw allow 1234 |
Abilitazione di UFW
Sebbene le regole di UFW siano stabilite, non faranno nulla a meno che UFW non venga attivato. Per impostazione predefinita, UFW è disabilitato, il che significa che, nonostante la dichiarazione delle regole, non le applicherà. Per abilitare UFW, esegui il comando seguente:
|
1 |
$ sudo ufw enable |
UFW potrebbe mostrare un messaggio di avviso sull'interruzione delle connessioni SSH esistenti. Poiché le connessioni SSH sono state configurate per essere consentite, l'abilitazione di UFW non causerà alcuna interruzione. Per vedere quali regole sono impostate, esegui il comando seguente:
|
1 |
$ sudo ufw status verbose |
Consentire varie connessioni
A questo punto, UFW dovrebbe essere configurato con altre regole per avere un'esperienza stabile. Le connessioni da consentire dipendono dalle tue esigenze specifiche. È già stato dimostrato come indicare a UFW di consentire le connessioni in base al nome di un servizio o al numero di porta.
Ecco alcune altre porte che è molto comune avere aperte:
- SSH (
porta 22): Questa è la porta predefinita configurata per le connessioni SSH. - HTTP (
porta 80): Questa è la porta predefinita utilizzata dai server web non crittografati. - HTTPS (
porta 443): Questa è la porta predefinita utilizzata dai server web crittografati.
Per abilitare le connessioni SSH, esegui uno dei seguenti comandi:
|
1 2 |
$ sudo ufw allow ssh $ sudo ufw allow 22 |
Successivamente, per abilitare le connessioni HTTP, esegui uno dei seguenti comandi:
|
1 2 |
$ sudo ufw allow http $ sudo ufw allow 80 |
Per abilitare le connessioni HTTPS, esegui uno dei seguenti comandi:
|
1 2 |
$ sudo ufw allow https $ sudo ufw allow 443 |
Intervallo di porte
Finora abbiamo dimostrato come consentire una determinata porta. Cosa succede se c'è bisogno di un intervallo di porte? Dichiarare ogni porta a UFW è piuttosto inefficiente. Alcune applicazioni utilizzano più porte. Fortunatamente, UFW consente di dichiarare un intervallo di porte. Per farlo, utilizza la seguente struttura di comando:
|
1 |
$ sudo ufw allow <inizio>:<fine>/<protocollo> |
Il seguente esempio abilita le connessioni X11 che utilizzano le porte da 6000 a 6007:
|
1 2 |
$ sudo ufw allow 6000:6007/tcp $ sudo ufw allow 6000:6007/udp |
Si consiglia di dichiarare i protocolli ogni volta che è possibile. Tuttavia, nella maggior parte dei casi, non è necessario e tutto funzionerà correttamente.
Indirizzi IP specifici
Quando si utilizza UFW, è anche possibile filtrare le connessioni in base a indirizzi IP specifici. Per impostazione predefinita, UFW bloccherà le connessioni da qualsiasi indirizzo IP. È possibile dichiarare di consentire la connessione da determinati indirizzi IP. Per consentire la connessione da un indirizzo IP, utilizza la seguente struttura di comando:
|
1 |
$ sudo ufw allow from <indirizzo_ip> |
Puoi anche dichiarare le porte specifiche a cui l'indirizzo IP è autorizzato a connettersi. Per farlo, aggiungi to any port seguito dal numero di porta al comando:
|
1 |
$ sudo ufw allow from <indirizzo_ip> to any port <porta> |
Sottoreti
Se hai la necessità di consentire una sottorete di indirizzi IP, è possibile farlo utilizzando la notazione CIDR. In questo esempio, UFW consentirà la connessione da indirizzi IP che vanno da 203.0.113.1 a 203.0.113.254:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 |
In modo simile al passaggio precedente, è anche possibile specificare la porta a cui questi indirizzi IP possono connettersi:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 to any port <porta> |
Connessione a un'interfaccia di rete specifica
In un ambiente server, potrebbero esserci più interfacce di rete collegate al sistema. Utilizzando UFW, è possibile specificare che una determinata regola si applica solo a un'interfaccia di rete specifica. Innanzitutto, controlla tutte le interfacce di rete collegate al server. Il nome dell'interfaccia di rete di destinazione è l'obiettivo principale:
|
1 |
$ ip addr |
Nel nostro caso, c'è solo un'interfaccia di rete ens3 che si connette a internet pubblico. Per consentire le connessioni in entrata da questa interfaccia di rete, utilizza la seguente struttura di comando:
|
1 |
$ sudo ufw allow in on <interfaccia_di_rete> |
È anche possibile definire la porta a cui può arrivare il traffico proveniente dall'interfaccia di rete:
|
1 |
$ sudo ufw allow in on <interfaccia_di_rete> to any port <porta> |
Rifiutare la connessione
In base alla configurazione predefinita, UFW rifiuterà le connessioni da qualsiasi origine (tranne le eccezioni dichiarate). Questo è il modo consigliato di utilizzare UFW. Tuttavia, potrebbe essere necessario bloccare connessioni specifiche da un determinato indirizzo IP di origine o sottorete. Forse il comportamento predefinito di UFW è impostato per consentire tutte le connessioni (non consigliato).
Per rifiutare una connessione da determinati indirizzi IP, UFW richiede regole di rifiuto. Scrivere regole di rifiuto è piuttosto semplice. Prendi una qualsiasi regola di autorizzazione, sostituisci il termine “allow” con “deny” e voilà! Diventa una regola di rifiuto.
Dai un'occhiata al seguente esempio. Per rifiutare qualsiasi connessione HTTP, usa la seguente regola di rifiuto:
|
1 2 |
$ sudo ufw deny http $ sudo ufw deny 80 |
Per rifiutare la connessione da 203.0.113.1, usa la seguente regola di rifiuto:
|
1 |
$ sudo ufw deny from 203.0.113.1 |
Eliminare le regole
Tutto ciò che abbiamo imparato finora è come creare regole. Proprio come vengono create, le regole possono anche essere eliminate. Nel caso di UFW, ci sono due modi specifici per eliminare una regola.
-
Eliminare una regola tramite il numero della regola
Questo è il modo più semplice per eliminare una regola UFW. Ogni regola in UFW ha un numero di regola. Il seguente comando stamperà tutte le regole UFW insieme al relativo numero:
|
1 |
$ sudo ufw status numbered |
Il seguente comando eliminerà la regola specificata dal numero della regola:
|
1 |
$ sudo ufw delete <rule_number> |
-
Eliminare una regola tramite la regola effettiva
Questo è il metodo più difficile per eliminare una regola. Richiede di specificare manualmente la regola effettiva da eliminare. Nel seguente esempio, UFW eliminerà la regola specificata da allow http:
|
1 |
$ sudo ufw delete allow http |
La regola avrebbe potuto anche essere specificata da allow 80. In tal caso, il seguente comando la eliminerà:
|
1 |
$ sudo ufw delete allow 80 |
L'eliminazione di una regola la eliminerà sia per IPv4 che per IPv6.
Verifica dello stato e delle regole di UFW
È essenziale verificare se UFW sia attivo o meno. Per determinare lo stato di UFW, esegui il seguente comando:
|
1 |
$ sudo ufw status verbose |
Se lo stato è “inactive”, attivalo seguendo il passaggio Abilitazione di UFW sopra. Se è attivo, UFW segnalerà lo stato “active” ed elencherà tutte le regole attive.
Disattivazione di UFW
Se, per qualche motivo, non utilizzerai UFW, disabilitalo usando il seguente comando:
|
1 |
$ sudo ufw disable |
Se UFW è disabilitato, tutte le regole create non sono più attive. Tuttavia, le regole non vengono eliminate. Quando UFW viene riattivato, tutte le regole diventeranno nuovamente attive. E se l'attuale configurazione di UFW fosse un disastro? Invece di eliminare le regole una per una, è possibile eliminarle tutte con un unico comando. Per ripristinare UFW, esegui il seguente comando:
|
1 |
$ sudo ufw reset |
Nota che questo non cambierà il comportamento predefinito di UFW configurato all'inizio.
Conclusione
Una corretta configurazione del firewall è necessaria per garantire sicurezza e funzionalità. Dovrebbe essere configurato per consentire solo le connessioni in entrata necessarie, limitando al contempo quelle non necessarie.
Se desideri conoscere altre soluzioni firewall, dai un'occhiata al nostro blog per ulteriori risorse:
- Configurazione di un firewall con FirewallD su CentOS 7
- Elencare ed eliminare le regole del firewall Iptables
- Come creare solide misure di sicurezza per proteggere i tuoi server
Buon computing!











Commenti
Ancora nessun commento. Scrivi il primo.