Ricerca nel sito web

Shorewall: un firewall di alto livello per server Linux


Configurare un firewall in Linux può essere molto scoraggiante per un principiante o per qualcuno che non ha molta familiarità con iptables. Fortunatamente, esiste una soluzione molto facile da usare in Shorewall.

In questo tutorial in più parti ti farò iniziare a utilizzare Shorewall e ti guiderò attraverso alcuni argomenti più avanzati con questo fantastico sistema firewall.

Cos'è Shorewall?

Shorewall è essenzialmente un front-end per iptables, ma è un front-end per un ambiente a riga di comando che utilizza diversi file di testo per la sua configurazione. Sebbene Shorewall sia un robusto sistema firewall che può essere scalato su reti molto grandi che servono numerose macchine, inizieremo con una configurazione di base a due interfacce e definiremo le nozioni di base.

Una configurazione a due interfacce è costituita da una macchina con due porte Ethernet, una in ingresso e una in uscita verso la rete locale.

Installa il firewall Shorewall su Linux

Shorewall può essere installato utilizzando gli strumenti di gestione dei pacchetti apt e yum.

sudo apt install shorewall    [On Debian-based Sysems]
sudo yum install shorewall    [On RHEL-based Sysems]

Dopo l'installazione, dobbiamo copiare una configurazione di esempio dalla directory "/usr/share/doc/shorewall" alla directory predefinita di Shorewall "/etc/shorewall".

sudo cp /usr/share/doc/shorewall/example/two-interfaces/* /etc/shorewall
cd /etc/shorewall

Se diamo un'occhiata a questa directory, vediamo un mucchio di file e il file shorewall.conf.

Shorewall vede la rete come un gruppo di zone diverse, quindi il primo file a cui vogliamo dare un'occhiata è il file "/etc/shorewall/zones".

sudo nano /etc/shorewall/zones

Qui vediamo che ci sono tre zone definite per impostazione predefinita: fw, net e loc. È importante notare che Shorewall tratta la macchina firewall stessa come una propria zona e la memorizza in una variabile chiamata $fw.

Il file "/etc/shorewall/zones" è piuttosto autoesplicativo. Hai la net zone (interfaccia rivolta a Internet), la loc zone (interfaccia rivolta alla LAN) e fw, che è tutto.

Questa configurazione fornisce quanto segue:

  • Consente tutte le richieste di connessione dalla loc zone (LAN) alla net zone (Internet).
  • Rilascia tutte le richieste di connessione (ignora) dalla zona di rete al firewall e alla LAN.
  • Rifiuta e registra tutte le altre richieste.

Il bit LOG LEVEL dovrebbe essere familiare a chiunque abbia amministrato con Apache, MySQL o qualsiasi altro numero di altri programmi FOSS. In questo caso, stiamo dicendo a Shorewall di utilizzare il livello di informazioni di registrazione.

Ora che le nostre zone e policy sono impostate, dobbiamo configurare le nostre interfacce. Puoi farlo modificando il file "/etc/shorewall/interfaces".

sudo nano /etc/shorewall/interfaces

Qui abbiamo impostato la nostra interfaccia rivolta a Internet come eth0 sulla zona rete. Sul lato LAN abbiamo impostato l'altra interfaccia, eth1, sulla loc zone. Modifica questo file per adattarlo correttamente alla tua configurazione.

Le varie opzioni che è possibile inserire per ciascuna di queste interfacce sono estese e sono meglio spiegate in dettaglio nella pagina man.

man shorewall-interfaces

Una rapida carrellata di alcuni di essi è la seguente:

  • nosmurfs: filtra i pacchetti con un indirizzo di trasmissione come origine.
  • logmartians: registra i pacchetti con l'indirizzo di origine impossibile.
  • routefilter: filtraggio del percorso del kernel per anti-spoofing.

Naturalmente, ora che il nostro sistema è protetto da firewall, avremo bisogno che determinate connessioni siano consentite per poter portare a termine ciò che dobbiamo fare. Questi vengono definiti nel file delle regole in "/etc/shorewall/rules".

sudo nano /etc/shorewall/rules

All'inizio questo file sembra confuso, principalmente perché le colonne si sovrappongono, ma le intestazioni sono piuttosto autoesplicative. Innanzitutto, hai la colonna AZIONE, che descrive ciò che desideri eseguire.

Successivamente, hai un'intestazione SOURCE in cui definisci la zona da cui ha origine il pacchetto. Quindi, hai il tuo DEST, o destinazione, che è la zona o l'indirizzo IP della destinazione. Usiamo un esempio.

Supponiamo di voler eseguire un server SSH dietro il firewall sulla macchina con l'indirizzo IP 192.168.1.25. Non solo dovrai aprire una porta nel tuo firewall, ma dovrai dire al firewall che tutto il traffico in arrivo sulla porta 22 deve essere instradato alla macchina su 192.168.1.25.

Questo è noto come Port Forwarding. È una funzionalità comune sulla maggior parte dei firewall/router. In "/etc/shorewall/rules", puoi ottenere questo risultato aggiungendo una riga come questa:

SSH(DNAT)	net		loc:192.168.1.25

Sopra, abbiamo definito che tutti i pacchetti destinati a SSH provenienti dalla zona rete al firewall devono essere instradati (DNAT) alla porta 22 su una macchina con indirizzo 192.168.1.25.

Questo si chiama Traduzione degli indirizzi di rete o NAT. La "D" indica semplicemente a Shorewall che si tratta di un NAT per un indirizzo di destinazione.

Perché funzioni, devi avere il supporto NAT abilitato nel tuo kernel. Se hai bisogno di NAT e non ce l'hai, consulta il mio tutorial sulla ricompilazione di un kernel Debian.

Nel prossimo articolo esploreremo varie configurazioni e opzioni di Shorewall. Tuttavia, per ora dovrebbero esserci ampie informazioni per aiutarti a iniziare. Come sempre, fare riferimento alle pagine man per una comprensione più approfondita.