GNU/Linux >> Linux Esercitazione >  >> Linux

Proteggi la tua rete Linux con firewall-cmd

I firewall sono una parte vitale della sicurezza della rete, quindi è importante che un amministratore di sistema abbia familiarità con il loro funzionamento. Se conosci i firewall, puoi proteggere la tua rete facendo scelte intelligenti sul traffico che consenti in entrata e in uscita.

Poiché "firewall" è un nome così eccitante, le persone spesso immaginano un'intricata battaglia al neon in stile Tron che si svolge alla periferia di una rete, con pacchetti di dati canaglia che vengono dati alle fiamme per proteggere la fortezza techno dei tuoi utenti. In realtà, un firewall è solo un software che controlla il traffico di rete in entrata e in uscita.

Porte

Un firewall è in grado di gestire questo traffico monitorando le porte di rete. Nel mondo dei firewall, il termine porta non si riferisce a una connessione fisica come una porta USB, VGA o HDMI. Ai fini dei firewall, una porta è un costrutto artificiale creato dal sistema operativo per rappresentare un percorso per un tipo specifico di dati. Questo sistema avrebbe potuto essere chiamato in qualsiasi modo, come "contatti", "connessioni" o anche "pinguini", ma i creatori hanno utilizzato "porte" ed è il nome che usiamo ancora oggi. Il punto è che non c'è niente di speciale in nessun porto; sono solo un modo per designare un indirizzo in cui avviene il trasferimento dei dati.

Ci sono un certo numero di porte che sono ben note, ma anche queste sono solo convenzioni. Ad esempio, potresti sapere che il traffico HTTP si verifica sulla porta 80, il traffico HTTPS utilizza la porta 443, FTP utilizza la porta 21 e SSH utilizza la porta 22. Quando il tuo computer trasmette dati a un altro computer, aggiunge un prefisso ai dati per indicare quale porta a cui vuole accedere. Se la porta sul lato ricevente accetta dati con lo stesso protocollo dei dati che stai inviando, i dati vengono scambiati correttamente.

Puoi vedere questo processo in azione andando su qualsiasi sito web. Apri un browser web e accedi a example.com:80 , che fa sì che il tuo computer invii una richiesta HTTP alla porta 80 del computer che serve il sito web example.com. Riceverai in cambio una pagina web. Tuttavia, i browser Web non richiedono l'immissione della porta a cui si desidera accedere ogni volta che si accede a un URL, poiché si presume che il traffico HTTP acceda alla porta 80 o 443.

Puoi testare questo processo utilizzando un browser web basato su terminale:

$ curl --connect-timeout 3 "http://example.com:80" | head -n4
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

Utilizzando la stessa notazione, puoi forzare il rifiuto navigando su un sito Web utilizzando una porta non standard. Passa a una porta arbitraria, example.com:79 per esempio. La tua richiesta di una pagina web è stata rifiutata:

$ curl --connect-timeout 3 "http://example.com:79"
curl: (7) Failed to connect: Network is unreachable

La correlazione tra porte e protocolli sono semplicemente convenzioni concordate reciprocamente da un gruppo di standard e da una base di utenti. Queste impostazioni possono essere modificate su singoli computer. In effetti, ai tempi dei pionieri dell'informatica, molte persone ritenevano che la semplice modifica del numero di porta dei servizi più diffusi avrebbe placato un attacco. Oggi gli attacchi sono molto più sofisticati. Non ha senso sorprendere uno scanner di porte automatizzato modificando la porta su cui un servizio è in ascolto.

Al contrario, un firewall controlla quale attività è consentita su una determinata porta.

[ Download gratuito:cheat sheet dei comandi avanzati di Linux. ]

L'interfaccia firewall-cmd

La tua infrastruttura potrebbe avere un server in un rack con l'unico scopo di eseguire un firewall, oppure potresti avere un firewall incorporato nel router o nel modem che funge da gateway principale per Internet. Probabilmente hai anche un firewall in esecuzione sulla tua workstation personale o laptop. Tutti questi firewall hanno la propria interfaccia di configurazione. Questo articolo copre il firewall-cmd comando terminale trovato sulla maggior parte delle distribuzioni Linux.

