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:
OutputStatus: 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:
Vedrai un output come questo:
OutputFirewall 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:
OutputStatus: 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:
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:
OutputRule 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:
OutputStatus: 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
:
OutputRule 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:
OutputRule 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:
OutputRule 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.
OutputStatus: 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:
OutputRule 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:
OutputStatus: 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
:
OutputRule 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:
OutputStatus: 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:
Ti verrà chiesto di confermare l’operazione e di assicurarti che l’ID che stai fornendo si riferisca alla regola corretta che desideri eliminare.
OutputDeleting:
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:
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:
OutputAvailable 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.
OutputRule 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
:
OutputStatus: 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:
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:
OutputRule 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:
OutputRule 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
:
OutputRule added
Puoi anche utilizzare un indirizzo di subnet come parametro from
per consentire connessioni SSH in ingresso da un’intera rete:
OutputRule 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
:
OutputRule added
Per consentire all’intera subnet 203.0.113.0/24
di poter effettuare rsync
verso il tuo server, esegui:
OutputRule 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:
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
):
OutputRule 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:
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
):
OutputRule 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:
OutputRule added
Rule added (v6)
Una sintassi alternativa è specificare il numero di porta del servizio HTTP:
OutputRule 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:
OutputRule added
Rule added (v6)
Una sintassi alternativa è specificare il numero di porta del servizio HTTPS:
OutputRule 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:
OutputRule 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:
OutputRule added
Per consentire all’intera subnet 203.0.113.0/24
di connettersi al tuo server MySQL, esegui:
OutputRule 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
:
OutputRule added
Per consentire all’intera subnet 203.0.113.0/24
di connettersi al tuo server PostgreSQL, esegui:
OutputRule 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:
OutputRule 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:
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