Configurare firewalld su Centos 8

Come configurare un firewall usando firewalld su CentOS 8

Oggi vi spiegherò come configurare firewalld su Centos 8. firewalld è un software di gestione firewall disponibile per molte distribuzioni Linux, che funge da frontend per i sistemi di filtro per i pacchetti nftables o iptables in-kernel di Linux.
Il servizio firewalld consente tuttavia di configurare regole e set di regole gestibili che tengono conto dell’ambiente di rete. Ti consente di passare senza soluzione di continuità tra le diverse politiche del firewall attraverso l’uso delle zone di conseguenza offre agli amministratori la possibilità di utilizzare la gestione delle porte in definizioni di servizio più amichevoli. L’acquisizione di una conoscenza pratica di questo sistema, quindi, ti consentirà di sfruttare la flessibilità e la potenza fornite da questo strumento.
In questa guida, ti mostrerò come impostare un firewall firewalld per il tuo server CentOS 8 e tratteremo le basi della gestione del firewall con lo strumento amministrativo firewall-cmd.

Concetti di base in firewalld per Centos 8

Prima di iniziare a parlare di come utilizzare effettivamente l’utilità firewall-cmd per gestire la configurazione del firewall, dovremmo acquisire familiarità soprattutto con alcuni concetti introdotti dallo strumento.

Zone

Il demone firewalld gestisce gruppi di regole usando entità chiamate zone. Le zone sono insiemi di regole che determinano il traffico che dovrebbe essere consentito in base al livello di fiducia che si ha nella rete. Le interfacce di rete sono assegnate a una zona per dettare il comportamento che il firewall dovrebbe consentire.
Per i computer che potrebbero spostarsi frequentemente tra le reti (come i laptop), questo tipo di flessibilità offre un buon metodo per modificare le regole in base al proprio ambiente. Potrebbero essere in vigore regole rigide che vietano la maggior parte del traffico quando si opera su una rete WiFi pubblica, consentendo nel contempo restrizioni più rilassate quando si è connessi alla rete domestica. Per un server, queste zone spesso non sono così importanti perché l’ambiente di rete raramente, se non mai, cambia.
Indipendentemente da quanto dinamico possa essere l’ambiente di rete, è comunque utile conoscere l’idea generale alla base di ciascuna delle zone predefinite per firewalld. Le zone predefinite all’interno di firewalld sono, in ordine dal meno attendibile al più attendibile:

  • drop: il livello più basso di fiducia. Tutte le connessioni in entrata vengono eliminate senza risposta di conseguenza sono possibili solo le connessioni in uscita.
  • block: simile al precedente, ma invece di eliminare semplicemente le connessioni, le richieste in arrivo vengono rifiutate con un messaggio icmp-host-vietato o icmp6-adm-proibito.
  • public: rappresenta reti pubbliche non attendibili. Non ti fidi di altri computer ma potresti consentire connessioni in entrata selezionate caso per caso.
  • external: reti esterne nel caso in cui si utilizzi il firewall come gateway. È configurato per il mascheramento NAT in modo che la rete interna rimanga privata ma raggiungibile.
  • internal: l’altro lato della zona esterna, utilizzato per la parte interna di un gateway. I computer sono abbastanza affidabili e sono disponibili alcuni servizi aggiuntivi.
  • dmz: utilizzato per computer situati in una DMZ (computer isolati che non avranno accesso al resto della rete). Sono consentite solo determinate connessioni in entrata.
  • work: usato per macchine da lavoro. Fidati della maggior parte dei computer nella rete. Alcuni altri servizi potrebbero essere consentiti.
  • home: un ambiente domestico. In genere implica che ti fidi della maggior parte degli altri computer e che verranno accettati alcuni altri servizi.
  • trusted: fidati di tutte le macchine della rete. La più aperta delle opzioni disponibili e dovrebbe essere usata con parsimonia.

Per utilizzare il firewall, possiamo creare regole e modificare le proprietà delle nostre zone e quindi assegnare le nostre interfacce di rete a qualsiasi zona sia più appropriata.

Permanenza delle regole

In firewalld, le regole possono essere applicate al set di regole di runtime corrente o essere rese permanenti. Quando una regola viene aggiunta o modificata, per impostazione predefinita viene modificato solo il firewall attualmente in esecuzione. Dopo il successivo riavvio o dopo aver ricaricato il servizio firewalld, come risultato rimarranno solo le regole permanenti.
La maggior parte delle operazioni firewall-cmd possono prendere un flag –permanent per indicare che le modifiche devono essere applicate alla configurazione permanentemente. Inoltre, il firewall attualmente in esecuzione può essere salvato nella configurazione permanente con il comando firewall-cmd –runtime-to-permanent.
In seguito a questa separazione tra runtime e configurazione permanente puoi testare in sicurezza le regole nel tuo firewall attivo, quindi ricaricare per ricominciare se ci sono problemi.

