firewalld
per Principianti¶
Introduzione¶
Molto tempo fa, ero un piccolo utente di computer alle prime armi che aveva sentito dire che avere un firewall doveva essere super buono. Mi permetterebbe di decidere cosa entra e cosa esce dal mio computer, giusto? Ma sembrava soprattutto che impedisse ai miei videogiochi di accedere a Internet; non ne ero felice.
Naturalmente, se siete qui, probabilmente avete un'idea migliore di me su cosa sia un firewall e cosa faccia. Ma se la vostra esperienza con il firewall consiste nel dire a Windows Defender che la vostra nuova applicazione è autorizzata a utilizzare Internet, non preoccupatevi. Come indicato nel titolo del documento, questa guida è destinata a voi (e ad altri principianti)!
Parliamo quindi del motivo per cui siamo qui. firewalld
è l'applicazione firewall predefinita fornita con Rocky Linux ed è stata progettata per essere piuttosto semplice da usare. È necessario conoscere un po' i firewall e non avere paura di usare la riga di comando.
Qui imparerete:
- Le basi del funzionamento di
firewalld
- Come usare
firewalld
per limitare o permettere le connessioni in entrata e in uscita - Come permettere solo alle persone di certi indirizzi IP o luoghi di accedere alla tua macchina da remoto
- Come gestire alcune caratteristiche
specifiche di firewalld
come le Zone.
Si noti che questa non vuole essere una guida completa o esaustiva sul firewall; di conseguenza, copre solo le basi.
Una nota sull'uso della riga di comando per la gestione del firewall¶
Beh... ci sono le opzioni di configurazione grafica del firewall. Sul desktop, c'è firewall-config
che può essere installato dai repo, mentre sui server si può installare Cockpit per gestire i firewall e tante altre cose ancora. Tuttavia, in questo tutorial vi insegnerò il modo di procedere da riga di comando per un paio di motivi:
- Se state gestendo un server, userete comunque la riga di comando per la maggior parte di queste cose. Molti tutorial e guide per il server Rocky forniranno istruzioni a riga di comando per la gestione del firewall, e dovreste comprendere tali istruzioni piuttosto che copiare e incollare qualsiasi cosa vediate.
- Capire come funzionano i comandi
firewalld
potrebbe aiutarvi a capire meglio come funziona il software del firewall. Se in futuro deciderete di utilizzare un'interfaccia grafica, potrete applicare gli stessi principi appresi qui e comprendere meglio ciò che state facendo.
Prerequisiti e presupposti¶
Avrete bisogno di:
- Una macchina Rocky Linux di qualsiasi tipo, locale o remota, fisica o virtuale
- Accesso al terminale e volontà di usarlo
- Avete bisogno dell'accesso root, o almeno della capacità di usare
sudo
sul vostro account utente. Per semplicità, assumo che tutti i comandi siano eseguiti come root - Una comprensione di base di SSH non sarebbe male per la gestione di macchine remote.
Uso di Base¶
Comandi di Servizio del Sistema¶
firewalld
viene eseguito come servizio sulla macchina. Si avvia quando lo fa la macchina, o almeno dovrebbe. Se per qualche motivo firewalld
non è già abilitato sulla vostra macchina, potete farlo con un semplice comando:
systemctl enable --now firewalld
L'opzione --now
avvia il servizio non appena viene abilitato e consente di saltare il passaggio systemctl start firewalld
.
Come per tutti i servizi su Rocky Linux, è possibile verificare se il firewall è in esecuzione con:
systemctl status firewalld
Per fermarlo del tutto:
systemctl stop firewalld
E per riavviare il servizio:
systemctl restart firewalld
Comandi di base per la configurazione e la gestione di firewalld
¶
firewalld
viene configurato con il comando firewall-cmd
. È possibile, ad esempio, controllare lo stato di firewalld
con:
firewall-cmd --state
Dopo ogni modifica permanente al firewall, è necessario ricaricarlo per vederne le modifiche. È possibile eseguire un "riavvio morbido" delle configurazioni del firewall con:
firewall-cmd --reload
Nota
Se ricarichi le tue configurazioni che non sono state rese permanenti, ti scompariranno.
È possibile visualizzare tutte le configurazioni e le impostazioni in una sola volta con:
firewall-cmd --list-all
Questo comando produrrà un risultato simile a questo:
public (active)
target: default
icmp-block-inversion: no
interfaces: enp9s0
sources:
services: ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Salvare le modifiche¶
Attenzione: Seriamente, leggete la prossima parte.
Per impostazione predefinita, tutte le modifiche alla configurazione di firewalld
sono temporanee. Se riavviate l'intero servizio firewalld
, o riavviate la vostra macchina, nessuna delle vostre modifiche al firewall sarà salvata a meno che non facciate una delle due cose molto specifiche.
È consigliabile testare le modifiche singolarmente, ricaricando la configurazione del firewall man mano che si procede. Se ci si blocca accidentalmente, è possibile riavviare il servizio (o la macchina) e tutte le modifiche vengono eliminate, come già detto in precedenza.
Ma una volta ottenuta una configurazione funzionante, è possibile salvare le modifiche in modo permanente con:
firewall-cmd --runtime-to-permanent
Tuttavia, se si è assolutamente sicuri di ciò che si sta facendo e si vuole solo aggiungere la regola e andare avanti con la propria attività, si può aggiungere la flag --permanent
a qualsiasi comando di configurazione:
firewall-cmd --permanent [resto del tuo comando]
Gestire le Zone¶
Prima di ogni altra cosa, devo spiegare le zone. Le zone sono una funzione che consente di definire diverse serie di regole per situazioni diverse. Le zone sono una parte importante di firewalld
, quindi è bene capire come funzionano.
Se il computer dispone di più modi per connettersi a reti diverse (ad esempio, Ethernet e Wi-Fi), è possibile decidere che una connessione sia più affidabile dell'altra. Si potrebbe impostare la connessione Ethernet nella zona "trusted" se è connessa solo a una rete locale realizzata da voi, e mettere il Wi-Fi (che potrebbe essere connesso a Internet) nella zona "public" con restrizioni più severe.
Nota
Una zona può solo essere in uno stato attivo se ha una di queste due condizioni:
- La zona è assegnata a un'interfaccia di rete
- Alla zona vengono assegnati IP di origine o intervalli di rete (maggiori informazioni in seguito)
Le zone predefinite includono le seguenti (ho preso questa spiegazione da Guida di DigitalOcean a firewalld
, che dovreste leggere):
drop: Il livello più basso di fiducia. Tutte le connessioni in entrata sono abbandonate senza risposta e solo le connessioni in uscita sono possibili.
block: Simile al precedente, ma invece di abbandonare semplicemente le connessioni, le richieste in entrata sono rifiutate con un messaggio icmp-host-prohibited o icmp6-adm-prohibited.
public: Rappresenta le reti pubbliche, non fidate. Non ti fidi degli altri computer, ma puoi permettere connessioni in entrata selezionate caso per caso.
internal: L'altro lato della zona esterna, usata per la parte interna di un gateway. I computer sono abbastanza affidabili e sono disponibili alcuni servizi aggiuntivi.
dmz: utilizzato per i computer situati in una DMZ (computer isolati che non avranno accesso al resto della vostra rete). I computer sono abbastanza affidabili e sono disponibili alcuni servizi aggiuntivi.
work: Usato per le macchine da lavoro. Fidatevi della maggior parte dei computer della rete.
home: Un ambiente domestico. Generalmente implica che vi fidate della maggior parte degli altri computer e che qualche servizio in più sarà accettato. Qualche altro servizio potrebbe essere permesso.
trusted: Fidati di tutte le macchine della rete. La più aperta delle opzioni disponibili e dovrebbe essere usata con parsimonia.
trusted: Fidati di tutte le macchine della rete. La più aperta delle opzioni disponibili e dovrebbe essere usata con parsimonia.
Ok, alcune di queste spiegazioni sono complicate, ma onestamente? Il principiante medio può cavarsela con la comprensione di "trusted", "home" e "public" e quando usarli.
Comandi di gestione della zona¶
Per visualizzare la zona predefinita, eseguire:
firewall-cmd --get-default-zone
Per vedere quali zone sono attive e stanno facendo qualcosa, eseguire:
firewall-cmd --get-active-zones
Nota: alcune di queste cose potrebbero essere state fatte per voi
Se state eseguendo Rocky Linux su un VPS, probabilmente è stata impostata una configurazione di base per voi. In particolare, dovreste essere in grado di accedere al server via SSH, e l'interfaccia di rete sarà già stata aggiunta alla zona "public".
Per modificare la zona predefinita:
firewall-cmd --set-default-zone [tua-zona]
Per aggiungere un'interfaccia di rete a una zona:
firewall-cmd --zone=[tua-zona] --add-interface=[tua-intefaccia-di-rete]
Per cambiare la zona di un'interfaccia di rete:
firewall-cmd --zone=[tua-zona] --change-interface=[tua-interfaccia-di-rete]
Per rimuovere completamente un'interfaccia da una zona:
firewall-cmd --zone=[tua-zona] --remove-interface=[tua-intefaccia-di-rete]
Per creare una zona nuova di zecca con un set di regole completamente personalizzate e verificare che sia stata aggiunta correttamente:
firewall-cmd --new-zone=[tua-nuova-zona]
firewall-cmd --get-zones
Gestione delle Porte¶
Per chi non lo sapesse, le porte (in questo contesto) sono solo endpoint virtuali a cui i computer si collegano per inviare informazioni avanti e indietro. Consideratele come porte Ethernet o USB fisiche del vostro computer, ma invisibili, e potete averne fino a 65.535 tutte attive contemporaneamente.
Io non lo farei, ma voi potete farlo.
Un numero identifica ogni porta. Alcune porte sono riservate a servizi specifici. Ad esempio, se avete mai lavorato con i server web per costruire un sito, potreste avere familiarità con le porte 80 e 443. Queste porte consentono la trasmissione dei dati delle pagine web.
In particolare, la porta 80 consente di trasferire dati tramite il protocollo HTTP (Hypertext Transfer Protocol), mentre la porta 443 è riservata ai dati HTTPS (Hypertext Transfer Protocol Secure).
La porta 22 è riservata al protocollo Secure Shell (SSH) che consente di accedere e gestire altri computer tramite la riga di comando (vedere la nostra breve guida sull'argomento). Un server remoto nuovo di zecca potrebbe consentire solo connessioni sulla porta 22 per SSH e nient'altro.
Altri esempi sono FTP (porte 20 e 21), SSH (porta 22) e molti altri. È anche possibile impostare porte personalizzate da utilizzare per le nuove applicazioni che si potrebbero installare e che non hanno già un numero standard.
Nota: non si dovrebbero usare le porte per tutto.
Per cose come SSH, HTTP/S, FTP, e altro, si raccomanda di aggiungerli alla vostra zona firewall come servizi, e non come numeri di porta. Vi mostrerò come funziona qui sotto. Detto questo, devi comunque sapere come aprire le porte manualmente.
* Per i principianti assoluti, l'HTTPS è fondamentalmente (più o meno) la stessa cosa dell'HTTP, ma criptata.
Comandi di gestione della porta¶
Per questa sezione, userò --zone=public
... e la porta 9001 come esempio casuale, perché è più di 9.000.
Per vedere tutte le porte aperte:
firewall-cmd --list-ports
Per aggiungere una porta alla zona del firewall (aprendola così all'uso), basta eseguire questo comando:
firewall-cmd --zone=public --add-port=9001/tcp
Nota
Riguardo alla parte /tcp
:
Quel bit /tcp
alla fine dice al firewall che le connessioni arriveranno attraverso il Transfer Control Protocol, che è quello che userai per la maggior parte delle cose relative al server-e-ospite.
Alternative come UDP servono per il debug o per altri tipi particolari di cose che non rientrano nello scopo di questa guida. Fate riferimento alla documentazione di qualsiasi applicazione o servizio per cui volete specificamente aprire una porta.
Per rimuovere una porta, è sufficiente invertire il comando cambiando una sola parola:
firewall-cmd --zone=public --remove-port=9001/tcp
Gestione dei servizi¶
Come si può immaginare, i servizi sono programmi piuttosto standardizzati che vengono eseguiti sul computer. firewalld
è impostato in modo da poter essere utilizzato per fornire facilmente l'accesso ai servizi comuni in esecuzione sull'host.
Questo è il modo preferito per aprire le porte di questi servizi comuni e di molti altri:
- HTTP e HTTPS: per i server web
- FTP: per spostare i file avanti e indietro (alla vecchia maniera)
- SSH: per controllare macchine remote e spostare file avanti e indietro nel nuovo modo
- Samba: Per la condivisione di file con macchine Windows.
Attenzione
Non rimuovere mai il servizio SSH dal firewall di un server remoto!
Ricordate, SSH è quello che usate per accedere al vostro server. A meno che non abbiate un altro modo per accedere al server fisico, o alla sua shell (cioè tramite. un pannello di controllo fornito dall'host), la rimozione del servizio SSH vi bloccherà permanentemente.
Dovrete contattare l'assistenza per riavere l'accesso o reinstallare completamente il sistema operativo.
Comandi di gestione del servizio¶
Per visualizzare un elenco di tutti i servizi disponibili che si possono aggiungere al firewall, eseguire:
firewall-cmd --get-services
Per vedere quali servizi sono attualmente attivi sul firewall, utilizzare:
firewall-cmd --list-services
Per aprire un servizio nel firewall (ad esempio HTTP nella zona pubblica), utilizzare:
firewall-cmd --zone=public --add-service=http
Per rimuovere/chiudere un servizio sul firewall, è sufficiente cambiare nuovamente una parola:
firewall-cmd --zone=public --remove-service=http
Nota: è possibile aggiungere i propri servizi.
E personalizzarli anche. Tuttavia, questo è un argomento che diventa piuttosto complesso. Prima di tutto, familiarizzate con firewalld
e poi proseguite da lì.
Limitare l'accesso¶
Supponiamo che abbiate un server e non vogliate renderlo pubblico. Se si desidera definire chi può accedervi tramite SSH o visualizzare alcune pagine web/app private, è possibile farlo.
Esistono un paio di metodi per raggiungere questo obiettivo. In primo luogo, per un server più chiuso, si può scegliere una delle zone più restrittive, assegnarvi il dispositivo di rete, aggiungervi il servizio SSH come illustrato sopra e quindi inserire nella whitelist il proprio indirizzo IP pubblico come segue:
firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0 [< insert your IP here]
È possibile creare un intervallo di indirizzi IP aggiungendo un numero più alto alla fine, in questo modo:
firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24 [< insert your IP here]
Anche in questo caso, basta cambiare --add-source
con --remove-source
per invertire il processo.
Tuttavia, avete alcune opzioni se state gestendo un server remoto con un sito web che deve essere pubblico e volete aprire SSH solo per un indirizzo IP o per un piccolo intervallo di indirizzi. Entrambi gli esempi assegnano l'unica interfaccia di rete alla zona pubblica.
In primo luogo, è possibile utilizzare una "rich rule" per la zona pubblica, con un aspetto simile a questo:
# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
Una volta che la rich rule è stata inserita, non rendere le regole permanenti. Per prima cosa, rimuovete il servizio SSH dalla configurazione della zona pubblica e testate la connessione per assicurarvi di poter accedere al server tramite SSH.
La configurazione dovrebbe ora apparire come segue:
your@server ~# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: wlp3s0
sources:
services: cockpit dhcpv6-client
ports: 80/tcp 443/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept
In secondo luogo, è possibile utilizzare due zone diverse alla volta. Se l'interfaccia è vincolata alla zona pubblica, è possibile attivare una seconda zona (la zona "trusted", ad esempio) aggiungendo un IP sorgente o un intervallo di IP, come mostrato sopra. Quindi, aggiungere il servizio SSH alla zona trusted e rimuoverlo dalla zona public.
Al termine, l'output dovrebbe essere simile a questo:
your@server ~# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: wlp3s0
sources:
services: cockpit dhcpv6-client
ports: 80/tcp 443/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
your@server ~# firewall-cmd --list-all --zone=trusted
trusted (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.0.0/24
services: ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Se si viene bloccati, riavviare il server (la maggior parte dei pannelli di controllo VPS ha un'opzione per questo) e riprovare.
Attenzione
Queste tecniche funzionano solo se avete un indirizzo IP statico.
Se siete bloccati con un provider di servizi internet che cambia il vostro indirizzo IP ogni volta che il modem si riavvia, non usate queste regole (almeno non per SSH) fino a quando non avrete una soluzione per questo. Ti chiuderai fuori dal tuo server
Vi chiuderete fuori dal vostro server
O aggiornate il vostro piano/provider internet o prendete una VPN che vi fornisca un IP dedicato e che non lo perda mai e poi mai.
Nel frattempo, installare e configurare fail2ban, che può aiutare a ridurre gli attacchi di brute force.
Ovviamente, su una rete locale che controllate (e dove potete impostare manualmente l'indirizzo IP di ogni macchina), potete usare tutte queste regole quanto volete.
Note Finali¶
Questa è una guida tutt'altro che esaustiva e si può imparare molto di più con la documentazione ufficiale di firewalld
. Su Internet sono disponibili anche guide specifiche per le applicazioni che vi mostreranno come impostare il firewall per quelle specifiche applicazioni.
Per i fan di iptables
(se siete arrivati fin qui...), abbiamo una guida che illustra in dettaglio alcune differenze nel funzionamento di firewalld
e iptables
. Questa guida potrebbe aiutarvi a capire se volete rimanere con firewalld
o tornare alle Vecchie Abitudini (TM). In questo caso, c'è qualcosa da dire riguardo ai Vecchie Abitudini (TM).
Conclusione¶
E questo è firewalld
nel minor numero di parole possibili, pur spiegando tutte le nozioni di base. Fate le cose con calma, sperimentate con attenzione e non rendete permanente nessuna regola finché non siete sicuri che funzioni.
E, insomma, divertitevi. Una volta acquisite le nozioni di base, la configurazione di un firewall decente e funzionante può richiedere 5-10 minuti.
Author: Ezequiel Bruni
Contributors: Steven Spencer, Ganna Zhyrnova