Firewall-cmd è uno strumento front-end per la gestione di firewalld demone, che si interfaccia con il framework netfilter del kernel Linux. Questo stack probabilmente non è presente sui modem incorporati comuni nelle piccole e medie imprese, ma è attivo o disponibile per qualsiasi distribuzione Linux che utilizzi systemd .

Senza un firewall attivo, firewall-cmd non ha nulla da controllare, quindi il primo passo è assicurarsi che firewalld è in esecuzione: 

$ sudo systemctl enable --now firewalld

Questo comando avvia il demone del firewall e lo imposta per il caricamento automatico al riavvio.

Blocca (quasi) tutto

Il consiglio comune quando si configura un firewall è prima di tutto bloccare tutto, quindi aprire le porte di cui si ha effettivamente bisogno. Ciò significa che devi sapere di cosa hai bisogno e, a volte, capirlo è un lavoro pomeridiano tutto suo.

Se la tua organizzazione esegue il proprio servizio di cache DNS o DNS, ad esempio, devi ricordarti di sbloccare la porta (di solito 53) che gestisce la comunicazione DNS. Se ti affidi a SSH per configurare i tuoi server in remoto, non devi bloccare quella porta. Devi tenere conto di ogni servizio in esecuzione sulla tua infrastruttura e devi capire se quel servizio è solo interno o se deve interagire con il mondo esterno.

