Come configurare Firewall con FirewallD

Firewalld è uno strumento di gestione del firewall che funge da front-end per il framework netfilter del kernel Linux. È un potente firewall basato su zone che monitora il traffico di rete e applica una serie di regole definite per controllare il traffico in entrata/uscita.
Firewalld è scritto in Python e fa parte di systemd. Supporta entrambe le reti IPv4 e IPv6.
Il vantaggio principale è che le modifiche possono essere apportate senza riavviare il servizio e le configurazioni con l’interfaccia D-Bus possono essere facilmente gestite.
In questo tutorial impariamo come configurare Firewalld su Linux e i suoi concetti di base.
iniziare
Firewalld è costituito da due strati chiamati ca nucleo e D-Bus strato. Il livello di base gestisce la configurazione e il backend. Il livello D-Bus è responsabile della modifica e della creazione della configurazione del firewall.
Supporta firewalld le zone e Servizi. Le zone sono un insieme di regole predefinite che regolano il tipo di traffico consentito al server in base al livello di attendibilità delle interfacce di rete collegate al server. Ciò significa che è possibile assegnare un’interfaccia di rete a una zona. I servizi consentono di configurare porte, moduli e indirizzi di destinazione.
firewall-cmd è lo strumento a riga di comando utilizzato per gestire le configurazioni in esecuzione e permanenti.
Zone firewall predefinite
Il aree predefinite sono conservati nella directory denominata /usr/lib/firewalld/zones/. Di seguito sono riportate alcune delle zone predefinite fornite da Firewalld in base a diversi livelli di attendibilità, da attendibile a non attendibile.
Affidabile: questa zona accetta tutte le connessioni e considera attendibili tutti i computer della rete.
Pubblico: Impiegato in aree pubbliche diffidenti. L’attendibilità è minima su altri computer, ma le connessioni in entrata selezionate potrebbero essere ancora consentite.
caduta improvvisa: Tutto il traffico in entrata o in uscita viene interrotto. È consentito solo il traffico in uscita.
Esterno: implementato su reti esterne quando il sistema funge da router con mascheramento NAT abilitato. Sono consentite solo le connessioni di ingresso selezionate.
Interno: Implementato solo su reti interne con il tuo sistema che funge da router con NAT masquerading abilitato. Altri computer sono attendibili e solo a poche connessioni in entrata selezionate viene concesso l’accesso.
bloccare: Block zone rifiuta tutte le connessioni in entrata con un messaggio icmp-host-prohibited per IPv4 e icmp6-adm-prohibited per IPv6n. Qui sono consentite solo connessioni in uscita.
dmz: Utilizzato per sistemi o PC in una zona demilitarizzata (DMZ) con accesso limitato al resto dei sistemi sulla rete di computer. Per impostazione predefinita, consente solo il traffico SSH.
il lavoro: Workspace è implementato per sistemi di lavoro o PC. Esiste un livello generale di attendibilità per tutti gli altri computer della rete e sono consentite solo connessioni in entrata selezionate.
La casa: La zona home viene utilizzata dai sistemi domestici e, come la zona di lavoro, tutti i PC sono generalmente considerati attendibili e sono consentite solo connessioni in entrata selezionate.
Runtime del firewall e impostazioni permanenti
La configurazione in esecuzione effettiva è la configurazione in esecuzione. È transitorio e non sopravvive a un riavvio. Al riavvio del server, Firewalld carica la configurazione permanente, che successivamente diventa la configurazione in esecuzione.
Quando vengono apportate modifiche alla configurazione di Firewalld, vengono applicate direttamente alla configurazione in esecuzione. Per rendere persistenti le modifiche, invocare --permanent opzione.
Installazione e abilitazione di Firewalld
Firewalld è disponibile per impostazione predefinita su Red Hat, CentOS, Fedora, Suse Linux. Su Debian/Ubuntu è disponibile nel repository dei pacchetti.
RedHat/CentOS
Se firewalld non è installato, installalo eseguendo il seguente comando:
$ sudo yum install firewalld
Debian/Ubuntu
$ sudo apt install firewalld
Una volta installato, puoi controllare lo stato:
$ sudo systemctl status firewalld
L’output indicherà attivo (in esecuzione) se Firewalld è attivo e in esecuzione.
In alternativa, puoi confermare lo stato di funzionamento tramite:
$ sudo firewall-cmd state
Una volta installato, avvia e abilita Firewalld eseguendo i seguenti comandi:
$ sudo systemctl start firewalld
Abilita Firewalld all’avvio del sistema, digita:
$ sudo systemctl enable firewalld
Per arrestare temporaneamente Firewalld, digitare:
$ sudo systemctl stop firewalld
Per disabilitare Firewalld all’avvio, digitare:
$ sudo systemctl disable firewalld
Gestione delle zone Firewall
Vediamo come gestire le zone Firewalld.
1. Per impostazione predefinita, la zona pubblica è la zona predefinita di Firewalld. Per confermare ciò, esegui il comando:
$ sudo firewall-cmd --get-default-zone
Produzione:
public
2. Per ottenere una panoramica di tutte le zone, eseguire il comando:
$ sudo firewall-cmd --get-zones
Questo elencherà tutte le aree.
Produzione:
block dmz drop external home internal public trusted work
3. Le interfacce di rete, per impostazione predefinita, sono generalmente collegate alla zona predefinita. Per verificare le zone utilizzate dalle interfacce di rete, eseguire il seguente comando.
$ sudo firewall-cmd --get-active-zones
In questo caso, ho un’interfaccia di rete attiva – enp0s3 – che è assegnato alla zona predefinita.

