Come configurare un firewall con UFW su Ubuntu

Introduzione

UFW, o Uncomplicated Firewall, è un’interfaccia per iptables progettata per semplificare il processo di configurazione di un firewall. Mentre iptables è uno strumento solido e flessibile, può essere difficile per i principianti imparare come utilizzarlo 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.

In questo tutorial ti mostreremo 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 eseguire l’aggiornamento a una versione più recente poiché Ubuntu non fornisce più supporto per queste versioni. Questa raccolta di guide ti aiuterà nell’aggiornare la tua versione di Ubuntu.

Per seguire questo tutorial, avrai bisogno di:

  • Un server in esecuzione Ubuntu, insieme a un utente non root con privilegi sudo. Per una guida su come configurare questi, seleziona la tua distribuzione da questo elenco e segui la nostra Guida all’Configurazione Iniziale del Server.

  • UFW è installato per default 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. Abilitazione di UFW
  5. Consenti eventuali altre connessioni necessarie
  6. Negazione delle connessioni
  7. Eliminazione delle regole del firewall
  8. Verifica dello stato e delle regole di UFW
  9. Come disabilitare o ripristinare il firewall su Ubuntu

Passaggio 1 — Verifica 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 includerà sia una versione IPv4 che una versione IPv6, quest’ultima identificata dal v6 nell’output del comando di stato di UFW. Per verificare che IPv6 sia abilitato, è possibile controllare il file di configurazione di UFW in /etc/default/ufw. Apri questo file utilizzando nano o il tuo editor della riga di comando preferito:

  1. sudo nano /etc/default/ufw

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

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

Salva e chiudi il file. Se stai utilizzando nano, puoi farlo digitando CTRL+X, poi Y e INVIO per confermare.

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

Passaggio 2 — Configurazione delle Politiche Predefinite

Se stai iniziando ad utilizzare 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 riuscirebbe a connettersi, mentre qualsiasi applicazione all’interno del server sarebbe in grado di raggiungere il mondo esterno. Regole aggiuntive per consentire servizi e porte specifiche sono incluse come eccezioni a questa politica generale.

Per assicurarti di poter seguire il resto di questo tutorial, ora imposterai 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 da soli potrebbero essere sufficienti per un computer personale, ma i server tipicamente hanno bisogno di rispondere alle richieste in entrata da utenti esterni. Vedremo questo nel prossimo passo.

Passaggio 3 — Consenso Connessioni SSH

Se attivassi ora il firewall UFW, verrebbe negato l’accesso a tutte le connessioni in entrata. Ciò significa che dovrai creare regole che consentano esplicitamente le connessioni in arrivo legittime — come quelle SSH o HTTP — se desideri che il server risponda a quei tipi di richieste. Se stai utilizzando un server cloud, probabilmente vorrai consentire le connessioni SSH in entrata per 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 registreranno 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 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 servizio

Un altro modo per configurare UFW per consentire le connessioni SSH in ingresso è facendo riferimento al nome del 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 connessioni su quella porta:

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

Ora che il tuo firewall è configurato per consentire 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 utilizzare:

  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 ingresso, 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 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. Esegui il comando sudo ufw status verbose per vedere le regole impostate. Il resto di questo tutorial copre come utilizzare UFW in modo più dettagliato, come permettere o negare diversi tipi di connessioni.

Passaggio 5 — Consentire 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 dell’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 è quella utilizzata dai server web non criptati, utilizzando sudo ufw allow http o sudo ufw allow 80
  • HTTPS sulla porta 443, che è ciò che utilizzano i server web criptati, utilizzando sudo ufw allow https o sudo ufw allow 443
  • Apache con sia HTTP che HTTPS, utilizzando sudo ufw allow ‘Apache Full’
  • Nginx con sia HTTP che HTTPS, utilizzando sudo ufw allow ‘Nginx Full’

Non dimenticare di verificare quali profili di applicazione sono disponibili per il tuo server con sudo ufw app list.

Esistono diversi altri modi per consentire connessioni, oltre a specificare una porta o un nome di servizio noto. Vedremo alcuni di questi prossimamente.

Intervallo di Porte Specifico

Puoi specificare intervalli di porte con UFW. 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 si applicano le regole. Non lo abbiamo 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 all’interno delle regole. Ad esempio, se si desidera consentire le connessioni da un indirizzo IP specifico, come un indirizzo IP di lavoro o di casa 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 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
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. Di nuovo, 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 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.

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 hanno nomi come eth0 o enp3s2.

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

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

In questo modo il tuo server potrebbe ricevere richieste HTTP dall’Internet pubblico.

Oppure, se desideri che il tuo server di database MySQL (porta 3306) ascolti le connessioni sull’interfaccia di rete privata eth1, ad esempio, potresti utilizzare 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 modificato la policy predefinita per le connessioni in ingresso, UFW è configurato per negare tutte le connessioni in ingresso. Generalmente, ciò semplifica il processo di creazione di una politica del firewall sicura richiedendoti di creare regole che consentano esplicitamente specifiche porte e indirizzi IP.

Tuttavia, a volte vorrai negare connessioni specifiche in base all’indirizzo IP di origine o alla subnet, forse perché sai che il tuo server sta subendo un attacco da lì. Inoltre, se vuoi cambiare la tua politica predefinita in ingresso in consentire (che non è consigliato), dovresti creare regole di negazione per tutti i servizi o gli indirizzi IP per i quali non vuoi consentire connessioni.

Per scrivere regole di negazione, puoi utilizzare i comandi precedentemente descritti, sostituendo consentire 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 vuoi 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 di utilizzare una porta sul server, come la porta 25 per il traffico SMTP, puoi utilizzare negare uscita 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).

Eliminare una regola UFW per numero

Per eliminare una regola UFW per il 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 connessioni alla porta 80 (HTTP), puoi specificarla in un comando di eliminazione di UFW in questo modo:

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

Questo richiederà una conferma quindi eliminerà la regola 2, che consente connessioni HTTP. Nota che se hai IPv6 abilitato, vorresti eliminare anche la corrispondente regola IPv6.

Eliminare una regola UFW per nome

Invece di utilizzare i numeri di regola, è possibile fare riferimento a una regola attraverso la sua denominazione leggibile dall’utente, 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 di questa regola, o il nome del profilo dell’applicazione nel caso in cui sia stato utilizzato. Ad esempio, se si desidera eliminare una regola allow per un profilo di applicazione chiamato Apache Full che è 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 hai precedentemente impostato una regola per consentire le connessioni HTTP con sudo ufw allow http, ecco come potresti eliminare questa 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 sia le regole IPv4 che 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, il che avviene per impostazione predefinita, vedrai qualcosa del genere:

Output
Status: inactive

Se UFW è attivo, il che dovrebbe essere se hai seguito il Passaggio 3, l’output dirà 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.

Passaggio 9 — Disattivare 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 utilizzare 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 cancellerà tutte le regole precedentemente definite. Questo ti darà un nuovo inizio con UFW. Tieni presente che le policy predefinite non cambieranno alle impostazioni originali se le hai modificate in qualche momento.

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

Conclusioni

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

Per apprendere di più sulle configurazioni comuni UFW, dai un’occhiata al tutorial UFW Essentials: Regole e Comandi Firewall Comuni.

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