Essenziali UFW: Regole e comandi comuni del firewall

Introduzione

UFW (uncomplicated firewall) è uno strumento di configurazione del firewall che funziona sopra iptables, incluso per impostazione predefinita nelle distribuzioni di Ubuntu. Fornisce un’interfaccia semplificata per configurare casi d’uso comuni del firewall tramite la riga di comando.

Questa guida in formato foglio di trucchi fornisce un riferimento rapido ai casi d’uso e ai comandi comuni di UFW, inclusi esempi su come consentire e bloccare servizi per porta, interfaccia di rete e indirizzo IP di origine.

Come Utilizzare Questa Guida

  • Questa guida è in formato foglio di trucchi con frammenti di comando autocontenuti.
  • Salta a qualsiasi sezione rilevante per il compito che stai cercando di completare.
  • Quando vedi del testo evidenziato nei comandi di questa guida, tieni presente che questo testo dovrebbe fare riferimento agli indirizzi IP della tua rete.

Ricorda che puoi controllare il tuo attuale set di regole UFW con sudo ufw status o sudo ufw status verbose.

Implementa le tue applicazioni frontend da GitHub utilizzando la Piattaforma App di DigitalOcean. Lascia che DigitalOcean si concentri sulla scalabilità della tua app.

Verifica lo Stato di UFW

Per verificare se ufw è abilitato, esegui:

  1. sudo ufw status
Output
Status: inactive

L’output indicherà se il tuo firewall è attivo o meno.

Abilita UFW

Se ricevi un messaggio Stato: inattivo quando esegui ufw status, significa che il firewall non è ancora abilitato nel sistema. Sarà necessario eseguire un comando per abilitarlo.

Per impostazione predefinita, quando è abilitato UFW bloccherà l’accesso esterno a tutte le porte su un server. In pratica, ciò significa che se sei connesso a un server tramite SSH e abiliti ufw prima di consentire l’accesso tramite la porta SSH, verrai disconnesso. Assicurati di seguire la sezione su come abilitare l’accesso SSH di questa guida prima di abilitare il firewall se è il tuo caso.

Per abilitare UFW sul tuo sistema, esegui:

  1. sudo ufw enable

Vedrai un output come questo:

Output
Firewall is active and enabled on system startup

Per vedere cosa è attualmente bloccato o consentito, puoi utilizzare il parametro verbose quando esegui ufw status, come segue:

  1. sudo ufw status
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip

Disabilita UFW

Se per qualche motivo è necessario disabilitare UFW, puoi farlo con il seguente comando:

  1. sudo ufw disable

Sii consapevole che questo comando disabiliterà completamente il servizio firewall sul tuo sistema.

Bloccare un indirizzo IP

Per bloccare tutte le connessioni di rete che provengono da un indirizzo IP specifico, eseguire il seguente comando, sostituendo l’indirizzo IP evidenziato con l’indirizzo IP che si desidera bloccare:

  1. sudo ufw deny from 203.0.113.100
Output
Rule added

In questo esempio, from 203.0.113.100 specifica un indirizzo IP sorgente di “203.0.113.100”.

Se si esegue ora sudo ufw status, si vedrà l’indirizzo IP specificato elencato come negato:

Output
Status: active To Action From -- ------ ---- Anywhere DENY 203.0.113.100

Tutte le connessioni, in entrata o in uscita, sono bloccate per l’indirizzo IP specificato.

Bloccare una sotto rete

Se è necessario bloccare una intera sotto rete, è possibile utilizzare l’indirizzo della sotto rete come parametro from sul comando ufw deny. Questo blocca tutti gli indirizzi IP nella sotto rete di esempio 203.0.113.0/24:

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

Bloccare le connessioni in ingresso a un’interfaccia di rete

Per bloccare le connessioni in ingresso da un indirizzo IP specifico a una specifica interfaccia di rete, esegui il seguente comando, sostituendo l’indirizzo IP evidenziato con l’indirizzo IP che desideri bloccare:

  1. sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

Il parametro in indica a ufw di applicare la regola solo per le connessioni in ingresso, mentre il parametro on eth0 specifica che la regola si applica solo all’interfaccia eth0. Questo può essere utile se hai un sistema con diverse interfacce di rete (incluse quelle virtuali) e devi bloccare l’accesso esterno a alcune di queste interfacce, ma non a tutte.

