Configurare Netfilter con Shorewall: differenze tra le versioni

m
tt to code
m (Correzioni minori)
m (tt to code)
Riga 8: 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 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.
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.


==Shorewall==
==Shorewall==
Riga 46: 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 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 52: 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 è possibile 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 66: 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 73: Riga 73:


</pre>
</pre>
Sono state dichiarate due interfacce: l'interfaccia pubblica 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''':


; <code>blacklist</code>: 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;
; <code>norfc1918</code>: 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;
; <code>nosmurfs</code>: 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;
Riga 85: Riga 85:


==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 104: Riga 104:


==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 115: Riga 115:
Sorgente e destinazione possono essere:
Sorgente e destinazione possono essere:


; <code>zone</code>: 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>;
; <code>$FW</code>: è il firewall stesso;
; <code>$FW</code>: è il firewall stesso;
; <code>all</code>: tutte le zone.
; <code>all</code>: tutte le zone.
Riga 125: Riga 125:
; <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>.
; <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 <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 <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 <code>''BURST:LIMIT''</code> si specifica il rateo massimo di connessioni <code>''TCP''</code> e la misura di un <code>''burst''</code> 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.
Riga 132: Riga 132:


==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 147: Riga 147:


==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 159: Riga 159:
===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''.


===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 ascolta <code>''sshd''</code> da <tt>22</tt> a <tt>2222</tt>, possiamo definire la seguente macro <tt>/etc/shorewall/macro.ssh2222</tt>:
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 172: 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 <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.
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 193: Riga 193:
; <code>shorewall save</code>: salva la configurazione della blacklist dinamica, in modo che al prossimo riavvia sia ripristinata
; <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
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.
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 <tt>/etc/shorewall/shorewall.conf</tt> l'opzione <code>'''IP_FORWARDING'''</code> va impostata su <code>'''On'''</code>.
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:
I casi in cui l'<code>'''IP_FORWARDING'''</code> non va attivato sono due:


Riga 207: Riga 206:
L'<code>''IP Masquerading''</code> è una forma di <code>''NAT''</code> che permette di far condividere una connessione internet ad una LAN
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''' e la connettività a
in modo semplice e comodo. Supponiamo di avere la LAN collegata alla scheda di rete '''eth0''' e la connettività a
'''eth1'''. Per fare in modo che la LAN sia "mascherata" dall'IP della connessione internet, editare il file <tt>/etc/shorewall/masq</tt>:
'''eth1'''. Per fare in modo che la LAN sia "mascherata" dall'IP della connessione internet, editare il file <code>/etc/shorewall/masq</code>:


<pre>
<pre>
Riga 217: Riga 216:


==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".
<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".


Per inoltrare le richieste smtp, pop3 e imap da internet verso la macchina in DMZ 192.168.10.5:
Per inoltrare le richieste smtp, pop3 e imap da internet verso la macchina in DMZ 192.168.10.5:
Riga 236: Riga 235:
; <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>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>show check</code>: esegue la validazione sintattica della configurazione;
; <code>show check</code>: esegue la validazione sintattica della configurazione;
; <code>logwatch</code>: simile a <tt>tail -f $LOGFILE</tt>;
; <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.
; <code>ipcalc [<address> <mask> | <address/vlsm>]</code>: dato un indirizzo di rete, mostra i corrispondenti indirizzi di network, broadcast e netmask.


6 999

contributi