NOTA: i comandi vanno eseguiti con l’utente root o con un utente con poteri di root oppure anteponendo sudo al comando

Installare e abilitare firewalld su Centos 8

firewalld è installato di default su alcune distribuzioni Linux, incluse molte immagini di CentOS 8. Tuttavia, potrebbe essere necessario installare firewalld da soli:

# dnf install firewalld

In seguito all’installazione di firewalld, è possibile abilitare il servizio e riavviare il server. Tenere presente che l’abilitazione di firewalld provoca l’avvio del servizio all’avvio. Nel frattempo è consigliabile creare le regole del firewall e cogliere l’occasione per testarle prima di configurare questo comportamento al fine di evitare potenziali problemi:

# systemctl enable firewalld
# systemctl start firewalld

Al riavvio del server, il firewall deve essere attivato, le interfacce di rete devono essere collocate nelle zone configurate (o ricadere nella zona predefinita configurata) e tutte le regole associate alle zone verranno applicate alle interfacce associate.

Possiamo verificare che il servizio sia in esecuzione e raggiungibile digitando:

# firewall-cmd –state

Outpoot:
running

Ciò indica che il nostro firewall è attivo e funzionante con la configurazione predefinita.

Acquisire familiarità con le attuali regole del firewall

Prima di iniziare ad apportare modifiche in altre parole, dovremmo familiarizzare con l’ambiente e le regole predefiniti forniti da firewalld.

Esplorazione dei valori predefiniti

Possiamo vedere quale zona è attualmente selezionata come predefinita digitando:

# firewall-cmd –get-default-zone

Output:
public

Poiché non abbiamo dato al firewalld alcun comando per deviare dalla zona predefinita e nessuna delle nostre interfacce è configurata per collegarsi a un’altra zona, quella zona sarà anche l’unica zona attiva (la zona che controlla il traffico per le nostre interfacce) . Possiamo verificarlo digitando:

# firewall-cmd –get-active-zones

Output:
public
interfaces: eth0 eth1

Qui, possiamo vedere che il nostro server per esempio ha due interfacce di rete controllate dal firewall (eth0 ed eth1). Entrambi sono attualmente gestiti secondo le regole definite per la zona public.

In aggiunta come facciamo a sapere quali regole sono associate alla zona public? Possiamo stampare la configurazione della zona predefinita digitando:

# firewall-cmd –list-all

Output:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Ancora. dall’output possiamo dire che questa zona è sia quella predefinita sia quella attiva e che le interfacce eth0 ed eth1 sono associate a questa zona (già sapevamo tutto questo dalle nostre precedenti indagini). Tuttavia, possiamo anche vedere che questa zona consente il traffico per un client DHCP (per l’assegnazione dell’indirizzo IP), SSH (per l’amministrazione remota) e Cockpit (una console basata sul web).

Esplorazione di zone alternative

Ora abbiamo una buona idea della configurazione per la zona predefinita e attiva, dopo questo possiamo trovare informazioni anche su altre zone.
Per ottenere un elenco delle zone disponibili digitare:

# firewall-cmd –get-zones

Output:
block dmz drop external home internal public trusted work

Inoltre possiamo vedere la configurazione specifica associata ad una zona includendo il parametro –zone = nel nostro comando –list-all:

# firewall-cmd –zone=home –list-all

Output:
home target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Puoi generare tutte le definizioni delle zone usando l’opzione –list-all-zone. Quindi probabilmente vorrai reindirizzare l’output in una forma impaginata per una visualizzazione più semplice:

# firewall-cmd –list-all-zones | less

Comunque successivamente impareremo come assegnare zone alle interfacce di rete.

Selezione delle zone per le tue interfacce

A meno che non siano state configurate le interfacce di rete ogni interfaccia verrà inserita nell’area predefinita all’avvio del firewall.

Modifica della zona di un’interfaccia

Puoi spostare un’interfaccia tra le zone durante una sessione usando il parametro –zone = in combinazione con il parametro –change-interface =
Ad esempio, possiamo spostare la nostra interfaccia eth0 nella zona principale digitando questo:

# firewall-cmd –zone=home –change-interface=eth0

Output:
success