Consenti un Indirizzo IP

Per consentire tutte le connessioni di rete che provengono da un indirizzo IP specifico, esegui il seguente comando, sostituendo l’indirizzo IP evidenziato con l’indirizzo IP che desideri consentire l’accesso:

  1. sudo ufw allow from 203.0.113.101
Output
Rule added

Se esegui ora il comando sudo ufw status, vedrai un output simile a questo, che mostra la parola ALLOW accanto all’indirizzo IP appena aggiunto.

Output
Status: active To Action From -- ------ ---- ... Anywhere ALLOW 203.0.113.101

Puoi anche consentire le connessioni da un’intera subnet fornendo la maschera di sottorete corrispondente per un host, come 203.0.113.0/24.

Consenti Connessioni in Ingresso a un’Interfaccia di Rete

Per consentire connessioni in ingresso da un indirizzo IP specifico a una specifica interfaccia di rete, eseguire il seguente comando, sostituendo l’indirizzo IP evidenziato con l’indirizzo IP desiderato:

  1. sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

Il parametro in indica a ufw di applicare la regola solo per le connessioni in ingresso, mentre il parametro on eth0 specifica che la regola si applica solo all’interfaccia eth0.

Se si esegue ora il comando sudo ufw status, si otterrà un output simile a questo:

Output
Status: active To Action From -- ------ ---- ... Anywhere on eth0 ALLOW 203.0.113.102

Eliminare la Regola UFW

Per eliminare una regola precedentemente configurata in UFW, utilizzare il comando ufw delete seguito dalla regola (allow o deny) e dalla specifica del target. Ad esempio, il seguente esempio eliminerà una regola precedentemente impostata per consentire tutte le connessioni da un indirizzo IP di 203.0.113.101:

  1. sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

Un altro modo per specificare quale regola si desidera eliminare è fornire l’ID della regola. Queste informazioni possono essere ottenute con il seguente comando:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] Anywhere DENY IN 203.0.113.100 [ 2] Anywhere on eth0 ALLOW IN 203.0.113.102

Dall’output, è possibile vedere che ci sono due regole attive. La prima regola, con i valori evidenziati, nega tutte le connessioni provenienti dall’indirizzo IP 203.0.113.100. La seconda regola consente le connessioni sull’interfaccia eth0 provenienti dall’indirizzo IP 203.0.113.102.

Poiché per impostazione predefinita UFW blocca già tutto l’accesso esterno a meno che non venga esplicitamente consentito, la prima regola è ridondante, quindi puoi rimuoverla. Per eliminare una regola dal suo ID, esegui:

  1. sudo ufw delete 1

Ti verrà chiesto di confermare l’operazione e di assicurarti che l’ID che stai fornendo si riferisca alla regola corretta che desideri eliminare.

Output
Deleting: deny from 203.0.113.100 Proceed with operation (y|n)? y Rule deleted

Se elenchi nuovamente le tue regole con sudo ufw status, vedrai che la regola è stata rimossa.

Elenco dei Profili di Applicazione Disponibili

All’installazione, le applicazioni che dipendono dalle comunicazioni di rete di solito configurano un profilo UFW che puoi usare per consentire la connessione da indirizzi esterni. Questo è spesso lo stesso di eseguire ufw allow from, con il vantaggio di fornire una scorciatoia che astrae i numeri di porta specifici utilizzati da un servizio e fornisce una nomenclatura user-friendly per i servizi referenziati.

Per elencare quali profili sono attualmente disponibili, esegui il seguente comando:

  1. sudo ufw app list

Se hai installato un servizio come un server web o altro software dipendente dalla rete e un profilo non è stato reso disponibile all’interno di UFW, assicurati prima che il servizio sia abilitato. Per i server remoti, di solito avrai OpenSSH prontamente disponibile:

Output
Available applications: OpenSSH

Abilita Profilo Applicazione

Per abilitare un profilo di applicazione UFW, esegui ufw allow seguito dal nome del profilo di applicazione che desideri abilitare, che puoi ottenere con un comando sudo ufw app list. Nell’esempio seguente, stiamo abilitando il profilo OpenSSH, che consentirà tutte le connessioni SSH in ingresso sulla porta SSH predefinita.

  1. sudo ufw allow “OpenSSH”