Nel caso di software proprietario, potrebbero esserci chiamate verso il mondo esterno di cui non sei nemmeno a conoscenza. Se alcune applicazioni reagiscono male a un firewall rigoroso messo in atto di recente, potrebbe essere necessario eseguire il reverse engineering (o parlare con la linea di supporto dell'applicazione) per scoprire che tipo di traffico sta cercando di creare e perché. Nel mondo open source, questo problema è meno comune, ma non è al di fuori del regno delle possibilità, soprattutto nel caso di stack software complessi (ad esempio, oggi anche i lettori multimediali effettuano chiamate a Internet, se non altro per recuperare le copertine degli album o un elenco di brani).

Firewall-cmd utilizza zone come predefiniti, offrendoti valori predefiniti sani tra cui scegliere. In questo modo si evita di dover creare un firewall da zero. Le zone si applicano a un'interfaccia di rete, quindi su un server con due interfacce Ethernet, potresti avere una zona che governa un'interfaccia Ethernet e una zona diversa che governa l'altra.

Vale la pena dedicare del tempo a familiarizzare con le zone fornite sul sistema. Per vedere tutte le zone disponibili, usa:

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

Per vedere cosa è sbloccato in una zona specifica:

$ sudo firewall-cmd --zone work --list-all
work
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Usa una delle zone esistenti come punto di partenza per le tue regole firewall o creane di tue.

Crea una zona

Per creare una nuova zona, usa il --new-zone opzione.

Tutti i firewall-cmd le azioni persistono solo fino al riavvio del firewall o del computer che lo esegue. Tutto ciò che vuoi essere permanente deve essere accompagnato dal --permanent bandiera.

Ad esempio, crea una nuova zona permanente chiamata corp , quindi ricarica le regole del firewall in modo che la tua nuova zona si attivi:

$ sudo firewall-cmd --new-zone corp --permanent
success
$ sudo firewall-cmd --reload

Prima di assegnare qualsiasi interfaccia di rete a questa nuova zona, aggiungi il ssh servizio in modo da poterlo accedere da remoto. Usa il --permanent opzione per fare in modo che questa aggiunta persista durante i riavvii:

$ sudo firewall-cmd --zone corp --add-service ssh --permanent

La tua nuova zona, chiamata corp , è ora attivo, rifiuta tutto il traffico tranne SSH e non è assegnato a nessuna interfaccia di rete specifica. Per creare corp la zona attiva e predefinita per l'interfaccia di rete che vuoi proteggere (ens3 in questo esempio), usa --change-interface opzione:

$ firewall-cmd --change-interface ens3 \
  --zone corp --permanent
The interface is under control of NetworkManager, setting zone to 'corp'.
success

Creando corp la zona predefinita, tutti i comandi futuri vengono applicati a corp a meno che il --zone opzione specifica una zona diversa. Se vuoi impostare corp poiché l'impostazione predefinita dipende dal fatto che tu preveda questa zona come nuova zona principale. Se è così, quanto segue fa il lavoro:

$ sudo firewall-cmd --set-default corp

Per visualizzare le zone attualmente assegnate a ciascuna interfaccia, utilizzare il --get-active-zones opzione:

$ sudo firewall-cmd --get-active-zones``
corp
  interfaces: ens3
work
  interfaces: ens4

Aggiungi e rimuovi servizi

Ora che hai bloccato tutto tranne SSH, puoi aprire le porte su cui si basa la tua rete. Il modo semplice e veloce per consentire il traffico attraverso il firewall consiste nell'aggiungere un servizio predefinito.

L'elenco dei servizi predefiniti disponibili è ampio. Per visualizzarlo, usa:

$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amqp 
amqps apcupsd audit bacula bacula-client
bgp bitcoin bitcoin-rpc bitcoin-testnet ceph
cockpit dhcp dhcpv6 dhcpv6-client distcc dns
[...]

Supponiamo di dover eseguire un server web. Innanzitutto, devi installare il server web che desideri utilizzare (il httpd pacchetto su RHEL o Fedora, apache2 su Ubuntu e Debian). Per questo esempio useremo httpd :

$ sudo dnf install httpd
$ sudo systemctl --enable --now httpd 

Quindi, testa il tuo server web in locale:

$ curl --silent localhost:80 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>

Quindi, prova a connetterti al tuo server web da un browser esterno. La connessione non riesce, a dimostrazione dell'efficacia del firewall:

$ curl --connect-timeout 3 192.168.122.206
curl: (28) Connection timed out after 3001 milliseconds

Sblocca un servizio

Per consentire il traffico HTTP attraverso il firewall, aggiungi http servizio:

$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload

Quindi, prova da una fonte esterna:

$ curl --silent 192.168.122.206 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>

Ora che sai come aggiungere un servizio, rimuoverne uno è abbastanza intuitivo:

$ sudo firewall-cmd --remove-service http --permanent
$ sudo firewall-cmd --reload

Aggiungi e rimuovi porte

A volte, un servizio predefinito non esiste o presuppone impostazioni predefinite che non corrispondono alla tua rete. Invece di aggiungere un servizio, puoi aggiungere un numero di porta e un tipo di protocollo direttamente con --add-port .

Ad esempio, se devi aggiungere la porta non standard 1622 per SSH alla tua zona personalizzata (se la tua zona personalizzata non è la zona predefinita per i tuoi comandi, aggiungi il --zone opzione):

$ sudo firewall-cmd --add-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload

Per rimuovere quella porta, usa --remove-port :

$ sudo firewall-cmd --remove-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload

Muri di fuoco

C'è molto di più che puoi fare con firewall-cmd , come la definizione dei propri servizi, il blocco ICMP e la definizione di fonti di traffico in entrata consentite. Il modo migliore per imparare è sperimentare, quindi installa Red Hat Enterprise Linux o Fedora in GNOME Boxes e sperimenta come modellare il traffico attraverso tutte le opzioni firewall-cmd fornisce.


Linux
  1. Inizia con NetworkManager su Linux

  2. Visualizza le connessioni di rete del tuo server Linux con netstat

  3. Proteggi i tuoi container con SELinux

  4. 6 Strumenti open source indispensabili per proteggere il tuo server Linux

  5. Come proteggere il tuo server Ubuntu con CSF Firewall

Rendi Linux più forte con i firewall

Proteggi la tua privacy online con queste distribuzioni Linux

Come proteggere i server Linux con SE Linux

Network Manager su Linux con esempi

Come proteggere un firewall Linux con le regole IPtables

5 Best practice per la sicurezza SSH Linux per proteggere i tuoi sistemi