Nota: ogni volta che si sposta un’interfaccia in una nuova zona, tenere presente che probabilmente si sta modificando quali servizi saranno operativi. Per esempio, qui ci stiamo spostando nella zona di casa, che ha SSH disponibile. Di conseguenza ciò significa che la nostra connessione non dovrebbe cadere. Alcune altre zone non hanno SSH abilitato per impostazione predefinita e il passaggio a una di queste zone potrebbe causare l’interruzione della connessione, impedendo di accedere nuovamente al server.

Possiamo verificare che ciò abbia avuto successo chiedendo di nuovo le zone attive:

# firewall-cmd –get-active-zones

Output:
home
interfaces: eth0
public
interfaces: eth1

Regolazione della zona predefinita

Se tutte le tue interfacce possono essere gestite bene da una singola zona, è probabilmente più semplice designare la zona migliore come predefinita e quindi usarla per la tua configurazione.
Puoi cambiare la zona predefinita con il parametro –set-default-zone = Questo cambierà immediatamente qualsiasi interfaccia usando la zona predefinita:

# firewall-cmd –set-default-zone=home

Output:
success

Impostazione delle regole per le tue applicazioni

A questo punto esaminiamo il modo di base per definire le eccezioni del firewall soprattutto per i servizi che desideri rendere disponibili.

Aggiunta di un servizio alle zone

Il metodo più diretto è quello di aggiungere i servizi o le porte necessari alle zone in uso. Quindi puoi ottenere un elenco delle definizioni di servizio disponibili con l’opzione –get-services:

# firewall-cmd –get-services

Output:
samba samba-client

Nota: è possibile ottenere maggiori dettagli su ciascuno di questi servizi guardando il file .xml associato nella directory/usr/lib/firewalld/services. Ad esempio, il servizio SSH è definito in questo modo:

/usr/lib/firewalld/services/ssh.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) è un protocollo per l’accesso e l’esecuzione di comandi su macchine remote. Fornisce comunicazioni crittografate sicure. Se si prevede di accedere in remoto alla macchina tramite SSH tramite un’interfaccia con firewall, abilitare questa opzione. È necessario che il pacchetto openssh-server sia installato affinché questa opzione sia funzionante.</description>
<port protocol=”tcp” port=”22″/>
</service>

Ti è possibile abilitare un servizio per una zona usando il parametro –add-service =. L’operazione avrà come target la zona predefinita o qualunque zona sia specificata dal parametro –zone =. Per impostazione predefinita, questo regola solo la sessione firewall corrente. È possibile regolare la configurazione permanente del firewall includendo il flag –permanent.
Ad esempio, se stiamo eseguendo un server Web che serve traffico HTTP convenzionale, possiamo temporaneamente consentire questo traffico per le interfacce nella nostra area pubblica digitando:

# firewall-cmd –zone=public –add-service=http

È possibile escludere il flag –zone = se si desidera modificare la zona predefinita. In altre parole Possiamo verificare che l’operazione sia andata a buon fine usando le operazioni –list-all o –list-services:

# firewall-cmd –zone=public –list-services

Output:
cockpit dhcpv6-client http ssh

Dopo aver verificato che tutto funzioni come dovrebbe, probabilmente vorrai modificare le regole permanenti del firewall in modo che il tuo servizio sia ancora disponibile dopo il riavvio. In sostanza possiamo rendere permanenti le nostre modifiche precedenti digitandole nuovamente e aggiungendo il flag –permanent:

# firewall-cmd –zone=public –add-service=http –permanent

Output:
success

In alternativa, è possibile utilizzare il flag –runtime-to-permanent per salvare la configurazione del firewall attualmente in esecuzione nella configurazione permanente:

# firewall-cmd –runtime-to-permanent

Fai attenzione, poiché tutte le modifiche apportate al firewall in esecuzione verranno confermate in modo permanente.
Qualunque metodo tu scelga, puoi verificare che abbia avuto successo aggiungendo il flag –permanent all’operazione –list-services.

# firewall-cmd –zone=public –list-services –permanent

Output:
cockpit dhcpv6-client http ssh

Di conseguenza la tua zona pubblica consentirà ora il traffico web HTTP sulla porta 80. Se il tuo server web è configurato per utilizzare SSL / TLS, vorrai anche aggiungere il servizio https. Possiamo aggiungerlo alla sessione corrente e al set di regole permanente digitando:

# firewall-cmd –zone=public –add-service=https
# firewall-cmd –zone=public –add-service=https –permanent