4. Per visualizzare l’intera configurazione di una zona,
Per visualizzare la configurazione della zona pubblica, digitare:
$ sudo firewall-cmd --zone=public --list-all

Per visualizzare una panoramica della zona predefinita, digitare:
$ sudo firewall-cmd --list-all
5. Per elencare la configurazione di tutte le zone Firewalld, digitare:
$ sudo firewall-cmd --list-all-zones

Cambia la zona predefinita
La zona predefinita assegnata a tutte le interfacce di rete è public. Puoi impostarlo in un’area diversa.
6. Per cambiare la zona predefinita in un’altra zona, digitare:
$ sudo firewall-cmd --set-default-zone=trusted
Qui, ho cambiato la zona predefinita in trusted la zona.
Modificare la zona assegnata a un’interfaccia
Per modificare la zona di un’interfaccia di rete in un’altra zona, utilizzare --zone opzione.
7. Per modificare l’area dell’interfaccia enp0s3 a trustedgenere:
$ sudo firewall-cmd --zone=home --change-interface=enp0s3
Servizi firewall
I file del servizio Firewalld si trovano nel file /usr/lib/firewalld/services percorso in formato file xml. Ce ne sono centinaia e usa il comando ls per elencare.
$ ls /usr/lib/firewalld/services
Ad esempio, il file del servizio MongoDB vorrebbe:
$ sudo vim /usr/lib/firewalld/services/mongodb.xml

Per impostazione predefinita, i servizi dhcp-client e ssh sono consentiti sul firewall. Dall’output, si noti che è stato consentito anche https.
Per creare un nuovo servizio Firewalld, copia semplicemente un file di servizio esistente e assegnagli un nuovo nome di servizio. Quindi definisci quel file xml.
Una delle funzionalità più utilizzate del firewall è quella di aprire le porte e consentire l’accesso al server. Firewalld ha servizi predefiniti.
8. Per visualizzare tutti i servizi digitare:
$ sudo firewall-cmd --get-services
9. Consenti traffico in entrata
Per consentire il traffico in entrata per il servizio mssql, digitare:
$ sudo firewall-cmd --zone=public --add-service=mssql
10. Per controllare i servizi aggiunti:
$ sudo firewall-cmd --zone=public --list-services
Produzione:
dhcpv6-client mssql ssh
11. Per mantenere la modifica anche dopo un riavvio, invocare --permanent opzione come segue.
$ sudo firewall-cmd --zone=public --add-service=https --permanent
12. Per rendere effettive le modifiche, ricaricare firewalld
$ sudo firewall-cmd --reload
13. Per rimuovere un servizio dal firewall, utilizzare --remove opzione
$ sudo firewall-cmd --zone=public --remove-service=https --permanent

