Ricerca nel sito web

Come installare, configurare e utilizzare Firewalld in CentOS e Ubuntu


Firewalld (daemon firewall) è un'alternativa al servizio iptables, per la gestione dinamica del firewall di un sistema con supporto per zone di rete (o firewall) e fornisce un'interfaccia D-Bus per la gestione delle configurazioni. È facile da usare e configurare e ora è lo strumento di gestione del firewall predefinito su RHEL/CentOS, Fedora e molte altre distribuzioni Linux.

In questo articolo discuteremo come configurare il firewall di sistema con firewalld e implementare il filtraggio dei pacchetti di base in CentOS/RHEL 7 e Ubuntu.

Le nozioni di base su Firewalld

Firewalld è composto da tre livelli, che sono:

  • strato principale: responsabile della gestione della configurazione e dei backend (elencati di seguito).
  • Interfaccia D-Bus: il mezzo principale per modificare e creare la configurazione del firewall.
  • backend: per interagire con netfilter (il modulo nativo del kernel utilizzato per il firewall). Includono iptables, ip6tables, ebtables, ipset, nft, linnftables; responsabile del network; e moduli.

Gestisce le regole del firewall implementando zone di rete/firewall che definiscono il livello di fiducia delle connessioni o delle interfacce di rete. Altre funzionalità firewall supportate includono servizi, configurazione diretta (utilizzata per passare direttamente la sintassi grezza di iptables), IPSet e tipi ICMP.

Firewalld supporta due tipi di ambienti di configurazione:

  • configurazione runtime che è effettiva solo fino al riavvio della macchina o al riavvio del servizio firewalld
  • configurazione permanente che viene salvata e funziona in modo persistente.

Lo strumento da riga di comando firewall-cmd viene utilizzato per gestire il runtime e la configurazione permanente. In alternativa, è possibile utilizzare lo strumento di configurazione dell'interfaccia utente grafica (GUI) firewall-config per interagire con il demone.

Inoltre, firewalld offre un'interfaccia ben definita per altri servizi o applicazioni locali per richiedere direttamente modifiche alle regole del firewall, se sono in esecuzione con privilegi di root.

Il file di configurazione globale per firewalld si trova in /etc/firewalld/firewalld.conf e le funzionalità del firewall sono configurate in formato XML.

Comprendere le funzionalità importanti di Firewalld

La caratteristica centrale di firewalld sono le zone di rete/firewall. Ogni altra caratteristica è delimitata da una zona. Una zona firewall descrive il livello di fiducia per una connessione, un'interfaccia o un collegamento all'indirizzo di origine.

La configurazione predefinita include un numero di zone predefinite ordinate in base al livello di attendibilità predefinito delle zone da non attendibile a attendibile: rilascio, blocco, pubblico, esterno, dmz, lavoro, casa, interno e attendibile. Sono definiti nei file archiviati nella directory /usr/lib/firewalld/zones.

Puoi configurare o aggiungere le tue zone personalizzate utilizzando il client CLI o semplicemente creare o copiare un file di zona in /etc/firewalld/zones da file esistenti e modificarlo.

Un altro concetto importante sotto firewalld sono i servizi. Un servizio viene definito utilizzando porte e protocolli; queste definizioni rappresentano un determinato servizio di rete come un server web o un servizio di accesso remoto. I servizi sono definiti nei file archiviati nella directory /usr/lib/firewalld/services/ o /etc/firewalld/services/.

Se conosci i concetti base di iptables/ip6tables/ebtables, puoi anche utilizzare l'interfaccia diretta (o la configurazione) per ottenere l'accesso diretto al firewall. Ma, per coloro che non hanno alcuna conoscenza di iptables, è possibile utilizzare il linguaggio avanzato per creare regole firewall più complesse per IPv4 e IPv6.

Come installare il pacchetto Firewalld in Linux

Su CentOS 7, il pacchetto firewalld è preinstallato e puoi verificarlo utilizzando il seguente comando.

rpm -qa firewalld

Su Ubuntu 16.04 e 18.04, puoi installarlo utilizzando il gestore pacchetti predefinito come mostrato.

sudo apt install firewalld

Come gestire il servizio Firewalld in Linux

Firewalld è un normale servizio systemd che può essere gestito tramite il comando systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

Dopo aver avviato il servizio firewalld, puoi anche verificare se il demone è in esecuzione o meno, utilizzando lo strumento firewall-cmd (nel caso in cui non sia attivo, questo comando restituirà "not corsa ").

sudo firewall-cmd --state

Se ti capita di salvare eventuali modifiche in modo permanente, puoi ricaricare firewalld. Ciò ricaricherà le regole del firewall e manterrà le informazioni sullo stato. L'attuale configurazione permanente diventerà la nuova configurazione di runtime.

