Configurazione del firewall con Firewalld
In questo capitolo vengono descritti i concetti, gli strumenti e i metodi per la configurazione del firewall con strumenti basati su firewalld. Fornisce inoltre esempi per la visualizzazione delle impostazioni del firewall che applicano la sicurezza di rete su un sistema.
Strumenti di configurazione firewalld
È possibile configurare il firewall utilizzando uno degli strumenti riportati di seguito.
-
Utilizzando il comando firewall-cmd e le relative diverse opzioni.
-
Utilizzando la GUI di configurazione del firewall
Per utilizzare questo strumento, è necessario prima installare il pacchetto
firewall-config, quindi avviarlo utilizzando lo stesso comando del nome del pacchetto, ad esempio:sudo dnf install firewall-config
sudo firewall-config &
Il comando apre lo strumento di configurazione, come illustrato nella figura riportata di seguito.
-
Cockpit è uno strumento di configurazione basato su browser che può essere utilizzato anche per eseguire configurazioni firewall. Vedere Oracle Linux: Using the Cockpit Web Console.
Controllo del servizio firewalld
In Oracle Linux, il servizio firewall, firewalld, è abilitato per impostazione predefinita. Il servizio è controllato dal comando systemctl.
Per avviare il servizio, procedere come segue.
sudo systemctl unmask firewalld
sudo systemctl start firewalld
Per accertarsi che il servizio venga avviato automaticamente all'avvio del sistema, eseguire il comando seguente dopo aver avviato il firewall:
sudo systemctl enable firewalld
Per arrestare il servizio firewall e impedirne l'avvio automatico all'avvio del sistema, eseguire il comando seguente:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
Per impedire l'avvio del servizio firewall da parte di altri servizi o tramite l'interfaccia D-Bus firewalld, eseguire il comando seguente dopo aver disabilitato il firewall:
sudo systemctl mask firewalld
Per visualizzare lo stato corrente del servizio firewall:
sudo systemctl status firewalld
Procedere nel modo seguente:
-
Per Oracle Linux 8, l'output dello stato è simile a:
firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-04-20 18:33:59 BST; 2 weeks 5 days ago Docs: man:firewalld(1) Main PID: 4261 (firewalld) Tasks: 3 (limit: 99538) Memory: 4.7M CGroup: /system.slice/firewalld.service └─4261 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid -
Per Oracle Linux 9, l'output dello stato è simile a:
firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-05-05 08:41:36 GMT; 5 days ago Docs: man:firewalld(1) Main PID: 1155 (firewalld) Tasks: 4 (limit: 93659) Memory: 32.5M CPU: 1.438s CGroup: /system.slice/firewalld.service └─1155 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid -
Per Oracle Linux 10, l'output dello stato è simile a:
firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2025-01-04 08:41:36 GMT; 5 days ago Docs: man:firewalld(1) Main PID: 1155 (firewalld) Tasks: 4 (limit: 93659) Memory: 32.5M CPU: 1.438s CGroup: /system.slice/firewalld.service └─1155 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
Informazioni su zone e servizi
La sicurezza del firewall viene implementata attraverso i concetti di zone e servizi.
Le zone sono set predefiniti di regole di filtro che corrispondono ai livelli di attendibilità per l'accesso alla rete. È possibile aggiungere alle regole di filtro predefinite di una zona riconfigurando le impostazioni della zona e quindi perfezionando il controllo della zona sul flusso di traffico. Quando si installa Oracle Linux, al sistema viene assegnata automaticamente una zona predefinita denominata public.
Le regole del firewall vengono applicate tramite i servizi assegnati a una zona. Le porte di servizio sono i punti di accesso del traffico di rete. I servizi assegnati a una zona dispongono automaticamente delle porte aperte per ricevere e inviare pacchetti di rete.
Per ulteriori informazioni sulle zone e sui servizi correlati al firewall, vedere le pagine del manuale firewalld.zone(5) e firewalld.service(5).
Visualizzazione delle informazioni sulle zone
Quando si configura il firewall per le zone, è consigliabile visualizzare le impostazioni correnti di zona e servizio e altre informazioni nell'ambito dei passi di configurazione. Con questo approccio è possibile monitorare le modifiche che si stanno introducendo al firewall e identificare potenziali errori che renderebbero le modifiche non valide.
Per visualizzare la zona predefinita del sistema, eseguire il comando seguente:
firewall-cmd --get-default
Visualizzare tutte le zone predefinite incluse nell'installazione come indicato di seguito.
firewall-cmd --get-zones
Procedere nel modo seguente:
-
Per Oracle Linux 8, l'output è:
block dmz drop external home internal public trusted work
-
Per Oracle Linux 9 e Oracle Linux 10, l'output è:
block dmz drop external home internal nm-shared public trusted work
È possibile configurare qualsiasi zona dell'elenco. Quando si modificano le impostazioni di una determinata zona, questa diventa una zona attiva. Per identificare la zona attiva, digitare quanto segue:
firewall-cmd --get-active-zone
Per impostazione predefinita, tutte le configurazioni vengono implementate nella zona predefinita. Si noti inoltre che una zona attiva non è necessariamente la zona predefinita. È pertanto necessario specificare il nome della zona nel comando per definire le impostazioni per la zona specifica. In caso contrario, le definizioni vengono applicate alla zona predefinita.
Visualizzazione delle impostazioni della zona
Per ottenere le impostazioni di una zona:
sudo firewall-cmd --list-all [--zone=zonename]
Senza specificare una zona, il comando visualizza le impostazioni della zona predefinita. Pertanto, per elencare le impostazioni della zona work, è necessario utilizzare il comando seguente;
sudo firewall-cmd --list-all --zone=work
work target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Configurazione delle zone firewall
I task riportati di seguito descrivono come utilizzare il comando firewall-cmd per configurare le regole del firewall per una zona. Le regole vengono quindi registrate nella struttura gerarchica /etc/firewalld per firewalld.
Configurare il firewall significa impostare tutte o alcune delle impostazioni di una zona su valori specifici per consentire al firewall di controllare il traffico di rete in base alle specifiche.
Controllo dell'accesso ai servizi
L'impostazione di services di una zona è il modo predefinito per configurare il firewall. A ogni zona sono assegnati servizi predefiniti. Per configurare ulteriormente questa impostazione, aggiungere servizi alla zona o rimuovere servizi dalla zona.
Per elencare i servizi predefiniti, utilizzare il comando firewall-cmd --list-services.
Ad esempio, il comando seguente mostra che alla zona work sono assegnati i servizi cockpit, dhcpv6-client e ssh:
sudo firewall-cmd --list-services --zone=work
cockpit dhcpv6-client ssh
Per aprire l'accesso a un nuovo servizio, utilizzare l'opzione --add-service service. Facoltativamente, includere l'opzione --permanent per rendere la regola persistente tra i vari reboot.
Ad esempio, per aggiungere i servizi HTTP e NFS alla zona work, è necessario utilizzare il comando seguente:
sudo firewall-cmd --permanent --zone=work --add-service=http --add-service=nfs sudo firewall-cmd --list-services --zone=work
cockpit dhcpv6-client ssh http nfs
Per rimuovere l'accesso a un servizio, utilizzare l'opzione --remove-service service:
sudo firewall-cmd --permanent --zone=work --remove-service=cockpit sudo firewall-cmd --list-services --zone=work
dhcpv6-client ssh http nfs
Controllo dell'accesso alle porte
Il traffico di rete attraverso i servizi della zona utilizza le porte di tali servizi. Le porte devono essere aperte per accettare il traffico. È possibile aprire più porte per l'accesso alla rete specificando il numero di porta e il protocollo associato.
L'opzione --list-ports elenca le porte e i protocolli associati a cui è stato consentito l'accesso in modo esplicito. Tuttavia, le porte che sono state aperte come servizio non sono incluse nell'output di questo comando. Pertanto, quando si elencano le porte, è consigliabile utilizzare l'opzione --list-all per ottenere informazioni più complete.
Utilizzare l'opzione --add-port per consentire l'accesso a porte specifiche. È necessario specificare le porte nel formato port-number/port-type. I tipi di porta possono essere tcp, udp, sctp o dccp. Assicurarsi che il tipo e il traffico di rete corrispondano, ad esempio:
sudo firewall-cmd --permanent --zone=work --add-port=5353/udp --add-port=3689/tcp sudo firewall-cmd --list-all --zone=work
work target: default icmp-clock-inversion: no interfaces: sources: services: dhcpv6-client ssh http nfs ports: 5353/udp 3689/tcp ...
Analogamente, l'opzione --remove-port rimuove l'accesso a una porta. Ricordarsi di utilizzare l'opzione --permanent per rendere persistente la modifica.
Per ulteriori informazioni, vedere la pagina del manuale firewall-cmd(1).
Assegnazione di un'interfaccia di rete a una zona
L'interfaccia di rete di un sistema viene assegnata automaticamente alla zona predefinita. In Oracle Linux è possibile configurare più zone con servizi, porte e così via specifici. È quindi possibile attivare le regole di una zona specifica per diventare operative assegnando l'interfaccia a tale zona. Pertanto, è possibile modificare facilmente le regole del firewall attive nel sistema riassegnando l'interfaccia di rete.
Si supponga di voler attivare la configurazione firewall della zona work. Assegnare l'interfaccia alla zona come indicato di seguito.
sudo firewall-cmd --zone=work --change-interface=enp0s1 firewall-cmd --get-active-zone
work interfaces: enp0s1
Non è necessario utilizzare l'opzione --permanent per rendere l'impostazione persistente tra i reboot. Se si imposta la zona come predefinita, come descritto in Modifica della zona predefinita, la riassegnazione dell'interfaccia diventa permanente.
Modifica della zona predefinita
È possibile modificare la zona predefinita del sistema come indicato di seguito.
sudo firewall-cmd --set-default-zone=work
È inoltre possibile verificare che le modifiche siano state applicate:
firewall-cmd --get-default-zone
Per visualizzare i risultati completi e finali della configurazione:
sudo firewall-cmd --zone=work --list-all
work (active) target: default interfaces: enp0s1 sources: services: dhcpv6-client ssh http nfs ports: 5353/udp 3689/tcp ...
Impostazione di una regola predefinita per il controllo del traffico in entrata
L'impostazione target stabilisce il comportamento predefinito del firewall durante la gestione del traffico in entrata. Questa impostazione viene configurata in modo automatico su default per tutte le zone predefinite. Per modificare il comportamento predefinito di una zona, utilizzare il comando seguente;
sudo firewall-cmd --zone=zone-name --set-target=ACCEPT|REJECT|DROP
È possibile specificare le opzioni riportate di seguito.
-
ACCEPTaccetta tutto il traffico in entrata, ad eccezione di quelli impostati per essere rifiutati in un'altra regola. -
REJECTblocca tutto il traffico in entrata ad eccezione di quelli consentiti in un'altra regola. Il computer di origine viene informato del rifiuto. -
DROPè simile aREJECT, ma non viene inviato alcun avviso di rifiuto al computer di origine.
Gestione del traffico in entrata in base alle origini
È possibile gestire il traffico in entrata in una zona in base all'origine del traffico. Le due seguenti impostazioni di zona consentono di specificare l'origine dei pacchetti:
-
sourceidentifica il nodo o la rete di invio. -
source-portsidentifica la porta da cui proviene il traffico.
Per accettare il traffico in entrata da un nodo di invio, utilizzare il comando seguente:
sudo firewall-cmd --zone=zone-name --add-source=IP-address
Si noti che l'indirizzo IP può includere la maschera di rete nella notazione CIDR, ad esempio 192.0.2.0/24.
Eseguire il comando seguente per trasformare il set di regole di runtime corrente in un set di regole permanente:
sudo firewall-cmd --runtime-to-permanent
Omettere questo comando se si sta impostando una configurazione temporanea eliminata se il sistema viene riavviato.
Per impostare l'impostazione source-port viene utilizzata la seguente sintassi simile:
sudo firewall-cmd --zone=<zone-name> --add-source-port=<portid>/<protocol>
tcpudpsctpdccp
È possibile combinare impostazioni diverse per configurare il firewall. La zona trusted può essere configurata per accettare il traffico HTTP dall'origine di rete 192.0.2.0, come mostrato nell'esempio riportato di seguito.
sudo firewall-cmd --zone=trusted --add-source=192.0.2.0/24 sudo firewall-cmd --zone=trusted --add-service=http sudo firewall-cmd --zone=trusted --list-all
trusted (active) target: ACCEPT sources: 192.0.2.0/24 services: http
Creazione di zone personalizzate
È possibile creare zone e quindi configurare le impostazioni della zona per una protezione firewall personalizzata.
Uso del comando firewall-cmd
Come mostrato nell'esempio riportato di seguito, è possibile utilizzare l'interfaccia CLI firewall-cmd per creare una zona vuota. Ciò significa che non vengono assegnati servizi predefiniti. Quando si configura una zona personalizzata, è necessario includere sempre l'opzione --permanent nel comando. Altrimenti, viene generato un messaggio d'errore.
sudo firewall-cmd --permanent --new-zone=testzone sudo firewall-cmd --permanent --get-zones
Procedere nel modo seguente:
-
Per Oracle Linux 8, l'output è:
block dmz drop external home internal testzone public trusted work
-
Per Oracle Linux 9 e Oracle Linux 10, l'output è:
block dmz drop external home internal nm-shared public testzone trusted work
sudo firewall-cmd --permanent --info-zone=testzone
testzone target: default icmp-block-inversion: no interfaces: sources: services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Senza l'opzione --permanent, l'opzione --get-zones non visualizza la zona creata.
L'opzione --info-zone=zone-name genera lo stesso output dell'opzione --list-all.
Per rendere persistente la creazione di questa zona, aggiungere il comando seguente:
sudo firewall-cmd --runtime-to-permanent
Dopo aver creato la zona, è possibile aggiungere servizi, porte, assegnare interfacce e così via utilizzando le opzioni di comando fornite negli esempi precedenti:
sudo firewall-cmd --zone=testzone --add-service=http
Error: INVALID ZONE: testzone
sudo firewall-cmd --permanent --zone=testzone --add-service=http
Assicurarsi di utilizzare l'opzione --permanent quando si utilizzano questi comandi.
Uso di un file di configurazione delle zone
Tutte le zone dispongono di file di configurazione corrispondenti. Per le zone predefinite installate con il sistema operativo, i file di configurazione si trovano nella directory /usr/lib/firewalld/zones.
Quando si configura una zona predefinita, il file di configurazione viene copiato nella directory /etc/firewalld/zones e le modifiche vengono memorizzate in tale posizione. Se si utilizza un file di configurazione per creare nuove zone, è necessario utilizzare anche /etc/firewalld/zones come directory di lavoro.
Se si sta creando una zona con solo piccole differenze rispetto alle impostazioni delle zone predefinite, la copia di un file di configurazione esistente nella directory di lavoro è l'approccio più semplice. È possibile utilizzare uno qualsiasi dei comandi riportati di seguito.
sudo cp /etc/firewalld/zones/existing-conf-file.xml new-zone.xml
sudo cp /usr/lib/firewalld/zones/existing-conf-file.xml /etc/firewalld/zones/new-zone.xml
Quindi, utilizzando un editor di testo, rivedere le impostazioni nel nuovo file di configurazione. L'esempio seguente mostra il contenuto del file di configurazione di testzone. testzone accetta il traffico per un servizio (SSH) e un intervallo di porte per i protocolli TCP e UDP.
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>testzone</short>
<description>Put description here</description>
<service name="ssh"/>
<port port="1025-65535" protocol="tcp"/>
<port port="1025-65535" protocol="udp"/>
</zone>