Come configurare un firewall con UFW su Debian 11

Introduzione

UFW, o Uncomplicated Firewall, è un’interfaccia semplificata per la gestione del firewall che nasconde la complessità delle tecnologie di filtraggio dei pacchetti di livello inferiore come iptables e nftables. Se stai cercando di iniziare a proteggere la tua rete e non sei sicuro di quale strumento utilizzare, UFW potrebbe essere la scelta giusta per te.

In questo tutorial ti mostrerò come configurare un firewall con UFW su Debian 11.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di un server Debian 11 con un utente sudo non-root, che puoi configurare seguendo il Passaggio 1 attraverso 3 nel tutorial di Configurazione Iniziale del Server con Debian 11.

Passaggio 1 – Installazione di UFW

Debian non installa UFW per impostazione predefinita. Se hai seguito l’intero tutorial di configurazione iniziale del server, avrai installato ed abilitato UFW. In caso contrario, installalo ora usando apt:

  1. sudo apt install ufw

Configurerai UFW ed lo abiliterai nei passaggi seguenti.

Passaggio 2 — Utilizzo di IPv6 con UFW (Opzionale)

Questo tutorial è scritto considerando IPv4 ma funzionerà anche per IPv6 se abilitato. Se il tuo server Debian ha IPv6 abilitato, assicurati che UFW sia configurato per supportare IPv6. Ciò garantirà che UFW gestisca le regole del firewall sia per IPv6 che per IPv4. Per configurare ciò, apri il file di configurazione di UFW /etc/default/ufw con nano o il tuo editor preferito:

  1. sudo nano /etc/default/ufw

Trova IPV6 nel file e assicurati che il valore sia yes:

/etc/default/ufw excerpt
IPV6=yes

Salva e chiudi il file. Se stai usando nano, premi CTRL+X, poi Y, quindi INVIO per salvare ed uscire dal file.

Ora quando UFW è abilitato, sarà configurato per scrivere sia le regole del firewall IPv4 che IPv6. Prima di abilitare UFW, tuttavia, assicurati che il tuo firewall sia configurato per consentirti di connetterti via SSH. Inizia impostando le policy predefinite.

Passaggio 3 — Impostazione delle Politiche Predefinite

Se stai iniziando appena con il tuo firewall, le prime regole da definire sono le tue politiche predefinite. Queste regole gestiscono il traffico che non corrisponde esplicitamente ad altre regole. Per impostazione predefinita, UFW è impostato per negare tutte le connessioni in ingresso 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.

Ripristina le regole UFW ai valori predefiniti in modo da poter essere sicuro di poter seguire questo tutorial. Per impostare i valori predefiniti utilizzati da UFW, utilizza questi comandi:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

Riceverai un output come segue:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Questi comandi impostano le predefinite per negare le connessioni in ingresso e consentire quelle in uscita. Queste predefinite del firewall potrebbero essere sufficienti da sole per un computer personale, ma i server di solito devono rispondere a richieste in ingresso da utenti esterni. Inizierai questo processo nel prossimo passaggio.

Passaggio 4 — Consenti Connessioni SSH

Non è possibile attivare il firewall UFW al momento, poiché ciò comporterebbe il rifiuto di tutte le connessioni in ingresso, compresi i tentativi di accesso al server. Ciò significa che sarà necessario creare regole che consentano esplicitamente le connessioni in ingresso legittime, come ad esempio le connessioni SSH o HTTP, se si desidera che il server risponda a quei tipi di richieste. Se si sta utilizzando un server cloud, probabilmente si vorrà consentire le connessioni SSH in ingresso in modo da poter connettersi e gestire il proprio server.

Per configurare il server in modo da consentire le connessioni SSH in ingresso, utilizzare questo comando:

  1. sudo ufw allow ssh

Questo creerà delle regole del firewall che consentiranno tutte le connessioni sulla porta 22, che è la porta su cui il demone SSH è in ascolto per impostazione predefinita. UFW sa quale porta è associata a allow ssh perché è elencata come servizio nel file /etc/services.