sudo firewall-cmd --reload

Come lavorare con le zone firewall in Firewalld

Per ottenere un elenco di tutte le zone e i servizi firewall disponibili, esegui questi comandi.

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

La zona predefinita è la zona utilizzata per ogni funzionalità del firewall che non è esplicitamente vincolata a un'altra zona. È possibile ottenere la zona predefinita impostata per le connessioni e le interfacce di rete eseguendo.

sudo firewall-cmd --get-default-zone

Per impostare la zona predefinita, ad esempio su esterna, utilizzare il comando seguente. Tieni presente che l'aggiunta dell'opzione --permanent imposta la configurazione in modo permanente (o abilita l'interrogazione di informazioni dall'ambiente di configurazione permanente).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

Successivamente, vediamo come aggiungere un'interfaccia a una zona. Questo esempio mostra come aggiungere l'adattatore di rete wireless (wlp1s0) alla zona casa, utilizzata nelle aree domestiche.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Un'interfaccia può essere aggiunta solo a una singola zona. Per spostarlo in un'altra zona, utilizza l'interruttore --change-interface come mostrato, oppure rimuovilo dalla zona precedente utilizzando l'interruttore -remove-interface, quindi aggiungilo alla nuova zona.

Supponendo che tu voglia connetterti a una rete WI-FI pubblica, dovresti riportare l'interfaccia wireless nella zona pubblica, in questo modo:

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

Puoi utilizzare più zone contemporaneamente. Per ottenere un elenco di tutte le zone attive con le funzionalità abilitate come interfacce, servizi, porte, protocolli, eseguire:

sudo firewall-cmd --get-active-zones

In relazione al punto precedente, se desideri trovare maggiori informazioni su una determinata zona, ovvero tutto ciò che è stato aggiunto o abilitato in essa, utilizza uno di questi comandi:

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Un'altra opzione utile è --get-target, che mostra l'obiettivo di una zona permanente. Un target è uno tra: default, ACCEPT, DROP, REJECT. Puoi controllare il target di varie zone:

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Come aprire e bloccare le porte in Firewalld

Per aprire una porta (o una combinazione porta/protocollo) nel firewall, aggiungila semplicemente in una zona con l'opzione --add-port. Se non specifichi esplicitamente la zona, verrà abilitata nella zona predefinita.

L'esempio seguente mostra come aggiungere le porte 80 e 443 per consentire il traffico Web in entrata tramite HTTP e HTTPS protocolli, rispettivamente:

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Successivamente, ricarica firewalld e controlla ancora una volta le funzionalità abilitate nella zona pubblica, dovresti essere in grado di vedere le porte appena aggiunte.

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Bloccare o chiudere una porta nel firewall è altrettanto semplice, basta rimuoverla da una zona con l'opzione --remove-port. Ad esempio, per chiudere le porte 80 e 443 nella zona pubblica.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Invece di utilizzare la porta o la combinazione porta/protocollo, è possibile utilizzare il nome del servizio a cui è assegnata una porta, come spiegato nella sezione successiva.

Come aprire e bloccare i servizi in Firewalld

Per aprire un servizio nel firewall, abilitalo utilizzando l'opzione --add-service. Se la zona viene omessa, verrà utilizzata la zona predefinita.

Il seguente comando abiliterà permanentemente il servizio http nella zona pubblica.

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

L'opzione --remove-service può essere utilizzata per disabilitare un servizio.

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

Come abilitare e disabilitare il mascheramento IP utilizzando Firewalld

L'IP Masquerading (noto anche come IPMASQ o MASQ) è un NAT (Network Address Translation) meccanismo nella rete Linux che consente agli host in una rete, con indirizzi IP privati, di comunicare con Internet utilizzando l'indirizzo IP pubblico assegnato dal server Linux (gateway IPMASQ).

È una mappatura uno-a-molti. Il traffico proveniente dai tuoi host invisibili apparirà ad altri computer su Internet come se provenisse dal tuo server Linux.

È possibile abilitare il mascheramento IP in una zona desiderata, ad esempio la zona pubblica. Ma prima di farlo, controlla se il masquerading è attivo o meno (un “no” significa che è disabilitato e un “sì” significa altrimenti).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Un tipico caso d'uso del masquerading è l'esecuzione del port forwarding. Supponendo che tu voglia connetterti tramite SSH da un computer remoto a un host nella tua rete interna con IP 10.20.1.3, su cui il demone sshd è in ascolto sulla porta 5000.

Puoi inoltrare tutte le connessioni alla porta 22 sul tuo server Linux alla porta prevista sul tuo host di destinazione immettendo:

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Per disabilitare il masquerading in una zona, usa l'opzione --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Come abilitare e disabilitare il messaggio IMCP in Firewalld