Cosa succede se non è disponibile un servizio adeguato

I servizi inclusi con l’installazione di firewalld rappresentano molte delle applicazioni più comuni a cui potresti voler consentire l’accesso. Tuttavia, ci saranno probabilmente scenari in cui questi servizi non soddisfano le tue esigenze.

In questa situazione, hai due opzioni.

Aprire una porta per le tue zone

Il modo più semplice per aggiungere supporto per l’applicazione specifica è aprire le porte che utilizza nelle zone appropriate. Questo viene fatto specificando la porta o l’intervallo di porte e il protocollo associato (TCP o UDP) per le porte. Ad esempio, se la nostra applicazione viene eseguita sulla porta 5000 e utilizza TCP, è possibile aggiungerla temporaneamente alla zona pubblica utilizzando il parametro –add-port =.
I protocolli possono essere designati come tcp o udp:

# firewall-cmd –zone=public –add-port=5000/tcp

Output:
success

Possiamo verificare che ciò abbia avuto successo usando l’operazione –list-port:

# firewall-cmd –zone=public –list-ports

Output:
5000/tcp

È anche possibile specificare un intervallo sequenziale di porte separando la porta iniziale e finale nell’intervallo con un trattino. Ad esempio, se la nostra applicazione utilizza le porte UDP da 4990 a 4999, potremmo aprirle pubblicamente digitando:

# firewall-cmd –zone=public –add-port=4990-4999/udp

Ora, dopo il test, vorremmo probabilmente aggiungerli al firewall permanentemente. Quindi usa firewall-cmd –runtime-to-permanent per farlo, oppure riesegui i comandi con il flag –permanent:

# firewall-cmd –zone=public –permanent –add-port=5000/tcp
# firewall-cmd –zone=public –permanent –add-port=4990-4999/udp
# firewall-cmd –zone=public –permanent –list-ports

Output:
success
success
5000/tcp 4990-4999/udp

Definizione di un servizio

Aprire le porte per le tue zone è una soluzione semplice, ma può essere difficile tenere traccia di ciò a cui ciascuna è destinata. In caso di smantellamento di un servizio sul server, potrebbe essere difficile ricordare quali porte sono state ancora aperte. Per evitare questa situazione, è possibile definire un nuovo servizio.

I servizi sono raccolte di porte con un nome e una descrizione associati. L’utilizzo dei servizi è più semplice da gestire rispetto alle porte, ma richiede un po ‘di lavoro iniziale. Il modo più semplice per iniziare è copiare uno script esistente (presente in /usr/lib/firewalld/services) nella directory /etc/firewalld/services dove il firewall cerca definizioni non standard.

Ad esempio, potremmo copiare la definizione di servizio SSH da utilizzare per la nostra definizione di servizio di esempio in questo modo. Il nome del file meno il suffisso .xml determinerà il nome del servizio nell’elenco dei servizi firewall:

# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/esempio.xml

Ora puoi regolare la definizione trovata nel file che hai copiato. Per prima cosa aprilo nel tuo editor di testo preferito. Quindi useremo vi qui:

# vi /etc/firewalld/services/esempio.xml

Adesso come puoi vedere, il file conterrà la definizione SSH che hai copiato:

/etc/firewalld/services/example.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) è un protocollo per l’accesso e l’esecuzione di comandi su macchine remote. Fornisce comunicazioni crittografate sicure. Se si prevede di accedere in remoto alla macchina tramite SSH tramite un’interfaccia con firewall, abilitare questa opzione. È necessario che il pacchetto openssh-server sia installato affinché questa opzione sia funzionante.</description>
<port protocol=”tcp” port=”22″/>
</service>

La maggior parte di questa definizione è in realtà metadata. Dovrai cambiare il nome breve per il servizio all’interno dei tag . Questo è un nome leggibile per il tuo servizio. È inoltre necessario aggiungere una descrizione in modo da disporre di ulteriori informazioni in caso di necessità di revisione del servizio. L’unica configurazione che devi fare e che influisce effettivamente sulla funzionalità del servizio sarà probabilmente la definizione della porta in cui identifichi il numero di porta e il protocollo che desideri aprire. È possibile specificare più tag .

Per il nostro servizio di esempio, immagina di dover aprire la porta 7777 per TCP e 8888 per UDP. Possiamo modificare la definizione esistente con qualcosa del genere:

/etc/firewalld/services/esempio.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<service>
<short>Servizio di esempio</short>
<description>Questo è solo un servizio di esempio, non dovrebbe essere usato su un sistema reale.</description>
<port protocol=”tcp” port=”7777″/>
<port protocol=”udp” port=”7777″/>
</service>