Tuttavia, è possibile scrivere la regola equivalente specificando la porta anziché il nome del servizio. Ad esempio, questo comando produce lo stesso risultato di quello precedente:

  1. sudo ufw allow 22

Se hai configurato il 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 utilizzare lo stesso comando ma sostituire 22 con 2222.

Ora che il firewall è configurato per consentire le connessioni SSH in ingresso, è possibile attivarlo.

Passaggio 5 — Attivazione di UFW

Per abilitare UFW, utilizzare questo comando:

  1. sudo ufw enable

Riceverai un avviso che dice 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. Per vedere le regole che hai impostato, esegui questo comando:

  1. sudo ufw status verbose

Il resto di questo tutorial illustra come utilizzare UFW in modo più dettagliato, inclusa l’autorizzazione e il rifiuto di diversi tipi di connessioni.

Passaggio 6 — Consenti Altre Connessioni

A questo punto, dovresti consentire tutte le altre connessioni di cui il tuo server ha bisogno per funzionare correttamente. Le connessioni che dovresti consentire dipendono dalle tue esigenze specifiche. Sai già come scrivere regole che consentono connessioni basate su un nome servizio o porta; hai fatto questo per SSH sulla porta 22.

Puoi fare lo stesso per HTTP sulla porta 80, che è ciò che utilizzano i server web non criptati. Per consentire questo tipo di traffico, scriveresti:

  1. sudo ufw allow http

Puoi anche fare lo stesso per HTTPS sulla porta 443, che è ciò che utilizzano i server web criptati. Per consentire questo tipo di traffico, scriveresti:

  1. sudo ufw allow https

In entrambi i casi, specificare le porte funzionerebbe anche, con HTTP essendo 80 e HTTPS essendo 443. Ad esempio:

  1. sudo ufw allow 80

Ci sono altri modi per consentire connessioni, tuttavia, oltre a specificare una porta o servizio conosciuto. Questo viene discusso di seguito.

Intervalli di porte specifici

Puoi specificare intervalli di porte con UFW. Ad esempio, alcune applicazioni utilizzano più porte invece di una singola porta.

Per esempio, per consentire le connessioni X11, che utilizzano le porte 60006007, utilizza 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 dovrebbero essere applicate. Questo non è stato menzionato prima perché non specificare il protocollo consente automaticamente entrambi i protocolli, il che va bene nella maggior parte dei casi.

Indirizzi IP specifici

Quando si lavora con UFW, è anche possibile specificare gli indirizzi IP. Ad esempio, se si desidera consentire le connessioni da un determinato indirizzo IP, come un indirizzo IP di lavoro o di casa 203.0.113.4, è necessario specificare from e quindi l’indirizzo IP:

  1. sudo ufw allow from 203.0.113.4

È inoltre possibile specificare una porta specifica a cui l’indirizzo IP è autorizzato a connettersi aggiungendo a qualsiasi porta 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

Sottoreti

Se desideri consentire una sottorete di indirizzi IP, puoi farlo utilizzando la notazione CIDR per specificare una netmask. Ad esempio, se desideri consentire tutti gli indirizzi IP compresi tra 203.0.113.1 e 203.0.113.254, puoi utilizzare questo comando:

  1. sudo ufw allow from 203.0.113.0/24

Allo stesso modo, puoi specificare anche la porta di destinazione a cui la sottorete 203.0.113.0/24 è autorizzata a connettersi. Di nuovo, utilizzando la porta 22 (SSH) come esempio:

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

Connessioni a una Interfaccia di Rete Specifica

Se desideri creare una regola del firewall che si applichi solo a una specifica interfaccia di rete, puoi farlo specificando allow in on, seguito dal nome dell’interfaccia di rete.

Sarà utile cercare le tue interfacce di rete prima di continuare. Per farlo, utilizza questo comando:

  1. ip addr
Output
. . . 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 hanno nomi come eth0 o enp3s2.

Se il tuo server ha un’interfaccia di rete pubblica chiamata eth0, ad esempio, potresti consentire il traffico HTTP ad essa con questo comando:

  1. sudo ufw allow in on eth0 to any port 80

Farlo consentirebbe al tuo server di ricevere richieste HTTP dall’internet pubblico.

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

  1. sudo ufw allow in on eth1 to any port 3306

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

Passaggio 7 — Negazione delle Connessioni

Se non hai cambiato la politica 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.

A volte vorrai negare connessioni specifiche in base all’indirizzo IP di origine o alla subnet, tuttavia, forse perché sai che il tuo server sta subendo un attacco da lì. Inoltre, se desideri modificare la tua politica predefinita in ingresso in allow (cosa non consigliata), dovresti creare regole di deny per eventuali servizi o indirizzi IP per i quali non desideri consentire connessioni.

Per scrivere regole deny, puoi utilizzare i comandi descritti sopra, sostituendo allow con deny.

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

  1. sudo ufw deny http

O se vuoi negare tutte le connessioni da 203.0.113.4 potresti usare questo comando:

  1. sudo ufw deny from 203.0.113.4

Ora, puoi imparare come implementare le regole di eliminazione.

Passaggio 8 — Eliminazione delle regole

Sapere come eliminare le regole del firewall è altrettanto importante quanto sapere come crearle. Ci sono due modi per specificare quali regole eliminare: per numero di regola o per la regola stessa. Questo è simile a come sono state specificate le regole quando sono state create.

Per Numero di Regola

Se stai utilizzando il numero di regola per eliminare le regole del firewall, la prima cosa da fare è ottenere un elenco delle tue regole del firewall. Il comando UFW status ha l’opzione numbered, che mostra i numeri accanto a ciascuna regola:

  1. sudo ufw status 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 2, che consente le connessioni HTTP sulla porta 80, puoi specificarlo nel seguente comando UFW delete:

  1. sudo ufw delete 2

Questo mostrerà un prompt di conferma, a cui puoi rispondere con s/n. Digitando s eliminerai quindi la regola 2. Nota che se hai IPv6 abilitato, vorrai eliminare anche la corrispondente regola IPv6.

Per Regola Effettiva

L’alternativa ai numeri di regola è specificare effettivamente la regola da eliminare. Ad esempio, se vuoi rimuovere la regola allow http, potresti scriverla così:

  1. sudo ufw delete allow http

Puoi anche specificare la regola con allow 80 invece del nome del servizio:

  1. sudo ufw delete allow 80

Questo metodo eliminerà sia le regole IPv4 che IPv6, se esistono.

Passaggio 9 — 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 è l’impostazione predefinita, l’output sarà questo:

Output
Status: inactive

Se UFW è attivo, come dovrebbe essere se hai seguito il Passaggio 3, l’output dirà che è attivo e elencherà eventuali regole che hai impostato. Ad esempio, se il firewall è impostato per consentire le connessioni SSH (porta 22) da qualsiasi luogo, l’output potrebbe includere qualcosa del genere:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

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

Passaggio 10 — Disabilitazione o Ripristino di UFW (opzionale)

Se decidi che non vuoi utilizzare UFW, puoi disabilitarlo con questo comando:

  1. sudo ufw disable

Qualsiasi regola che hai creato con UFW non sarà più attiva. Puoi sempre eseguire sudo ufw enable se hai bisogno di attivarla in seguito.

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

  1. sudo ufw reset

Questo disabiliterà UFW ed eliminerà qualsiasi regola che hai precedentemente definito. Tieni presente che le politiche predefinite non torneranno alle loro impostazioni originali se le hai modificate in qualsiasi momento. Questo ti darà un nuovo inizio con UFW.

Conclusione

Il tuo firewall è ora configurato per consentire (almeno) connessioni SSH. Assicurati di consentire qualsiasi altra connessione in ingresso di cui il tuo server ha bisogno, limitando anche le connessioni non necessarie. Ciò garantirà che il tuo server sia sia funzionale che sicuro.

Per saperne di più sulle configurazioni UFW comuni, consulta questo tutorial su UFW Essentials: Common Firewall Rules and Commands.

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