I messaggi ICMP (Internet Control Message Protocol) sono richieste di informazioni o risposte a richieste di informazioni o in condizioni di errore.

Puoi abilitare o disabilitare i messaggi ICMP nel firewall, ma prima elenca tutti i tipi di icmp supportati.

sudo firewall-cmd --get-icmptypes

Per aggiungere o rimuovere il tipo di blocco che desideri.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Puoi visualizzare tutti i tipi icmp aggiunti in una zona utilizzando l'opzione --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Come utilizzare l'interfaccia diretta per passare i comandi iptables grezzi

Il firewall-cmd fornisce anche opzioni dirette (--direct) per ottenere un accesso più diretto al firewall. Questo è utile per chi ha una conoscenza di base di iptables.

Importante: dovresti utilizzare le opzioni dirette solo come ultima risorsa quando non è possibile utilizzare le normali opzioni firewall-cmd spiegate sopra.

Ecco un esempio di come passare la regola iptables grezza, utilizzando l'opzione --add-rules. Puoi rimuovere facilmente queste regole sostituendo --add-rule con --remove-rule:

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Per ulteriori informazioni su iptables, consulta questa guida: Come impostare un firewall Iptables per abilitare l'accesso remoto ai servizi in Linux.

Se non hai familiarità con la sintassi di iptables, puoi optare per il "linguaggio ricco" di firewalld per creare regole firewall più complesse in modo facile da comprendere, come spiegato di seguito.

Come utilizzare il linguaggio avanzato in Firewalld

Il rich Language (noto anche come rich Rules) viene utilizzato per aggiungere regole firewall più complesse per IPv4 e IPv6 senza la conoscenza della sintassi di iptables.

Estende le funzionalità della zona (servizio, porta, icmp-block, masquerade e forward-port) che abbiamo trattato. Supporta indirizzi di origine e destinazione, registrazione, azioni e limiti per registri e azioni.

--add-rich-rule viene utilizzato per aggiungere regole avanzate. Questo esempio mostra come consentire nuove connessioni IPv4 e IPv6 per il servizio http e registrarne 1 al minuto utilizzando l'audit:

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Per rimuovere la regola aggiunta, sostituisci l'opzione --add-rich-rule con --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Questa funzionalità consente inoltre di bloccare o consentire il traffico proveniente da un indirizzo IP specifico. L'esempio seguente mostra come rifiutare le connessioni dall'IP 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Come abilitare e disabilitare la modalità panico in Firewalld

La modalità Panic è una modalità speciale sotto firewalld in cui tutti i pacchetti in entrata e in uscita vengono eliminati e le connessioni attive scadono una volta attivate.
È possibile abilitare questa modalità in situazioni di emergenza in cui esiste una minaccia per l'ambiente di rete.

Per eseguire query in modalità panico, utilizzare l'opzione --query-panic.

sudo firewall-cmd --query-panic

Per abilitare la modalità panico, usa l'opzione --panic-on. Puoi verificare se funziona utilizzando il comando ping come mostrato. Poiché il pacchetto viene ignorato, il nome www.google.com non può essere risolto, da qui l'errore visualizzato.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Per disabilitare la modalità panico, usa l'opzione --panic-off.

sudo firewall-cmd --panic-off

Come bloccare Firewalld

Ricorda, nelle nozioni di base su firewalld abbiamo menzionato che le applicazioni o i servizi locali sono in grado di modificare la configurazione del firewall se vengono eseguiti con privilegi di root. Puoi controllare quali applicazioni sono in grado di richiedere modifiche al firewall, specificandole in una whitelist di blocco.

Questa funzionalità è disattivata per impostazione predefinita, puoi attivarla o disattivarla con l'interruttore --lockdown-on o --lockdown in modo ricettivo.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

Tieni presente che si consiglia di abilitare o disabilitare questa funzionalità modificando il file di configurazione principale, poiché il firewall-cmd potrebbe non esistere nella whitelist di blocco quando si abilita il blocco.

sudo vim /etc/firewalld/firewalld.conf

Trova il parametro Lockdown e modifica il suo valore da no (significa disattivato) a yes (significa attivato).

Lockdown=yes

Per rendere permanente questa impostazione, ricaricare firewalld.

sudo firewall-cmd --reload
Riepilogo

Firewalld è un sostituto facile da usare del servizio iptables, che utilizza iptables come backend. In questo articolo, abbiamo mostrato come installare il pacchetto firewalld, spiegato le funzionalità importanti di firewalld e discusso come configurarli negli ambienti di runtime e di configurazione permanente.

Se avete domande o commenti, non esitate a contattarci tramite il modulo dei commenti qui sotto. Per ulteriori informazioni è possibile fare riferimento alla pagina del manuale di firewalld (man firewalld) o alla documentazione di firewalld nel sito Web del progetto.