Come configurare un firewall con UFW su Ubuntu

Introduzione

UFW, o Uncomplicated Firewall, è un’interfaccia per iptables che mira a semplificare il processo di configurazione di un firewall. Mentre iptables è uno strumento solido e flessibile, può essere difficile per i principianti imparare come usarlo per configurare correttamente un firewall. Se stai cercando di iniziare a proteggere la tua rete e non sei sicuro 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 successive.

Prerequisiti

Se stai utilizzando Ubuntu versione 16.04 o 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à nell’aggiornamento della tua versione di Ubuntu.

Per seguire questo tutorial, avrai bisogno di:

  • Un server in esecuzione su Ubuntu, insieme a un utente non root con privilegi sudo. Per indicazioni su come configurarli, seleziona la tua distribuzione da questo elenco e segui la nostra Guida all’installazione iniziale del server.

  • UFW è installato per impostazione predefinita su Ubuntu. Se è stato disinstallato per qualche motivo, puoi installarlo con sudo apt install ufw.

Configura il firewall di Ubuntu con UFW

  1. Abilita IPv6
  2. Imposta le politiche predefinite
  3. Consenti connessioni SSH
  4. Abilita UFW
  5. Consenti qualsiasi altra connessione richiesta
  6. Nega connessioni
  7. Eliminazione delle regole del firewall
  8. Controllare lo stato e le regole di UFW
  9. Come disabilitare o ripristinare il firewall su Ubuntu

Passaggio 1 — Assicurarsi che IPv6 sia abilitato

Nelle versioni recenti di Ubuntu, IPv6 è abilitato per impostazione predefinita. In pratica, ciò significa che la maggior parte delle regole del firewall aggiunte al server includeranno sia una versione IPv4 che una IPv6, quest’ultima identificata dal v6 all’interno dell’output del comando di stato di UFW. Per assicurarsi che IPv6 sia abilitato, è possibile controllare il file di configurazione di UFW in /etc/default/ufw. Aprire questo file utilizzando nano o il proprio editor della riga di comando preferito:

  1. sudo nano /etc/default/ufw

Poi assicurarsi che il valore di IPV6 sia impostato su yes. Dovrebbe apparire così:

/etc/default/ufw excerpt
  1. IPV6=yes

Salvare e chiudere il file. Se si sta utilizzando nano, è possibile farlo digitando CTRL+X, poi Y e INVIO per confermare.

Quando UFW è abilitato in un passaggio successivo di questa guida, sarà configurato per scrivere regole del firewall sia IPv4 che IPv6.

Passaggio 2 — Configurazione delle Politiche Predefinite

Se stai iniziando con UFW, un buon primo passo è controllare le tue politiche predefinite del firewall. Queste regole controllano come gestire il traffico che non corrisponde esplicitamente ad altre regole.

Per impostazione predefinita, UFW è configurato per negare tutte le connessioni in entrata e consentire tutte le connessioni in uscita. Ciò significa che chiunque cerchi di raggiungere il tuo server non sarà in grado di connettersi, mentre qualsiasi applicazione all’interno del server sarà in grado di raggiungere il mondo esterno. Regole aggiuntive per consentire servizi e porte specifici sono incluse come eccezioni a questa politica generale.

Per assicurarti di poter seguire il resto di questo tutorial, imposterai ora le politiche predefinite UFW per il traffico in entrata e in uscita.

Per impostare la politica predefinita UFW in entrata su deny, esegui:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Per impostare la politica predefinita UFW in uscita su allow, esegui:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Questi comandi impostano le predefinizioni per negare le connessioni in entrata e consentire le connessioni in uscita. Questi predefiniti del firewall potrebbero essere sufficienti da soli per un computer personale, ma i server tipicamente devono rispondere a richieste in ingresso da utenti esterni. Vedremo questo nel prossimo passaggio.

Passaggio 3 — Consentire le Connessioni SSH