Il comando precedente rimuove definitivamente i servizi HTTPS dall’area pubblica.
14. Per aprire la porta su firewalld
Ad esempio, il servizio Xrdp, che consente a un utente di connettersi in remoto al desktop di un sistema remoto, è associato alla porta TCP 3389.
Per aprire la porta nell’area pubblica, digitare:
$ sudo firewall-cmd --zone=public --add-port=3389/tcp

Ricordati di ricaricare Firewalld per rendere effettive le modifiche.
Port forwarding con Firewalld
15. Per abilitare il mascheramento per l’area pubblica
Per inoltrare il traffico da una porta a un’altra o a un indirizzo, innanzitutto avviare o abilitare il mascheramento per la zona preferita invocando --add-masquerade opzione.
$ sudo firewall-cmd --zone=public --add-masquerade
16. Inoltra il traffico da una porta all’altra sullo stesso server
Per configurare Firewalld in modo che il traffico in entrata che arriva a una porta specifica venga reindirizzato a un’altra porta sullo stesso server.
Per inoltrare il traffico in arrivo sulla porta 80 alla porta 6000 nell’area pubblica, digitare:
$ sudo firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=6000
17. Inoltra il traffico a un’altra porta su un altro server
In alternativa, il traffico che passa da una porta può essere inoltrato a un’altra porta situata su un altro server.
Per far passare il traffico attraverso la porta 80 viene inoltrato alla porta 8080 su un altro server il cui indirizzo IP è 192.168.10.10, digitare:
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.10.10
Imposta regole per gestire il traffico in entrata
Per consentire il traffico in entrata da un’origine di utilizzo specifica --add-source opzione.
Per consentire tutto il traffico in entrata da 192.168.10.0/24 nella zona attendibile, digitare:
$ sudo firewall-cmd --zone=trusted --add-source=192.168.10.0/24 --permanent
Crea una nuova area
Puoi creare le tue zone e aggiungere una serie di regole. Nella maggior parte dei casi, le aree predefinite sono sufficienti. Ci consente di creare una nuova zona per un server Web e consentire determinati servizi/interfacce.
Crea una nuova zona chiamata webzone:
$ sudo firewall-cmd --permanent --new-zone=webzone
Controlla elencando le zone permanenti, digita:
$ sudo firewall-cmd --permanent --get-zones
Produzione:
block dmz drop external home internal public trusted webzone work
Per diventare efficiente nella configurazione attiva, digitare:
$ sudo firewall-cmd --reload
Per aprire il servizio ssh, http, https e assegnare l’interfaccia alla zona Web, eseguire i seguenti comandi:
$ sudo firewall-cmd --zone=webzone --add-service=ssh
$ sudo firewall-cmd --zone=webzone --add-service=http
$ sudo firewall-cmd --zone=webzone --add-service=https
$ sudo firewall-cmd --zone=webzone --add-interface=eth0
Per visualizzare la configurazione della web zone digitare:
$ sudo firewall-cmd --zone=webzone --list-all
Produzione:
webzone
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Regole ricche
La regola ricca aiuta a impostare regole firewall più complesse.
Ad esempio, per abilitare l’accesso per l’indirizzo IP, l’indirizzo di origine e la porta specifici, digitare:
$ sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="23.92.31.51/32" port port=21 protocol="tcp" accept"
riepilogo
In questo tutorial abbiamo imparato come configurare Firewalld su Linux e i suoi concetti di base.
Se hai feedback e suggerimenti, commenta di seguito.