Output
Rule added Rule added (v6)

Ricorda di citare i nomi dei profili che consistono in più parole, come Nginx HTTPS.

Disabilita Profilo Applicazione

Per disabilitare un profilo di applicazione che avevi precedentemente configurato all’interno di UFW, dovrai rimuovere la regola corrispondente. Ad esempio, considera l’output seguente da sudo ufw status:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Questo output indica che il profilo di applicazione Nginx Full è attualmente abilitato, consentendo qualsiasi connessione al server web sia tramite HTTP che tramite HTTPS. Se desideri consentire solo le richieste HTTPS da e per il tuo server web, dovresti prima abilitare la regola più restrittiva, che in questo caso sarebbe Nginx HTTPS, e poi disabilitare la regola Nginx Full attualmente attiva:

  1. sudo ufw allow "Nginx HTTPS"
  2. sudo ufw delete allow "Nginx Full"

Ricorda che puoi elencare tutti i profili di applicazione disponibili con sudo ufw app list.

Consenti SSH

Quando lavori con server remoti, vorrai assicurarti che la porta SSH sia aperta alle connessioni in modo che tu possa accedere al server in remoto.

Il seguente comando abiliterà il profilo dell’applicazione OpenSSH UFW e consentirà tutte le connessioni alla porta SSH predefinita sul server:

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

Sebbene meno user-friendly, un’alternativa sintassi è specificare il numero di porta esatto del servizio SSH, che di solito è impostato su 22 per impostazione predefinita:

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

Consenti SSH in entrata da un indirizzo IP o subnet specifico

Per consentire connessioni in ingresso da un indirizzo IP o subnet specifico, includerai una direttiva from per definire la sorgente della connessione. Ciò richiederà anche di specificare l’indirizzo di destinazione con un parametro to. Per bloccare questa regola solo per SSH, limiterai il proto (protocollo) a tcp e quindi utilizzerai il parametro port e lo imposti su 22, la porta predefinita di SSH.

Il seguente comando permetterà solo connessioni SSH provenienti dall’indirizzo IP 203.0.113.103:

  1. sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added

Puoi anche utilizzare un indirizzo di subnet come parametro from per consentire connessioni SSH in ingresso da un’intera rete:

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

Consenti l’ingresso di Rsync da un indirizzo IP o da una subnet specifica

Il programma Rsync, che utilizza la porta 873, può essere utilizzato per trasferire file da un computer a un altro.

Per consentire connessioni rsync in ingresso da un indirizzo IP o da una subnet specifica, utilizzare il parametro from per specificare l’indirizzo IP di origine e il parametro port per impostare la porta di destinazione 873.
Il seguente comando permetterà solo connessioni Rsync provenienti dall’indirizzo IP 203.0.113.103:

  1. sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added

Per consentire all’intera subnet 203.0.113.0/24 di poter effettuare rsync verso il tuo server, esegui:

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

Consenti HTTP / HTTPS di Nginx

All’installazione, il server web Nginx imposta alcuni profili UFW diversi all’interno del server. Una volta installato Nginx e abilitato come servizio, esegui il seguente comando per identificare quali profili sono disponibili:

  1. sudo ufw app list | grep Nginx
Output
Nginx Full Nginx HTTP Nginx HTTPS

Per abilitare sia il traffico HTTP che HTTPS, scegli Nginx Full. Altrimenti, scegli Nginx HTTP per consentire solo HTTP oppure Nginx HTTPS per consentire solo HTTPS.

