GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come configurare e gestire il firewall su CentOS 8

Un firewall è un metodo per monitorare e filtrare il traffico di rete in entrata e in uscita. Funziona definendo un insieme di regole di sicurezza che determinano se consentire o bloccare un traffico specifico. Un firewall correttamente configurato è uno degli aspetti più importanti della sicurezza generale del sistema.

CentOS 8 viene fornito con un demone firewall denominato firewalld. È una soluzione completa con interfaccia D-Bus che permette di gestire il firewall del sistema in modo dinamico.

In questo tutorial parleremo di come configurare e gestire il firewall su CentOS 8. Spiegheremo anche i concetti di base di FirewallD.

Prerequisiti #

Per configurare il servizio firewall, devi essere loggato come root o utente con privilegi sudo.

Concetti di base di Firewalld #

firewalld utilizza i concetti di zone e servizi. In base alle zone e ai servizi che configurerai, puoi controllare quale traffico è consentito o bloccato da e verso il sistema.

Firewalld può essere configurato e gestito utilizzando il firewall-cmd utilità della riga di comando.

In CentOS 8, iptables è sostituito da nftables come backend firewall predefinito per il demone firewalld.

Zone Firewall #

Le zone sono insiemi predefiniti di regole che specificano il livello di attendibilità delle reti a cui è connesso il computer. Puoi assegnare interfacce di rete e sorgenti a una zona.

Di seguito sono elencate le zone fornite da FirewallD ordinate in base al livello di attendibilità della zona da non attendibile a attendibile:

  • abbandona :tutte le connessioni in entrata vengono interrotte senza alcuna notifica. Sono consentite solo le connessioni in uscita.
  • blocco :Tutte le connessioni in entrata vengono rifiutate con un icmp-host-prohibited messaggio per IPv4 e icmp6-adm-prohibited per IPv6n. Sono consentite solo le connessioni in uscita.
  • pubblico :Per l'uso in aree pubbliche non affidabili. Non ti fidi di altri computer sulla rete, ma puoi consentire connessioni in ingresso selezionate.
  • esterno :da utilizzare su reti esterne con mascheramento NAT abilitato quando il sistema funge da gateway o router. Sono consentite solo le connessioni in entrata selezionate.
  • interno :da utilizzare su reti interne quando il sistema funge da gateway o router. Gli altri sistemi sulla rete sono generalmente affidabili. Sono consentite solo le connessioni in entrata selezionate.
  • dmz :Utilizzato per i computer situati nella tua zona demilitarizzata che hanno un accesso limitato al resto della tua rete. Sono consentite solo le connessioni in entrata selezionate.
  • lavoro :Utilizzato per macchine da lavoro. Gli altri computer della rete sono generalmente attendibili. Sono consentite solo le connessioni in entrata selezionate.
  • casa :Usato per macchine domestiche. Gli altri computer della rete sono generalmente attendibili. Sono consentite solo le connessioni in entrata selezionate.
  • fidato :Vengono accettate tutte le connessioni di rete. Fidati di tutti i computer della rete.

Servizi firewall #

I servizi firewall sono regole predefinite che si applicano all'interno di una zona e definiscono le impostazioni necessarie per consentire il traffico in entrata per un servizio specifico. I servizi ti consentono di eseguire facilmente diverse attività in un unico passaggio.

Ad esempio, il servizio può contenere definizioni sull'apertura di porte, sull'inoltro del traffico e altro ancora.

Runtime di Firewalld e impostazioni permanenti #

Firewalld utilizza due set di configurazione separati, runtime e configurazione permanente.

La configurazione di runtime è la configurazione in esecuzione effettiva e non persiste al riavvio. Quando il demone firewalld si avvia, carica la configurazione permanente, che diventa la configurazione di runtime.

Per impostazione predefinita, quando si apportano modifiche alla configurazione di Firewalld utilizzando il firewall-cmd utility, le modifiche vengono applicate alla configurazione di runtime. Per rendere permanenti le modifiche, aggiungi il --permanent opzione al comando.

Per applicare le modifiche in entrambi i set di configurazione, puoi utilizzare uno dei due metodi seguenti:

  1. Modifica la configurazione del runtime e rendila permanente:

    sudo firewall-cmd <options>sudo firewall-cmd --runtime-to-permanent
  2. Modifica la configurazione permanente e ricarica il demone firewalld:

    sudo firewall-cmd --permanent <options>sudo firewall-cmd --reload

Abilitazione FirewallD #

Su CentOS 8, firewalld è installato e abilitato per impostazione predefinita. Se per qualche motivo non è installato sul tuo sistema, puoi installare e avviare il demone digitando:

sudo dnf install firewalldsudo systemctl enable firewalld --now

Puoi controllare lo stato del servizio firewall con:

sudo firewall-cmd --state

Se il firewall è abilitato, il comando dovrebbe stampare running . In caso contrario, vedrai not running .

Zone Firewall #

Se non l'hai modificata, la zona predefinita è impostata su public e tutte le interfacce di rete sono assegnate a questa zona.

La zona predefinita è quella utilizzata per tutto ciò che non è esplicitamente assegnato a un'altra zona.

Puoi vedere la zona predefinita digitando:

sudo firewall-cmd --get-default-zone
public

Per ottenere un elenco di tutte le zone disponibili, digita:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Per vedere le zone attive e le interfacce di rete ad esse assegnate:

sudo firewall-cmd --get-active-zones

L'output seguente mostra che le interfacce eth0 e eth1 sono assegnati al public zona:

public
  interfaces: eth0 eth1

È possibile stampare le impostazioni di configurazione della zona con:

sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Dall'output sopra, possiamo vedere che la zona pubblica è attiva e utilizza il target predefinito, che è REJECT . L'output mostra anche che la zona è utilizzata da eth0 e eth1 interfacce e consente client DHCP e traffico SSH.

Se vuoi controllare le configurazioni di tutte le zone disponibili digita:

sudo firewall-cmd --list-all-zones

Il comando stampa un enorme elenco con le impostazioni di tutte le zone disponibili.

Cambiare il target della zona #

La destinazione definisce il comportamento predefinito della zona per il traffico in entrata non specificato. Può essere impostato su una delle seguenti opzioni:default , ACCEPT , REJECT e DROP .

Per impostare il target della zona, specifica la zona con il --zone opzione e il target con il --set-target opzione.

Ad esempio, per modificare il public destinazione della zona a DROP correresti:

sudo firewall-cmd --zone=public --set-target=DROP

Assegnazione di un'interfaccia a una zona diversa #

È possibile creare insiemi di regole specifici per zone diverse e assegnare loro interfacce diverse. Ciò è particolarmente utile quando hai più interfacce sulla tua macchina.

Per assegnare un'interfaccia a una zona diversa, specificare la zona con il --zone opzione e l'interfaccia con --change-interface opzione.

Ad esempio, il comando seguente assegna il eth1 interfaccia al work zona:

sudo firewall-cmd --zone=work --change-interface=eth1

Verifica le modifiche digitando:

sudo firewall-cmd --get-active-zones
work
  interfaces: eth1
public
  interfaces: eth0

Modifica della zona predefinita #

Per cambiare la zona predefinita, usa il --set-default-zone opzione seguita dal nome della zona che vuoi rendere predefinita.

Ad esempio, per cambiare la zona predefinita in home eseguiresti il ​​seguente comando:

sudo firewall-cmd --set-default-zone=home

Verifica le modifiche con:

sudo firewall-cmd --get-default-zone
home

Creazione di nuove zone #

Firewalld ti consente anche di creare le tue zone. Questo è utile quando vuoi creare regole per applicazione.

Nell'esempio seguente creeremo una nuova zona denominata memcached , apri la porta 11211 e consenti l'accesso solo dal 192.168.100.30 Indirizzo IP:

  1. Crea la zona:

    sudo firewall-cmd --new-zone=memcached --permanent
  2. Aggiungi le regole alla zona:

    sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanentsudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanentsudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
  3. Ricarica il demone firewalld per attivare le modifiche:

    sudo firewall-cmd --reload

Servizi Firewalld #

Con firewalld puoi consentire il traffico per porte e/o sorgenti specifiche in base a regole predefinite chiamate servizi.

Per ottenere un elenco di tutti i servizi disponibili predefiniti, digita:

sudo firewall-cmd --get-services

Puoi trovare maggiori informazioni su ciascun servizio aprendo il file .xml associato all'interno di /usr/lib/firewalld/services directory. Ad esempio, il servizio HTTP è definito in questo modo:

/usr/lib/firewalld/services/http.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

Per consentire il traffico HTTP in entrata (porta 80) per le interfacce nell'area pubblica, solo per la sessione corrente (configurazione runtime) digitare:

sudo firewall-cmd --zone=public --add-service=http
Se stai modificando la zona predefinita puoi omettere --zone opzione.

Per verificare che il servizio sia stato aggiunto correttamente, utilizza --list-services opzione:

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

Per mantenere aperta la porta 80 dopo un riavvio, eseguire lo stesso comando ancora una volta con --permanent opzione o eseguire:

sudo firewall-cmd --runtime-to-permanent

Usa --list-services insieme al --permanent opzione per verificare le modifiche:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