Salva e chiudi il file.

Adesso ricarica il tuo firewall per ottenere l’accesso al tuo nuovo servizio:

# firewall-cmd –reload

Puoi vedere che è ora nell’elenco dei servizi disponibili:

# firewall-cmd –get-services

Output:
samba samba-client esempio

Ora puoi utilizzare questo servizio nelle tue zone come faresti normalmente.

Creare le tue zone

Mentre le zone predefinite saranno probabilmente più che sufficienti per la maggior parte degli utenti, può essere utile definire le proprie zone che sono più descrittive della loro funzione.

Ad esempio, potresti voler creare una zona per il tuo server web, chiamata webpubblico. Tuttavia, è possibile che si desideri configurare un’altra zona per il servizio DNS fornito sulla rete privata. Potresti desiderare una zona chiamata “DNSprivato” per questo.

Quando si aggiunge una zona, è necessario aggiungerla alla configurazione del firewall permanentemente. È quindi possibile ricaricare per portare la configurazione nella sessione in esecuzione. Ad esempio, potremmo creare le due zone di cui abbiamo discusso in precedenza digitando:

# firewall-cmd –permanent –new-zone=webpubblico
# firewall-cmd –permanent –new-zone=DNSprivato

Puoi verificare che siano presenti nella tua configurazione permanente digitando:

# firewall-cmd –permanent –get-zones

Output:
block dmz DNSprivato drop external home internal public trusted webpubblico work

Come affermato in precedenza, questi non saranno ancora disponibili nel firewall di runtime:

# firewall-cmd –get-zones

Output:
block dmz drop external home internal public trusted work

Adesso ricarica il firewall per portare queste nuove zone nella configurazione di runtime attiva:

# sudo firewall-cmd –reload
# firewall-cmd –get-zones

Output:
block dmz DNSprivato drop external home internal public trusted webpubblico work

Ora puoi iniziare ad assegnare i servizi e le porte appropriati alle tue zone. Di solito è una buona idea regolare il firewall di runtime e quindi salvare le modifiche alla configurazione permanentemente dopo il test. Ad esempio, per la zona webpubblico, potresti voler aggiungere i servizi SSH, HTTP e HTTPS:

# firewall-cmd –zone=webpubblico –add-service=ssh
# firewall-cmd –zone=webpubblico –add-service=http
# firewall-cmd –zone=webpubblico –add-service=https
# firewall-cmd –zone=webpubblico –list-all

Output:
webpubblico
target: default
icmp-block-inversion: no
interfaces:
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Allo stesso modo, possiamo aggiungere il servizio DNS alla nostra zona DNSprivato:

# firewall-cmd –zone=privateDNS –add-service=dns
# firewall-cmd –zone=privateDNS –list-all

Output:
DNSprivato
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dns
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Potremmo quindi cambiare le nostre interfacce su queste nuove zone per testarle:

# firewall-cmd –zone=webpubblico –change-interface=eth0
# firewall-cmd –zone=DNSprivato –change-interface=eth1

A questo punto, hai l’opportunità di testare la tua configurazione. Se questi valori funzionano per te, ti consigliamo di aggiungere queste regole alla configurazione permanentemente. Puoi farlo eseguendo di nuovo tutti i comandi con il flag –permanent aggiunto, ma in questo caso useremo il flag –runtime-to-permanent per salvare la nostra intera configurazione di runtime in modo permanente:

# firewall-cmd –runtime-to-permanent

Dopo aver applicato queste regole in modo permanente, ricaricare il firewall per verificare che le modifiche rimangano:

# sudo firewall-cmd –reload

Convalida che sono state assegnate le zone corrette:

# firewall-cmd –get-active-zones

Output:
DNSprivato
interfaces: eth1
webpubblico
interfaces: eth0

E convalidare la disponibilità dei servizi appropriati per entrambe le zone:

# firewall-cmd –zone=wepubblico –list-services

Output:
http https ssh

# firewall-cmd –zone=DNSprivato –list-services

Output:
dns

Hai impostato con successo le tue zone! Se vuoi rendere una di queste zone predefinita per altre interfacce, ricorda di configurare quel comportamento con il parametro –set-default-zone =:

# firewall-cmd –set-default-zone=webpubblico

Per ulteriori informazioni su come configurare firewalld su Centos 8, consultare la documentazione ufficiale di firewalld.

Rispondi

%d blogger hanno fatto clic su Mi Piace per questo: