Configurare Netfilter con Shorewall: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
m (task #30)
 
(25 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
==Introduzione==
==Introduzione==
[http://www.netfilter.org Netfilter] è il framework di filtraggio pacchetti presente nei Kernel Linux (>= 2.4).
[http://www.netfilter.org Netfilter] è il framework di filtraggio pacchetti presente nei Kernel Linux (>= 2.4).
Riga 7: Riga 8:


==iptables==
==iptables==
[http://manpages.debian.net/cgi-bin/man.cgi?query=iptables&apropos=0&sektion=0&manpath=Debian+Sid&format=html&locale=en <tt>iptables(8)</tt>] è lo strumento base per costruire firewall.
[http://manpages.debian.net/cgi-bin/man.cgi?query=iptables&apropos=0&sektion=0&manpath=Debian+Sid&format=html&locale=en <code>iptables(8)</code>] è lo strumento base per costruire firewall.


Si utilizza il comando <tt>iptables</tt> per specificare le politiche predefinite, le regole di <tt>INPUT</tt>, quelle di <tt>OUTPUT</tt> e quelle di <tt>FORWARDING</tt>. Solitamente si raccoglie la serie di comandi in uno
Si utilizza il comando <code>iptables</code> per specificare le politiche predefinite, le regole di <code>INPUT</code>, quelle di <code>OUTPUT</code> e quelle di <code>FORWARDING</code>. Solitamente si raccoglie la serie di comandi in uno shell script destinato quasi sempre a crescere nel tempo man mano che le politiche di firewalling divengono più specifiche o devono descrivere nuove esigenze. Spesso ci si trova ad amministrare un firewall descritto da uno shell script anche complesso, ma sicuramente lungo, il che oggettivamente può creare difficoltà nella manutenzione del firewall. Inoltre è sicuramente più difficile stabilire, leggendo lo script, se le politiche di firewalling sono implementate correttamente.
shell script destinato quasi sempre a crescere nel tempo man mano che le politiche di firewalling divengono più
specifiche o devono descrivere nuove esigenze. Spesso ci si trova ad amministrare un firewall descritto da uno shell script anche complesso, ma sicuramente lungo che oggettivamente può creare difficoltà nella manutenzione del firewall. Inoltre è sicuramente più difficile stabilire, leggendo lo script, se le politiche di firewalling sono implementate correttamente.


==Shorewall==
==Shorewall==
Shoreline Firewall (in breve Shorewall) rientra nella categoria degli strumenti ad alto livello per configurare Netfilter.
Shoreline Firewall (in breve Shorewall) rientra nella categoria degli strumenti ad alto livello per configurare Netfilter.


Questo tipo di strumenti permettono di specificare regole di firewalling ad un livello d'astrazione più elevato di quello offerto da un semplice shell script iptables, utilizzando un linguaggio spesso vicino al modo in cui si definisce la politica di firewalling.
Questo tipo di strumenti permette di specificare regole di firewalling ad un livello d'astrazione più elevato di quello offerto da un semplice shell script iptables, utilizzando un linguaggio spesso vicino al modo in cui si definisce la politica di firewalling.


Per specificare una politica di firewalling si potrebbe procedere come segue:
Per specificare una politica di firewalling si potrebbe procedere come segue:
Riga 22: Riga 21:
# Individuazione delle zone di rete, p.e. rete locale, pubblica e DMZ.
# Individuazione delle zone di rete, p.e. rete locale, pubblica e DMZ.
# Politiche predefinite per il traffico da una zona all'altra.
# Politiche predefinite per il traffico da una zona all'altra.
# Regole di firewalling (non sono altro che delle eccezioni alle politiche predefinite di cui sopra.
# Regole di firewalling (non sono altro che delle eccezioni alle politiche predefinite di cui sopra).


<pre>Politiche di Firewalling per XYZ
<pre>Politiche di Firewalling per XYZ
Riga 47: Riga 46:
Ovviamente si tratta solo di un breve esempio, tuttavia si vedrà di seguito come Shorewall utilizzi una procedura analoga e una sintassi simile a quella mostrata qui sopra.
Ovviamente si tratta solo di un breve esempio, tuttavia si vedrà di seguito come Shorewall utilizzi una procedura analoga e una sintassi simile a quella mostrata qui sopra.


Il funzionamento di Shorewall consiste nel leggere dei file di configurazione, compilarli in una serie di comandi <tt>iptables</tt> ed eseguirli. Quindi non si tratta di un demone e il firewall funziona nello esattamente come quando lo si costruisce con il classico shell script.
Il funzionamento di Shorewall consiste nel leggere dei file di configurazione, compilarli in una serie di comandi <code>iptables</code> ed eseguirli. Quindi non si tratta di un demone e il firewall funziona esattamente come quando lo si costruisce con il classico shell script.


==Installazione in Debian GNU/Linux==
==Installazione in Debian GNU/Linux==
Riga 53: Riga 52:
L'installazione è semplicissima:
L'installazione è semplicissima:
<pre>
<pre>
~# apt-get install shorewall
# apt-get install shorewall
</pre>
</pre>


{{Box|Nota|<tt>shorewall</tt> viene installato senza alcuna configurazione predefinita. In <tt>/usr/share/doc/shorewall/examples</tt> sono presenti alcuni file di configurazione a cui è possbile riferirsi per iniziare la configurazione del firewall.}}
{{Box|Nota|<code>shorewall</code> viene installato senza alcuna configurazione predefinita. In <code>/usr/share/doc/shorewall/examples</code> sono presenti alcuni file di configurazione a cui è possibile riferirsi per iniziare la configurazione del firewall.}}


Terminata la configurazione, prima di avviare il servizio, è necessario editare <tt>/etc/default/shorewall</tt> per impostare la variabile <tt>startup</tt>:
Terminata la configurazione, prima di avviare il servizio, è necessario editare <code>/etc/default/shorewall</code> per impostare la variabile <code>startup</code>:
<pre># prevent startup with default configuration
<pre># prevent startup with default configuration
# set the below varible to 1 in order to allow shorewall to start
# set the below varible to 1 in order to allow shorewall to start
Riga 67: Riga 66:


==Dichiarazione delle Interfacce di Rete==
==Dichiarazione delle Interfacce di Rete==
Le interfacce di rete sono dichiarate nel file <tt>/etc/shorewall/interfaces</tt>:
Le interfacce di rete sono dichiarate nel file <code>/etc/shorewall/interfaces</code>:
<pre>
<pre>
#ZONE INTERFACE BROADCAST OPTIONS
#ZONE INTERFACE BROADCAST OPTIONS
Riga 74: Riga 73:


</pre>
</pre>
Sono state dichiarate due interfacce: l'interfaccia publica sta sulla <tt>eth0</tt>, mentre la ''LAN'' sulla <tt>eth1</tt>.
Sono state dichiarate due interfacce: l'interfaccia pubblica sta sulla <code>eth0</code>, mentre la ''LAN'' sulla <code>eth1</code>.
Alle interfacce sono associate le etichette '''net''' e '''loc'''.
Alle interfacce sono associate le etichette '''net''' e '''loc'''.
Nel campo ''OPTIONS'' sono specificate delle opzioni attive sull'interfaccia '''net''':
Nel campo ''OPTIONS'' sono specificate delle opzioni attive sull'interfaccia '''net''':


; blacklist: all'interfaccia è associato il file <tt>/etc/shorewall/blacklist</tt>, in cui si specificano gli indirizzi IP da bloccare
; <code>blacklist</code>: all'interfaccia è associato il file <code>/etc/shorewall/blacklist</code>, in cui si specificano gli indirizzi IP da bloccare;
; norfc1918: l'interfaccia non deve accettare pacchetti il cui indirizzo sorgente è specificato nell'RFC1918 (principalmente indirizzi privati
; <code>norfc1918</code>: l'interfaccia non deve accettare pacchetti il cui indirizzo sorgente è specificato nell'RFC1918 (principalmente indirizzi privati;
; nosmurfs: filtra i pacchetti per gli ''smurfs'', cioè quelli che hanno come sorgente un indirizzo di broadcast
; <code>nosmurfs</code>: filtra i pacchetti per gli ''smurfs'', cioè quelli che hanno come sorgente un indirizzo di broadcast;
; routefilter: contro misura per spoofing
; <code>routefilter</code>: contro misura per spoofing.


Per maggiori informazioni riferirsi a [http://www.shorewall.net/manpages/shorewall-interfaces.html interfaces(5)].
Per maggiori informazioni riferirsi a [http://www.shorewall.net/manpages/shorewall-interfaces.html interfaces(5)].


==Zone==
==Zone==
Le zone della rete sono dichiarate in <tt>/etc/shorewall/zones</tt>:
Le zone della rete sono dichiarate in <code>/etc/shorewall/zones</code>:
<pre>
<pre>
#############################################################
#############################################################
Riga 95: Riga 94:
loc    ipv4
loc    ipv4
</pre>
</pre>
Sono dichiarate una zona ''firewall'', ''net'' (internet) e ''loc'' (la rete locale).
Sono dichiarate una zona <code>''firewall''</code>, <code>''net''</code> (internet) e <code>''loc''</code> (la rete locale).
Il campo ''TYPE'' individua il tipo di zona:
Il campo <code>''TYPE''</code> individua il tipo di zona:


; firewall: è il firewall stesso e deve essere presente una sola zona di questo tipo
; <code>firewall</code>: è il firewall stesso e deve essere presente una sola zona di questo tipo;
; ipv4: è il tipo standard predefinito
; <code>ipv4</code>: è il tipo standard predefinito;
; ipsec: la comunicazione con gli host presenti in questa zona è criptata
; <code>ipsec</code>: la comunicazione con gli host presenti in questa zona è criptata.


Per maggiorni informazioni riferirsi a [http://www.shorewall.net/3.0/manpages/shorewall-zones.html zones(5)].
Per maggiori informazioni riferirsi a [http://www.shorewall.net/manpages/shorewall-zones.html zones(5)].


==Politiche Predefinite==
==Politiche Predefinite==
Le politiche predefinite specificano la politica di interconnessione delle zone dichiarate in <tt>/etc/shorewall/zones</tt>.
Le politiche predefinite specificano la politica di interconnessione delle zone dichiarate in <code>/etc/shorewall/zones</code>.
Si dichiarano nel file <tt>/etc/shorewall/policy</tt>:
Si dichiarano nel file <code>/etc/shorewall/policy</code>:
<pre>
<pre>
#SOURCE  DEST  POLICY    LOG          BURST:LIMIT
#SOURCE  DEST  POLICY    LOG          BURST:LIMIT
Riga 116: Riga 115:
Sorgente e destinazione possono essere:
Sorgente e destinazione possono essere:


; zone: un nome di zona definito nel file <tt>/etc/shorewall/zones</tt>
; <code>zone</code>: un nome di zona definito nel file <code>/etc/shorewall/zones</code>;
; $FW: è il firewall stesso
; <code>$FW</code>: è il firewall stesso;
; all: tutte le zone
; <code>all</code>: tutte le zone.


Le politiche più comuni:
Le politiche più comuni:


; ACCEPT: la connessione viene accettata
; <code>ACCEPT</code>: la connessione viene accettata;
; DROP: la connessione viene ignorata silenziosamente
; <code>DROP</code>: la connessione viene ignorata silenziosamente;
; REJECT: per le connessioni ''TCP'' il firewall risponde con ''RST'' (reset), per le altre connessioni il firewall risponde con un ''ICMP - unreacheable''.
; <code>REJECT</code>: per le connessioni <code>''TCP''</code> il firewall risponde con <code>''RST''</code> (reset), per le altre connessioni il firewall risponde con un <code>''ICMP - unreacheable''</code>.


Se il campo ''LOG'' è impostato, la connessioni sono registrate secondo il ''log level'' dichiarato. È possibile anche l'utilizzo di ''ULOG'' per l'invio dei log del firewall all'infrastruttura ''ULOG''. Per l'utilizzo di ''ULOG'' è necessari o anche modificare il file <tt>/etc/shorewall/shorewall.conf</tt>.
Se il campo <code>''LOG''</code> è impostato, la connessioni sono registrate secondo il <code>''log level''</code> dichiarato. È possibile anche l'utilizzo di <code>''ULOG''</code> per l'invio dei log del firewall all'infrastruttura <code>''ULOG''</code>. Per l'utilizzo di <code>''ULOG''</code> è necessario anche modificare il file <code>/etc/shorewall/shorewall.conf</code>.


Impostando il campo ''BURST:LIMIT'' si specifica il rateo massimo di connessioni ''TCP'' e la misura di un ''burst'' accettabile.
Impostando il campo <code>''BURST:LIMIT''</code> si specifica il rateo massimo di connessioni <code>''TCP''</code> e la misura di un <code>''burst''</code> accettabile.


Per maggiori informazioni riferirsi a [http://www.shorewall.net/3.0/manpages/shorewall-policy.html policy(5)].
Per maggiori informazioni riferirsi a [http://www.shorewall.net/manpages/shorewall-policy.html policy(5)].


==Parametrizzazione==
==Parametrizzazione==
In <tt>/etc/shorewall/params</tt> si definiscono variabili e liste da utilizzare nelle regole o anche nelle interfacce.
In <code>/etc/shorewall/params</code> si definiscono variabili e liste da utilizzare nelle regole o anche nelle interfacce.
Per esempio:
Per esempio:
<pre>
<pre>
Riga 143: Riga 142:
</pre>
</pre>


Per utilizzare nelle regole una variabile occorre specificarla nella forma ''$VARIABILE'', esattamente come avviene negli shell script.
Per utilizzare nelle regole una variabile occorre specificarla nella forma <code>''$VARIABILE''</code>, esattamente come avviene negli shell script.


Per maggiori informazioni riferirsi a [http://www.shorewall.net/3.0/manpages/shorewall-params.html params(5)].
Per maggiori informazioni riferirsi a [http://www.shorewall.net/manpages/shorewall-params.html params(5)].


==Regole==
==Regole==
Le regole vanno specificate nel file <tt>/etc/shorewall/rules</tt>.
Le regole vanno specificate nel file <code>/etc/shorewall/rules</code>.
<pre>
<pre>
# Macro/ACTION SRC                  DST
# Macro/ACTION SRC                  DST
Riga 156: Riga 155:
</pre>
</pre>


Per maggiori informazioni riferirsi a [http://www.shorewall.net/3.0/manpages/shorewall-rules.html rules(5)].
Per maggiori informazioni riferirsi a [http://www.shorewall.net/manpages/shorewall-rules.html rules(5)].


===Macro predefinite===
===Macro predefinite===
Le macro permettono di specificare le regole in modo semplice e sintetico.
Le macro permettono di specificare le regole in modo semplice e sintetico.
Shorewall viene distribuito con una serie di macro predefinite, installate in <tt>/usr/share/shorewall</tt>.
Shorewall viene distribuito con una serie di macro predefinite, installate in <code>/usr/share/shorewall</code>.
Sono definite in file del tipo <tt>macro.NOMEMACRO</tt>. Per esempio <tt>macro.POP3</tt> individua il traffico in transito verso la porta <tt>110</tt> che normalmente è appunto utilizzata dal protocollo ''POP3''.
Sono definite in file del tipo <code>macro.NOMEMACRO</code>. Per esempio <code>macro.POP3</code> individua il traffico in transito verso la porta <code>110</code> che normalmente è appunto utilizzata dal protocollo ''POP3''.
 
===Regole definite dall'utente===


===Macro definite dall'utente===
===Macro definite dall'utente===
L'utente può aggiungere macro a quelle già disponibili definendole in file tipo <tt>macro.*</tt> da creare in <tt>/etc/shorewall</tt>. Supponendo di voler cambiare la porta su cui ascola ''sshd'' da <tt>22</tt> a <tt>2222</tt>, possiamo definire la seguente macro:
L'utente può aggiungere macro a quelle già disponibili definendole in file tipo <code>macro.*</code> da creare in <code>/etc/shorewall</code>. Supponendo di voler cambiare la porta su cui ascolta <code>''sshd''</code> da <code>22</code> a <code>2222</code>, possiamo definire la seguente macro <code>/etc/shorewall/macro.ssh2222</code>:
<pre>
<pre>
#ACTION SOURCE  DEST    PROTO  DEST    SOURCE  ORIGINAL        RATE    USER/
#ACTION SOURCE  DEST    PROTO  DEST    SOURCE  ORIGINAL        RATE    USER/
Riga 175: Riga 172:


==Blacklist==
==Blacklist==
Il file <tt>/etc/shorewall/blacklist</tt> è utilizzato per il ''blacklisting'' statico. Si possono specificare indirizzi IP e MAC. Quando un pacchetto giunge sull'interfaccia in cui è abilitata l'opzione '''blacklist''', il firewall controlla se l'indirrizzo IP sorgente e MAC (se disponibile) sono inclusi nella blacklist e quindi se il pacchetto va bloccato.
Il file <code>/etc/shorewall/blacklist</code> è utilizzato per il ''blacklisting'' statico. Si possono specificare indirizzi IP e MAC. Quando un pacchetto giunge sull'interfaccia in cui è abilitata l'opzione <code>'''blacklist'''</code>, il firewall controlla se l'indirizzo IP sorgente e MAC (se disponibile) sono inclusi nella blacklist e quindi se il pacchetto va bloccato.
È possibile anche specificare protocolla e porta.
È possibile anche specificare protocolla e porta.
<pre>
<pre>
Riga 185: Riga 182:
</pre>
</pre>


Per maggiori informazioni [http://www.shorewall.net/3.0/manpages/blacklist.html blacklist(5)].
Per maggiori informazioni [http://www.shorewall.net/manpages/shorewall-blacklist.html blacklist(5)].
 
La blacklist può avere anche un carattere dinamico. Gli elementi presenti nella blacklist saranno
"dimenticati" ogni volta che shorewall sarà riavviato, a meno che essi non siano stati salvati.
 
; <code>shorewall drop <ipaddresslist></code>: inserisce gli IP nella blacklist dinamica con politica DROP
; <code>shorewall reject <ipaddresslist></code>: inserisce gli IP nella blacklist dinamica con politica REJECT
; <code>shorewall allow <ipaddresslist></code>: toglie gli IP dalla blacklist dinamica
; <code>shorewall show dynamic</code>: mostra gli elementi presenti nella blacklist dinamica
; <code>shorewall save</code>: salva la configurazione della blacklist dinamica, in modo che al prossimo riavvia sia ripristinata
 
L'utilizzo delle blacklist dinamiche è particolarmente utile quando affiancato a programmi esterni come ad es. strumenti che effettuano il blacklisting automatico degli IP che tentano attacchi di tipo brute force a servizi quali POP3, FTP etc.


==Abilitare il forwarding==
==Abilitare il forwarding==
In <code>/etc/shorewall/shorewall.conf</code> l'opzione <code>'''IP_FORWARDING'''</code> va impostata su <code>'''On'''</code>.
I casi in cui l'<code>'''IP_FORWARDING'''</code> non va attivato sono due:
* Il firewall è installato su un sistema isolato, per esempio un server pubblico.
* L'accesso verso l'esterno avviene esclusivamente tramite servizi di proxy (installati sul firewall).
==Masquerading (NAT)==
L'<code>''IP Masquerading''</code> è una forma di <code>''NAT''</code> che permette di far condividere una connessione internet ad una LAN in modo semplice e comodo.
Supponiamo di avere la LAN collegata alla scheda di rete '''eth0''' (via <code>192.168.0.0/24</code>) e la connettività a '''eth1'''. Per fare in modo che la LAN sia "mascherata" dall'IP della connessione internet, editare il file <code>/etc/shorewall/masq</code>:
<pre>
###############################################################################
#INTERFACE              SUBNET          ADDRESS        PROTO  PORT(S) IPSEC
eth1                    192.168.0.0/24
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
</pre>


==Eseguire il DNAT==
==Eseguire il DNAT==
<code>''DNAT''</code> è l'acronimo di ''Destination Network Address Translation''. È una tecnica per cambiare l'indirizzo IP di destinazione di un pacchetto e tenere traccia dei pacchetti di risposta. Detto in altre parole facciamo <code>''DNAT''</code> quando "giriamo una porta verso una macchina interna al firewall".


==Gestire una DMZ==
Per inoltrare le richieste smtp, pop3 e imap da internet verso la macchina in DMZ 192.168.10.5:
===Dichiarazione dell'interfaccia===
 
===Politica Predefinita===
<pre>
===Regole===
#ACTION SOURCE  DEST            PROTO  DEST    SOURCE  ORIGINAL
#                                      PORT    PORT(S) DEST
DNAT    net    dmz:192.168.10.5 tcp    smtp,pop3
</pre>
 
Eventualmente è possibile cambiare la coppia di porte origine/destinazione.


==Il comando shorewall==
==Il comando shorewall==
Il comando ha alcune opzioni comode e interessanti:
; <code>safe-restart</code>: salva la configurazione attuale, quindi applica quella nuova e chiede conferma per mantenere le nuove regole; se la conferma non è data entro 60 secondi sono riapplicate le regole precedenti;
; <code>try configuration-directory [timeout]</code>: riavvia shorewall utilizzando la configurazione presente nella directory specificata e se sono rilevati errori o se il timeout è raggiunto, le regole precedenti sono riapplicate;
; <code>check</code>: esegue la validazione sintattica della configurazione;
; <code>logwatch</code>: simile a <code>tail -f $LOGFILE</code>;
; <code>ipcalc [<address> <mask> | <address/vlsm>]</code>: dato un indirizzo di rete, mostra i corrispondenti indirizzi di network, broadcast e netmask.
{{Autori
|Autore = [[Utente:Nicsar|~ Nicsar]] 11:48, 23 feb 2009 (CET) (Nicola Sarobba)
}}
[[Categoria:Firewall]]

Versione attuale delle 20:08, 15 dic 2015

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"

Introduzione

Netfilter è il framework di filtraggio pacchetti presente nei Kernel Linux (>= 2.4). Il software userspace associato a Netfilter è iptables ed è utilizzato per configurare le regole di filtraggio dei pacchetti. Shorewall è uno strumento ad alto livello per configurare Netfilter.

La guida si rivolge a chi come me deve amministrare quotidianamente un cospicuo numero di firewall Linux e si rende conto della difficoltà oggettiva a farlo con i classici shell script iptables.

iptables

iptables(8) è lo strumento base per costruire firewall.

Si utilizza il comando iptables per specificare le politiche predefinite, le regole di INPUT, quelle di OUTPUT e quelle di FORWARDING. Solitamente si raccoglie la serie di comandi in uno shell script destinato quasi sempre a crescere nel tempo man mano che le politiche di firewalling divengono più specifiche o devono descrivere nuove esigenze. Spesso ci si trova ad amministrare un firewall descritto da uno shell script anche complesso, ma sicuramente lungo, il che oggettivamente può creare difficoltà nella manutenzione del firewall. Inoltre è sicuramente più difficile stabilire, leggendo lo script, se le politiche di firewalling sono implementate correttamente.

Shorewall

Shoreline Firewall (in breve Shorewall) rientra nella categoria degli strumenti ad alto livello per configurare Netfilter.

Questo tipo di strumenti permette di specificare regole di firewalling ad un livello d'astrazione più elevato di quello offerto da un semplice shell script iptables, utilizzando un linguaggio spesso vicino al modo in cui si definisce la politica di firewalling.

Per specificare una politica di firewalling si potrebbe procedere come segue:

  1. Individuazione delle zone di rete, p.e. rete locale, pubblica e DMZ.
  2. Politiche predefinite per il traffico da una zona all'altra.
  3. Regole di firewalling (non sono altro che delle eccezioni alle politiche predefinite di cui sopra).
Politiche di Firewalling per XYZ

Reti
 - locale
 - pubblica
 - DMZ

Politiche di traffico predefinite
 pubblica -> locale   DROP
 pubblica -> DMZ      DROP
 locale   -> pubblica REJECT
 locale   -> DMZ      ACCEPT
 DMZ      -> locale   DROP
 DMZ      -> pubblica REJECT

Regole
 locale -> pubblica:any:web ACCEPT
 locale -> pubblica:application_server:81 ACCEPT
 [...]

Ovviamente si tratta solo di un breve esempio, tuttavia si vedrà di seguito come Shorewall utilizzi una procedura analoga e una sintassi simile a quella mostrata qui sopra.

Il funzionamento di Shorewall consiste nel leggere dei file di configurazione, compilarli in una serie di comandi iptables ed eseguirli. Quindi non si tratta di un demone e il firewall funziona esattamente come quando lo si costruisce con il classico shell script.

Installazione in Debian GNU/Linux

L'installazione è semplicissima:

# apt-get install shorewall
Info.png Nota
shorewall viene installato senza alcuna configurazione predefinita. In /usr/share/doc/shorewall/examples sono presenti alcuni file di configurazione a cui è possibile riferirsi per iniziare la configurazione del firewall.


Terminata la configurazione, prima di avviare il servizio, è necessario editare /etc/default/shorewall per impostare la variabile startup:

# prevent startup with default configuration
# set the below varible to 1 in order to allow shorewall to start
startup=1

A questo punto procedere con l'usuale:

/etc/init.d/shorewall start

Dichiarazione delle Interfacce di Rete

Le interfacce di rete sono dichiarate nel file /etc/shorewall/interfaces:

#ZONE INTERFACE BROADCAST OPTIONS
net   eth0      detect    blacklist,norfc1918,nosmurfs,routefilter
loc   eth1      detect

Sono state dichiarate due interfacce: l'interfaccia pubblica sta sulla eth0, mentre la LAN sulla eth1. Alle interfacce sono associate le etichette net e loc. Nel campo OPTIONS sono specificate delle opzioni attive sull'interfaccia net:

blacklist
all'interfaccia è associato il file /etc/shorewall/blacklist, in cui si specificano gli indirizzi IP da bloccare;
norfc1918
l'interfaccia non deve accettare pacchetti il cui indirizzo sorgente è specificato nell'RFC1918 (principalmente indirizzi privati;
nosmurfs
filtra i pacchetti per gli smurfs, cioè quelli che hanno come sorgente un indirizzo di broadcast;
routefilter
contro misura per spoofing.

Per maggiori informazioni riferirsi a interfaces(5).

Zone

Le zone della rete sono dichiarate in /etc/shorewall/zones:

#############################################################
#ZONE   TYPE    OPTIONS     IN                      OUT
#                           OPTIONS                 OPTIONS
fw      firewall
net     ipv4
loc     ipv4

Sono dichiarate una zona firewall, net (internet) e loc (la rete locale). Il campo TYPE individua il tipo di zona:

firewall
è il firewall stesso e deve essere presente una sola zona di questo tipo;
ipv4
è il tipo standard predefinito;
ipsec
la comunicazione con gli host presenti in questa zona è criptata.

Per maggiori informazioni riferirsi a zones(5).

Politiche Predefinite

Le politiche predefinite specificano la politica di interconnessione delle zone dichiarate in /etc/shorewall/zones. Si dichiarano nel file /etc/shorewall/policy:

#SOURCE   DEST   POLICY     LOG           BURST:LIMIT
#                           LEVEL
loc       net    REJECT     info
net       all    DROP       info
all       all    REJECT     info

Sorgente e destinazione possono essere:

zone
un nome di zona definito nel file /etc/shorewall/zones;
$FW
è il firewall stesso;
all
tutte le zone.

Le politiche più comuni:

ACCEPT
la connessione viene accettata;
DROP
la connessione viene ignorata silenziosamente;
REJECT
per le connessioni TCP il firewall risponde con RST (reset), per le altre connessioni il firewall risponde con un ICMP - unreacheable.

Se il campo LOG è impostato, la connessioni sono registrate secondo il log level dichiarato. È possibile anche l'utilizzo di ULOG per l'invio dei log del firewall all'infrastruttura ULOG. Per l'utilizzo di ULOG è necessario anche modificare il file /etc/shorewall/shorewall.conf.

Impostando il campo BURST:LIMIT si specifica il rateo massimo di connessioni TCP e la misura di un burst accettabile.

Per maggiori informazioni riferirsi a policy(5).

Parametrizzazione

In /etc/shorewall/params si definiscono variabili e liste da utilizzare nelle regole o anche nelle interfacce. Per esempio:

# Variabile
HOSTA="1.2.3.4"
HOSTB="1.2.3.5"
# Lista di variabili
MANGEMENTHOSTS="$HOSTA,$HOSTB"

Per utilizzare nelle regole una variabile occorre specificarla nella forma $VARIABILE, esattamente come avviene negli shell script.

Per maggiori informazioni riferirsi a params(5).

Regole

Le regole vanno specificate nel file /etc/shorewall/rules.

# Macro/ACTION SRC                  DST
SSH/ACCEPT     net:$MANGEMENTHOSTS  $FW
#
ACCEPT         dmz:$MAILSERVER      net:$PYZOR   udp    24441

Per maggiori informazioni riferirsi a rules(5).

Macro predefinite

Le macro permettono di specificare le regole in modo semplice e sintetico. Shorewall viene distribuito con una serie di macro predefinite, installate in /usr/share/shorewall. Sono definite in file del tipo macro.NOMEMACRO. Per esempio macro.POP3 individua il traffico in transito verso la porta 110 che normalmente è appunto utilizzata dal protocollo POP3.

Macro definite dall'utente

L'utente può aggiungere macro a quelle già disponibili definendole in file tipo macro.* da creare in /etc/shorewall. Supponendo di voler cambiare la porta su cui ascolta sshd da 22 a 2222, possiamo definire la seguente macro /etc/shorewall/macro.ssh2222:

#ACTION SOURCE  DEST    PROTO   DEST    SOURCE  ORIGINAL        RATE    USER/
#                               PORT    PORT(S) DEST            LIMIT   GROUP
PARAM   -       -       tcp     2222
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Blacklist

Il file /etc/shorewall/blacklist è utilizzato per il blacklisting statico. Si possono specificare indirizzi IP e MAC. Quando un pacchetto giunge sull'interfaccia in cui è abilitata l'opzione blacklist, il firewall controlla se l'indirizzo IP sorgente e MAC (se disponibile) sono inclusi nella blacklist e quindi se il pacchetto va bloccato. È possibile anche specificare protocolla e porta.

#ADDRESS/SUBNET       PROTOCOL        PORT
# Una rete brasiliana
200.129.0.0/16
# L'host 1.2.3.4 non deve collegarsi a squid.
1.2.3.4               tcp             3128

Per maggiori informazioni blacklist(5).

La blacklist può avere anche un carattere dinamico. Gli elementi presenti nella blacklist saranno "dimenticati" ogni volta che shorewall sarà riavviato, a meno che essi non siano stati salvati.

shorewall drop <ipaddresslist>
inserisce gli IP nella blacklist dinamica con politica DROP
shorewall reject <ipaddresslist>
inserisce gli IP nella blacklist dinamica con politica REJECT
shorewall allow <ipaddresslist>
toglie gli IP dalla blacklist dinamica
shorewall show dynamic
mostra gli elementi presenti nella blacklist dinamica
shorewall save
salva la configurazione della blacklist dinamica, in modo che al prossimo riavvia sia ripristinata

L'utilizzo delle blacklist dinamiche è particolarmente utile quando affiancato a programmi esterni come ad es. strumenti che effettuano il blacklisting automatico degli IP che tentano attacchi di tipo brute force a servizi quali POP3, FTP etc.

Abilitare il forwarding

In /etc/shorewall/shorewall.conf l'opzione IP_FORWARDING va impostata su On. I casi in cui l'IP_FORWARDING non va attivato sono due:

  • Il firewall è installato su un sistema isolato, per esempio un server pubblico.
  • L'accesso verso l'esterno avviene esclusivamente tramite servizi di proxy (installati sul firewall).

Masquerading (NAT)

L'IP Masquerading è una forma di NAT che permette di far condividere una connessione internet ad una LAN in modo semplice e comodo.

Supponiamo di avere la LAN collegata alla scheda di rete eth0 (via 192.168.0.0/24) e la connettività a eth1. Per fare in modo che la LAN sia "mascherata" dall'IP della connessione internet, editare il file /etc/shorewall/masq:

###############################################################################
#INTERFACE              SUBNET          ADDRESS         PROTO   PORT(S) IPSEC
eth1                    192.168.0.0/24
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE

Eseguire il DNAT

DNAT è l'acronimo di Destination Network Address Translation. È una tecnica per cambiare l'indirizzo IP di destinazione di un pacchetto e tenere traccia dei pacchetti di risposta. Detto in altre parole facciamo DNAT quando "giriamo una porta verso una macchina interna al firewall".

Per inoltrare le richieste smtp, pop3 e imap da internet verso la macchina in DMZ 192.168.10.5:

#ACTION SOURCE  DEST            PROTO   DEST    SOURCE  ORIGINAL
#                                       PORT    PORT(S) DEST
DNAT    net     dmz:192.168.10.5 tcp    smtp,pop3

Eventualmente è possibile cambiare la coppia di porte origine/destinazione.

Il comando shorewall

Il comando ha alcune opzioni comode e interessanti:

safe-restart
salva la configurazione attuale, quindi applica quella nuova e chiede conferma per mantenere le nuove regole; se la conferma non è data entro 60 secondi sono riapplicate le regole precedenti;
try configuration-directory [timeout]
riavvia shorewall utilizzando la configurazione presente nella directory specificata e se sono rilevati errori o se il timeout è raggiunto, le regole precedenti sono riapplicate;
check
esegue la validazione sintattica della configurazione;
logwatch
simile a tail -f $LOGFILE;
ipcalc [<address> <mask> | <address/vlsm>]
dato un indirizzo di rete, mostra i corrispondenti indirizzi di network, broadcast e netmask.




Guida scritta da: ~ Nicsar 11:48, 23 feb 2009 (CET) (Nicola Sarobba) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized