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

Come configurare un firewall con FirewallD su CentOS 7

Un firewall correttamente configurato è uno degli aspetti più importanti della sicurezza generale del sistema.

FirewallDis è una soluzione firewall completa che gestisce le regole iptables del sistema e fornisce un'interfaccia D-Bus per operare su di esse. A partire da CentOS 7, FirewallD sostituisce iptables come strumento di gestione del firewall predefinito.

In questo tutorial, ti mostriamo come configurare un firewall con FirewallD sul tuo sistema CentOS 7 e ti spieghiamo i concetti di base di FirewallD.

Prerequisiti #

Prima di iniziare con questo tutorial, assicurati di aver effettuato l'accesso al tuo server con un account utente con privilegi sudo o con l'utente root. La procedura migliore consiste nell'eseguire i comandi amministrativi come utente sudo anziché come root. Se non hai un utente sudo sul tuo sistema CentOS, puoi crearne uno seguendo queste istruzioni.

Concetti di base di Firewalld #

FirewallD utilizza i concetti di zone e servizi, invece di catena e regole iptables. In base alle zone e ai servizi che configurerai, puoi controllare quale traffico è consentito o non consentito da e verso il sistema.

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

Zone Firewall #

Le zone sono insiemi predefiniti di regole che specificano quale traffico deve essere consentito in base al 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.

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 è persistente al riavvio. All'avvio, il servizio Firewalld 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 è necessario utilizzare il --permanent opzione.

Installazione e abilitazione del firewallD #

  1. Firewalld è installato di default su CentOS 7, ma se non è installato sul tuo sistema, puoi installare il pacchetto digitando:

    sudo yum install firewalld
  2. Il servizio Firewalld è disabilitato per impostazione predefinita. Puoi controllare lo stato del firewall con:

    sudo firewall-cmd --state

    Se hai appena installato o non hai mai attivato prima, il comando stamperà not running . Altrimenti vedrai running .

  3. Per avviare il servizio FirewallD e abilitarlo all'avvio, digitare:

    sudo systemctl start firewalldsudo systemctl enable firewalld

Lavorare con Firewalld Zones #

Dopo aver abilitato per la prima volta il servizio FirewallD, il public la zona è impostata come zona predefinita. Puoi visualizzare 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 impostazione predefinita, a tutte le interfacce di rete viene assegnata la zona predefinita. Per verificare quali zone sono utilizzate dalle tue interfacce di rete, digita:

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

L'output sopra ci dice che entrambe le interfacce eth0 e eth1 sono assegnati alla zona pubblica.

È 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 impostata come predefinita, utilizzata da entrambi eth0 e eth1 interfacce. Inoltre, sono consentite le connessioni relative al client DHCP e 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 la zona di un'interfaccia #

Puoi facilmente cambiare la zona di interfaccia usando la --zone opzione in combinazione con --change-interface opzione. Il comando seguente assegnerà il eth1 interfaccia alla zona di lavoro:

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 di default in casa dovresti eseguire il seguente comando:

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

Verifica le modifiche con:

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

Apertura di una porta o di un servizio #

Con FirewallD puoi consentire il traffico per porte 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

Se vuoi mantenere aperta la porta 80 dopo un riavvio, dovrai digitare lo stesso comando ancora una volta, ma questa volta con il --permanent opzione:

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

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 si aggiunge un servizio. Usa semplicemente --remove-service invece di --add-service opzione:

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

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

Cosa succede se stai eseguendo un'applicazione come Plex Media Server per la quale non è disponibile un servizio appropriato?

In situazioni come queste, hai due opzioni. Puoi aprire le porte appropriate o definire un nuovo servizio FirewallD.

Ad esempio, Plex Server è in ascolto sulla porta 32400 e utilizza TCP, per aprire la porta nella zona pubblica per la sessione corrente utilizzare il --add-port= opzione:

sudo firewall-cmd --zone=public --add-port=32400/tcp
I protocolli possono essere tcp o udp .

Per verificare che la porta sia stata aggiunta correttamente, usa --list-ports opzione:

sudo firewall-cmd --zone=public --list-ports
32400/tcp

Per mantenere la porta 32400 apri dopo un riavvio, aggiungi la regola alle impostazioni permanenti eseguendo lo stesso comando usando il --permanent opzione.

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=32400/tcp

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 possiamo 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..

Porta di inoltro con Firewalld #

Per inoltrare il traffico da una porta a un'altra porta o indirizzo, prima abilita il masquerading per la zona desiderata usando il --add-masquerade interruttore. Ad esempio per abilitare il masquerading per external tipo di zona:

sudo firewall-cmd --zone=external --add-masquerade
  • Inoltra il traffico da una porta all'altra sullo stesso server

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 il traffico a un altro server

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

Se vuoi rendere permanente l'inoltro, aggiungi il --permanent opzione.

Creazione di un set di regole con FirewallD #

Nell'esempio seguente, mostreremo come configurare il firewall se stavi eseguendo un server web. Supponiamo che il tuo server abbia una sola interfaccia eth0 e desideri consentire il traffico in entrata solo sulle porte SSH, HTTP e HTTPS.

  1. Cambia la zona predefinita in dmz

    Utilizzeremo la zona dmz (demilitarizzata) perché per impostazione predefinita consente solo il traffico SSH. Per cambiare la zona di default in dmz e assegnarla a eth0 interfaccia, esegui i seguenti comandi:

    sudo firewall-cmd --set-default-zone=dmzsudo firewall-cmd --zone=dmz --add-interface=eth0
  2. Apri le porte HTTP e HTTPS:

    Per aprire le porte HTTP e HTTPS aggiungi regole di servizio permanenti alla zona dmz:

    sudo firewall-cmd --permanent --zone=dmz --add-service=httpsudo firewall-cmd --permanent --zone=dmz --add-service=https

    Rendi immediatamente effettive le modifiche ricaricando il firewall:

    sudo firewall-cmd --reload
  3. Verifica le modifiche

    Per controllare le impostazioni di configurazione della zona dmz digitare:

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

    L'output sopra ci dice che dmz è la zona predefinita, viene applicata a eth0 interface e le porte ssh (22) http (80) e https (443) sono aperte.


Cent OS
  1. Configura Firewall con FirewallD su CentOS 7

  2. Come disabilitare il firewall su CentOS 8 Linux

  3. Come configurare il firewall utilizzando FirewallD su CentOS 8

  4. Come configurare un firewall con iptables su Ubuntu e CentOS

  5. Come configurare un firewall con UFW su Ubuntu 16.04

Come configurare e gestire il firewall su CentOS 8

Come configurare un firewall con UFW su Debian 10

Come configurare un firewall con UFW su Debian 9

Come fermare e disabilitare il firewall su CentOS 8

Come configurare un firewall con GUFW su Linux

Come configurare una VPN basata su IPsec con Strongswan su CentOS/RHEL 8