Se attivassi ora il firewall UFW, negherebbe tutte le connessioni in ingresso. Ciò significa che dovrai creare regole che consentano esplicitamente le connessioni in ingresso legittime — ad esempio connessioni SSH o HTTP — se desideri che il tuo server risponda a quei tipi di richieste. Se stai utilizzando un server cloud, probabilmente vorrai consentire le connessioni SSH in ingresso in modo da poter connetterti e gestire il tuo server.

Consentire il Profilo Applicazione OpenSSH UFW

All’installazione, la maggior parte delle applicazioni che dipendono dalle connessioni di rete registrerà un profilo applicazione all’interno di UFW, che consente agli utenti di consentire o negare rapidamente l’accesso esterno a un servizio. Puoi verificare quali profili sono attualmente registrati in UFW con:

  1. sudo ufw app list
Output
Available applications: OpenSSH

Per abilitare il profilo dell’applicazione OpenSSH, esegui:

  1. sudo ufw allow OpenSSH
Output
Rule 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 impostazione predefinita.

Consentire SSH per nome del servizio

Un altro modo per configurare UFW per consentire le connessioni SSH in ingresso è facendo riferimento al suo nome di servizio: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW sa quali porte e protocolli utilizza un servizio in base al file /etc/services.

Consentire SSH per numero di porta

In alternativa, è possibile scrivere la regola equivalente specificando la porta invece del profilo dell’applicazione o del nome del servizio. Ad esempio, questo comando funziona allo stesso modo degli esempi precedenti:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Se hai configurato il tuo demone SSH per utilizzare una porta diversa, dovrai specificare la porta appropriata. Ad esempio, se il tuo server SSH è in ascolto sulla porta 2222, puoi usare questo comando per consentire le connessioni su quella porta:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

Ora che il tuo firewall è configurato per consentire le connessioni SSH in ingresso, puoi abilitarlo.

Passaggio 4 — Abilitare UFW

Il tuo firewall dovrebbe ora essere configurato per consentire connessioni SSH. Per verificare quali regole sono state aggiunte finora, anche quando il firewall è ancora disabilitato, puoi usare:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

Dopo aver confermato di avere una regola per consentire le connessioni SSH in entrata, puoi abilitare il firewall con:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

Riceverai un avviso che indica che il comando potrebbe interrompere le connessioni SSH esistenti. Hai già configurato una regola del firewall che consente le connessioni SSH, quindi dovrebbe essere sicuro continuare. Rispondi al prompt 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 illustra come utilizzare UFW in modo più dettagliato, come consentire o negare diversi tipi di connessioni.

Passaggio 5 — Consenti altre connessioni

A questo punto, dovresti consentire tutte le altre connessioni a cui il tuo server deve rispondere. Le connessioni che dovresti consentire dipendono dalle tue esigenze specifiche. Sai già come scrivere regole che consentono connessioni basate su un profilo di applicazione, un nome di servizio o una porta; hai già fatto questo per SSH sulla porta 22. Puoi fare lo stesso anche per:

  • HTTP sulla porta 80, che è ciò che utilizzano i server web non crittografati, utilizzando sudo ufw allow http o sudo ufw allow 80.
  • HTTPS sulla porta 443, che è quella utilizzata dai server web criptati, usando sudo ufw allow https o sudo 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 dimenticare di controllare quali profili di applicazioni sono disponibili per il tuo server con sudo ufw app list.

Ci sono diversi altri modi per permettere le connessioni, oltre alla specifica di una porta o a un nome di servizio conosciuto. Vedremo alcuni di questi successivamente.

Intervallo 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 60006007, usa questi comandi:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Quando si specificano intervalli di porte con UFW, è necessario specificare il protocollo (tcp o udp) a cui le regole devono essere applicate. Non lo abbiamo menzionato prima perché non specificare il protocollo permette automaticamente entrambi i protocolli, il che va bene nella maggior parte dei casi.