La sintassi per rimuovere il servizio è la stessa di quando ne aggiungi uno. Usa semplicemente --remove-service invece di --add-service bandiera:

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

Il comando sopra rimuove http servizio dalla configurazione permanente della zona pubblica.

Creazione di un nuovo servizio FirewallD #

Come abbiamo già accennato, i servizi predefiniti sono archiviati in /usr/lib/firewalld/services directory. Il modo più semplice per creare un nuovo servizio è copiare un file di servizio esistente in /etc/firewalld/services directory, che è la posizione per i servizi creati dall'utente e modificare le impostazioni del file.

Ad esempio, per creare una definizione di servizio per Plex Media Server, puoi utilizzare il file di servizio SSH:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

Apri il plexmediaserver.xml appena creato file e modificare il nome breve e la descrizione del servizio all'interno del <short> e <description> tag. Il tag più importante che devi modificare è il port tag, che definisce il numero di porta e il protocollo che desideri aprire.

Nell'esempio seguente, stiamo aprendo le porte 1900 UDP e 32400 TCP.

/etc/firewalld/services/plexmediaserver.xml
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>

Salva il file e ricarica il servizio FirewallD:

sudo firewall-cmd --reload

Ora puoi usare il plexmediaserver servizio nelle tue zone come qualsiasi altro servizio.

Apertura di porte e IP di origine #

Firewalld consente inoltre di abilitare rapidamente tutto il traffico da un indirizzo IP affidabile o su una porta specifica senza creare una definizione di servizio.

Apertura di un IP sorgente #

Per consentire tutto il traffico in entrata da un indirizzo IP (o intervallo) specifico, specifica la zona con il --zone opzione e l'IP di origine con --add-source opzione.

Ad esempio, per consentire tutto il traffico in entrata da 192.168.1.10 nel public zona, corri:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

Rendi persistente la nuova regola:

sudo firewall-cmd --runtime-to-permanent

Verifica le modifiche utilizzando il seguente comando:

sudo firewall-cmd --zone=public --list-sources
192.168.1.10

La sintassi per rimuovere un IP di origine è la stessa di quando si aggiunge uno. Usa semplicemente --remove-source invece del --add-source opzione:

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

Apertura di una porta di origine #

Per consentire tutto il traffico in entrata su una determinata porta, specifica la zona con --zone opzione e la porta e il protocollo con --add-port opzione.

Ad esempio, per aprire la porta 8080 nella zona pubblica per la sessione corrente che hai eseguito:

sudo firewall-cmd --zone=public --add-port=8080/tcp

Il protocollo può essere tcp , udp , sctp o dccp .

Verifica le modifiche:

sudo firewall-cmd --zone=public --list-ports
8080

Per mantenere la porta aperta dopo un riavvio, aggiungi la regola alle impostazioni permanenti eseguendo lo stesso comando usando il --permanent flag o eseguendo:

sudo firewall-cmd --runtime-to-permanent

La sintassi per rimuovere una porta è la stessa di quando si aggiunge una porta. Usa semplicemente --remove-port invece di --add-port opzione.

sudo firewall-cmd --zone=public --remove-port=8080/tcp

Porte di inoltro #

Per inoltrare il traffico da una porta a un'altra, abilita prima il masquerading per la zona desiderata usando il --add-masquerade opzione. Ad esempio, per abilitare il mascheramento per l'external zona, digitare:

sudo firewall-cmd --zone=external --add-masquerade

Inoltra il traffico da una porta all'altra sull'indirizzo IP #

Nell'esempio seguente stiamo inoltrando il traffico dalla porta 80 alla porta 8080 sullo stesso server:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

Inoltra traffico a un altro indirizzo IP #

Nell'esempio seguente stiamo inoltrando il traffico dalla porta 80 per portare 80 su un server con IP 10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

Inoltra il traffico a un altro server su una porta diversa #

Nell'esempio seguente stiamo inoltrando il traffico dalla porta 80 alla porta 8080 su un server con IP 10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

Per rendere persistente la regola forward, usa:

sudo firewall-cmd --runtime-to-permanent

Cent OS
  1. Come installare e configurare Nginx su CentOS 7

  2. Come abilitare e utilizzare firewalld su CentOS 7

  3. Come configurare un firewall con FirewallD su CentOS 7

  4. Come configurare il firewall su CentOS 7

  5. Come installare e configurare HAProxy su CentOS?

Come installare e configurare CSF (Config Server Firewall) su CentOS 7

Come fermare e disabilitare il firewall su CentOS 8

Come installare e configurare Nagios 4.0.7 su CentOS 7

Come installare e configurare ISPConfig CP su CentOS 7

Come installare e configurare ownCloud su CentOS 7

Come configurare FirewallD in RHEL, CentOS e Fedora