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 a livello inferiore come iptables e nftables. 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.

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

Prerequisiti

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

Passo 1 – Installazione di UFW

Debian non installa UFW di default. Se hai seguito l’intero tutorial di Configurazione Iniziale del Server, avrai installato ed abilitato UFW. In caso contrario, installalo ora utilizzando apt:

  1. sudo apt install ufw

Imposterai UFW ed lo abiliterai nei seguenti passaggi.

Passo 2 — Utilizzo di IPv6 con UFW (Opzionale)

Questo tutorial è scritto con IPv4 in mente, 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 questo, 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 ed assicurati che il valore sia yes:

/etc/default/ufw excerpt
IPV6=yes

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

Ora, quando UFW è abilitato, sarà configurato per scrivere regole del firewall sia per IPv4 che per 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 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 entrata e consentire tutte le connessioni in uscita. Ciò significa che chiunque cerchi di raggiungere il tuo server non riuscirebbe a connettersi, mentre qualsiasi applicazione all’interno del server sarebbe in grado di raggiungere il mondo esterno.

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

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

Riceverai un output simile al seguente:

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 impostazioni predefinite per negare le connessioni in entrata e consentire le connessioni in uscita. Queste impostazioni predefinite del firewall potrebbero essere sufficienti da sole per un computer personale, ma i server tipicamente hanno bisogno di rispondere alle richieste in ingresso da parte degli utenti esterni. Inizierai questo processo nel prossimo passaggio.

Passaggio 4 — Consenso alle Connessioni SSH

Non puoi ancora abilitare il firewall UFW, poiché questo comporterebbe il rifiuto di tutte le connessioni in ingresso, compresi i tentativi di accesso al tuo server. Ciò significa che dovrai creare regole che consentano esplicitamente le connessioni in ingresso legittime, come ad esempio le 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.

Per configurare il tuo server per consentire le connessioni SSH in ingresso, utilizza questo comando:

  1. sudo ufw allow ssh

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

Tuttavia, puoi effettivamente 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 tuo firewall è configurato per consentire le connessioni SSH in ingresso, puoi abilitarlo.

Passaggio 5 — Abilitazione di UFW

Per abilitare UFW, utilizza 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 copre in dettaglio come utilizzare UFW, incluso consentire e negare diversi tipi di connessioni.

Passaggio 6 — Consenti Altre Connessioni

A questo punto, dovresti consentire tutte le altre connessioni che 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 di servizio o porta; hai fatto questo per SSH sulla porta 22.

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

  1. sudo ufw allow http

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

  1. sudo ufw allow https

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

  1. sudo ufw allow 80

Esistono anche altri modi per consentire connessioni, tuttavia, oltre a specificare una porta o servizio conosciuto. Questo è discusso nel prossimo paragrafo.

Intervallo di porte specifico

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 devono 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, è possibile specificare anche gli indirizzi IP. Ad esempio, se si desidera consentire connessioni da un indirizzo IP specifico, come un indirizzo IP lavorativo o domestico di 203.0.113.4, è necessario specificare from e quindi l’indirizzo IP:

  1. sudo ufw allow from 203.0.113.4

È anche possibile specificare una porta specifica a cui l’indirizzo IP può 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

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 un’interfaccia di rete specifica

Se desideri creare una regola del firewall che si applica 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 desideri un server di database MySQL (porta 3306) per ascoltare le connessioni sull’interfaccia di rete privata eth1, potresti utilizzare 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 modificato 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, richiedendoti di creare regole che consentano esplicitamente porte e indirizzi IP specifici.

A volte vorrai negare connessioni specifiche basate sull’indirizzo IP di origine o sulla subnet, tuttavia, forse perché sai che il tuo server sta subendo attacchi da lì. Inoltre, se desideri modificare la tua politica di ingresso predefinita in allow (cosa non raccomandata), dovresti creare regole di deny per qualsiasi servizio o indirizzo IP per il quale non desideri consentire connessioni.

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

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

  1. sudo ufw deny http

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

Ora, puoi imparare come implementare le regole di eliminazione.

Passo 8 — Eliminare le Regole

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

Per Numero di Regola

Se stai usando il numero di regola per eliminare le regole del firewall, la prima cosa che vorrai fare è ottenere un elenco delle tue regole del firewall. Il comando UFW status ha l’opzione numbered, che visualizza 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 potrai rispondere con y/n. Digitando y eliminerai quindi la regola 2. Nota che se hai IPv6 abilitato, vorrai eliminare anche la regola IPv6 corrispondente.

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 verificare come UFW ha configurato il firewall.

Passaggio 10 — Disabilitare o Reimpostare UFW (opzionale)

Se decidi di non voler 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 devi attivarla in seguito.

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

  1. sudo ufw reset

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

Conclusioni

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

Per saperne di più sulle configurazioni comuni di UFW, consulta questo tutorial su UFW Essentials: Regole e Comandi Comuni del Firewall.

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