Indirizzi IP Specifici

Quando si lavora con UFW, è possibile specificare anche gli indirizzi IP all’interno delle regole. Ad esempio, se si desidera consentire le connessioni da un indirizzo IP specifico, come un indirizzo IP lavorativo o domestico di 203.0.113.4, è necessario utilizzare il parametro from, fornendo quindi l’indirizzo IP che si desidera consentire:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

È inoltre possibile specificare una porta alla quale l’indirizzo IP è autorizzato a connettersi aggiungendo to any port seguito dal numero di porta. Ad esempio, se si desidera consentire a 203.0.113.4 di connettersi alla porta 22 (SSH), utilizzare questo comando:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Sottoreti

Se si desidera consentire una sottorete di indirizzi IP, è possibile farlo utilizzando la notazione CIDR per specificare una maschera di rete. Ad esempio, se si desidera consentire tutti gli indirizzi IP compresi tra 203.0.113.1 e 203.0.113.254, è possibile utilizzare questo comando:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

Allo stesso modo, è possibile specificare anche la porta di destinazione a cui la sottorete 203.0.113.0/24 è autorizzata a connettersi. Ancora una volta, useremo la porta 22 (SSH) come esempio:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

Connessioni a una specifica interfaccia di rete

Se vuoi creare una regola del firewall che si applichi solo a una specifica interfaccia di rete, puoi farlo specificando “consenti in su” seguito dal nome dell’interfaccia di rete.

Potresti voler cercare le tue interfacce di rete prima di continuare. Per farlo, utilizza questo comando:

  1. ip addr
Output Excerpt
2: 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 evidenziato indica i nomi delle interfacce di rete. Di solito sono nominati qualcosa come eth0 o enp3s2.

Quindi, se il tuo server ha un’interfaccia di rete pubblica chiamata eth0, potresti consentire il traffico HTTP (porta 80) ad essa con questo comando:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

Fare ciò consentirebbe al tuo server di ricevere richieste HTTP dall’internet pubblico.

Oppure, se vuoi che il tuo server del database MySQL (porta 3306) ascolti le connessioni sull’interfaccia di rete privata eth1, ad esempio, potresti usare questo comando:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

Questo consentirebbe ad altri server sulla tua rete privata di connettersi al tuo database MySQL.

Passaggio 6 — Negazione delle Connessioni

Se non hai cambiato la policy predefinita per le connessioni in ingresso, UFW è configurato per negare tutte le connessioni in ingresso. In generale, questo semplifica il processo di creazione di una politica del firewall sicura, richiedendo di creare regole che consentano esplicitamente specifiche porte e indirizzi IP.

Tuttavia, talvolta vorrai negare connessioni specifiche in base all’indirizzo IP di origine o alla subnet, forse perché sai che il tuo server sta subendo attacchi da lì. Inoltre, se desideri cambiare la tua politica predefinita in ingresso in consenti (cosa non consigliata), dovresti creare regole di negazione per qualsiasi servizio o indirizzo IP per cui non desideri consentire connessioni.

Per scrivere regole di negazione, puoi utilizzare i comandi precedentemente descritti, sostituendo consenti con negare.

Ad esempio, per negare le connessioni HTTP, potresti utilizzare questo comando:

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

O se desideri negare tutte le connessioni da 203.0.113.4 potresti utilizzare questo comando:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

In alcuni casi, potresti anche voler bloccare le connessioni in uscita dal server. Per negare a tutti gli utenti l’utilizzo di una porta sul server, come la porta 25 per il traffico SMTP, puoi utilizzare negare out seguito dal numero di porta:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Questo bloccherà tutto il traffico SMTP in uscita dal 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 quali regole eliminare: per numero di regola o per la sua denominazione leggibile dall’uomo (simile a come le regole sono state specificate quando sono state create).

Eliminazione di una regola UFW per numero

Per eliminare una regola UFW dal suo numero, prima è necessario ottenere un elenco numerato di tutte le regole del firewall. Il comando di stato di UFW ha un’opzione per visualizzare i numeri accanto a ciascuna regola, come mostrato qui:

  1. sudo ufw status numbered
Numbered Output:
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

Se decidi di voler eliminare la regola numero 2, quella che consente le connessioni sulla porta 80 (HTTP), puoi specificarla in un comando di eliminazione UFW come segue:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

Questo chiederà una conferma e poi eliminerà la regola 2, che consente le connessioni HTTP. Nota che se hai IPv6 abilitato, vorrai eliminare anche la corrispondente regola IPv6.

Eliminazione di una regola UFW per nome

Invece di utilizzare i numeri di regola, è anche possibile fare riferimento a una regola mediante la sua denominazione leggibile dall’uomo, che si basa sul tipo di regola (tipicamente allow o deny) e il nome del servizio o il numero di porta che era il bersaglio per questa regola, oppure il nome del profilo dell’applicazione nel caso in cui fosse stato utilizzato. Ad esempio, se si desidera eliminare una regola allow per un profilo di applicazione chiamato Apache Full che era stato precedentemente abilitato, è possibile utilizzare:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

Il comando delete funziona allo stesso modo per le regole che sono state create facendo riferimento a un servizio per il suo nome o porta. Ad esempio, se in precedenza hai impostato una regola per consentire le connessioni HTTP con sudo ufw allow http, ecco come potresti eliminare tale regola:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Poiché i nomi dei servizi sono intercambiabili con i numeri di porta quando si specificano le regole, potresti anche fare riferimento alla stessa regola come allow 80, invece di allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

Quando si eliminano le regole UFW per nome, vengono eliminate entrambe le regole IPv4 e IPv6 se esistono.

Passaggio 8 — Verifica dello Stato e delle Regole di UFW

In qualsiasi momento, puoi verificare lo stato di UFW con questo comando:

  1. sudo ufw status verbose

Se UFW è disabilitato, che è il valore predefinito, vedrai qualcosa del genere:

Output
Status: inactive

Se UFW è attivo, il che dovrebbe essere se hai seguito il Passaggio 3, l’output indicherà che è attivo e elencherà eventuali regole impostate. Ad esempio, se il firewall è impostato per consentire le connessioni SSH (porta 22) da qualsiasi parte, l’output potrebbe assomigliare a questo:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

Usa il comando status se vuoi controllare come UFW ha configurato il firewall.

Passo 9 — Disabilitare o Reimpostare il Firewall

Se decidi di non voler utilizzare il firewall UFW, puoi disattivarlo con questo comando:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Eventuali regole che hai creato con UFW non saranno più attive. Puoi sempre eseguire sudo ufw enable se hai bisogno di attivarlo in seguito.

Se hai già configurato delle regole UFW ma decidi di voler ricominciare da capo, puoi usare il comando di reset:

  1. sudo ufw reset
Output
Resetting 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 disabiliterà UFW e eliminerà tutte le regole precedentemente definite. Questo ti darà un nuovo inizio con UFW. Tieni presente che le politiche predefinite non cambieranno alle loro impostazioni originali, se le hai modificate in qualche momento.

Implementa le tue applicazioni frontend da GitHub utilizzando la Piattaforma App di DigitalOcean. Lascia che DigitalOcean si occupi di scalare la tua app.

Conclusione

Il tuo firewall è ora configurato per consentire (almeno) le connessioni SSH. Assicurati di consentire qualsiasi altra connessione in ingresso che il tuo server richiede, limitando al contempo qualsiasi connessione non necessaria, in modo che il tuo server sia funzionale e sicuro.

Per apprendere ulteriori configurazioni UFW comuni, consulta il tutorial UFW Essentials: Regole e Comandi Comuni del Firewall.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04