Il seguente comando permetterà sia il traffico HTTP che HTTPS sul server (porte 80 e 443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Consenti Apache HTTP / HTTPS

All’installazione, il server web Apache imposta alcuni profili UFW diversi all’interno del server. Una volta installato Apache e abilitato come servizio, esegui il seguente comando per identificare quali profili sono disponibili:

  1. sudo ufw app list | grep Apache
Output
Apache Apache Full Apache Secure

Per abilitare sia il traffico HTTP che HTTPS, scegli Apache Full. Altrimenti, scegli Apache per HTTP o Apache Secure per HTTPS.

Il seguente comando permetterà sia il traffico HTTP che HTTPS sul server (porte 80 e 443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

Consenti tutto l’HTTP in entrata (porta 80)

I server web, come Apache e Nginx, di solito ascoltano le richieste HTTP sulla porta 80. Se la tua politica predefinita per il traffico in ingresso è impostata su drop o deny, dovrai creare una regola UFW per consentire l’accesso esterno sulla porta 80. Puoi utilizzare sia il numero di porta che il nome del servizio (http) come parametro per questo comando.

Per consentire tutte le connessioni HTTP in ingresso (porta 80), esegui:

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

Una sintassi alternativa è specificare il numero di porta del servizio HTTP:

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

Consenti Tutte le Connessioni in Entrata HTTPS (porta 443)

HTTPS di solito funziona sulla porta 443. Se la tua politica predefinita per il traffico in ingresso è impostata su drop o deny, dovrai creare una regola UFW per consentire l’accesso esterno sulla porta 443. Puoi utilizzare sia il numero di porta che il nome del servizio (https) come parametro per questo comando.

Per consentire tutte le connessioni HTTPS in ingresso (porta 443), esegui:

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

Una sintassi alternativa è specificare il numero di porta del servizio HTTPS:

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

Consenti Tutte le Connessioni in Entrata HTTP e HTTPS

Se vuoi consentire sia il traffico HTTP che HTTPS, puoi creare una singola regola che permette entrambe le porte. Questo utilizzo richiede anche di definire il protocollo con il parametro proto, che in questo caso dovrebbe essere impostato su tcp.

Per consentire tutte le connessioni in entrata HTTP e HTTPS (porte 80 e 443), esegui:

  1. sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added Rule added (v6)

Consenti Connessione MySQL da un Indirizzo IP o Sottorete Specifici

MySQL ascolta le connessioni del client sulla porta 3306. Se il tuo server di database MySQL viene utilizzato da un client su un server remoto, sarà necessario creare una regola UFW per consentire tale accesso.

Per consentire le connessioni MySQL in ingresso da un indirizzo IP o una subnet specifici, utilizza il parametro from per specificare l’indirizzo IP di origine e il parametro port per impostare la porta di destinazione 3306.

Il seguente comando permetterà all’indirizzo IP 203.0.113.103 di connettersi alla porta MySQL del server:

  1. sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added

Per consentire all’intera subnet 203.0.113.0/24 di connettersi al tuo server MySQL, esegui:

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

Consenti la connessione a PostgreSQL da un indirizzo IP o subnet specifici

PostgreSQL ascolta le connessioni dei client sulla porta 5432. Se il tuo server del database PostgreSQL è utilizzato da un client su un server remoto, devi essere sicuro di consentire quel traffico.

Per consentire le connessioni in ingresso a PostgreSQL da un indirizzo IP o subnet specifici, specifica la sorgente con il parametro from, e imposta la porta su 5432:

  1. sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added

Per consentire all’intera subnet 203.0.113.0/24 di connettersi al tuo server PostgreSQL, esegui:

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

Blocca l’invio di posta SMTP in uscita

I server di posta, come Sendmail e Postfix, utilizzano tipicamente la porta 25 per il traffico SMTP. Se il tuo server non dovrebbe inviare posta in uscita, potresti voler bloccare quel tipo di traffico. Per bloccare le connessioni SMTP in uscita, esegui:

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

Questo configura il tuo firewall per eliminare tutto il traffico in uscita sulla porta 25. Se hai bisogno di rifiutare le connessioni in uscita su un numero di porta diverso, puoi ripetere questo comando e sostituire 25 con il numero di porta che desideri bloccare.

Conclusion

UFW è uno strumento potente che può migliorare notevolmente la sicurezza dei tuoi server quando configurato correttamente. Questa guida di riferimento copre alcune regole UFW comuni che vengono spesso utilizzate per configurare un firewall su Ubuntu.

La maggior parte dei comandi in questa guida può essere adattata per adattarsi a diversi casi d’uso e scenari, modificando parametri come l’indirizzo IP di origine e/o la porta di destinazione. Per informazioni più dettagliate su ciascun parametro del comando e sui modificatori disponibili, è possibile utilizzare l’utilità man per controllare il manuale di UFW:

  1. man ufw

La pagina ufficiale di UFW sulla documentazione di Ubuntu è un’altra risorsa che puoi utilizzare come riferimento per casi d’uso più avanzati ed esempi.

Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands