Configurare Netfilter con Shorewall: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Riga 9: Riga 9:
[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 <tt>iptables(8)</tt>] è 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 <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.
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 56: Riga 54:
</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|<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.}}


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 <tt>/etc/default/shorewall</tt> per impostare la variabile <tt>startup</tt>:
Riga 74: Riga 72:


</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 <tt>eth0</tt>, mentre la ''LAN'' sulla <tt>eth1</tt>.
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 <tt>/etc/shorewall/blacklist</tt>, 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)].
Riga 95: Riga 93:
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/3.0/manpages/shorewall-zones.html zones(5)].


==Politiche Predefinite==
==Politiche Predefinite==
Riga 116: Riga 114:
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 <tt>/etc/shorewall/zones</tt>;
; $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 <tt>/etc/shorewall/shorewall.conf</tt>.


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/3.0/manpages/shorewall-policy.html policy(5)].
Riga 143: Riga 141:
</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/3.0/manpages/shorewall-params.html params(5)].
Riga 166: Riga 164:


===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 <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:
<pre>
<pre>
#ACTION SOURCE  DEST    PROTO  DEST    SOURCE  ORIGINAL        RATE    USER/
#ACTION SOURCE  DEST    PROTO  DEST    SOURCE  ORIGINAL        RATE    USER/
Riga 175: Riga 173:


==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 <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.
È possibile anche specificare protocolla e porta.
È possibile anche specificare protocolla e porta.
<pre>
<pre>
Riga 190: Riga 188:
"dimenticati" ogni volta che shorewall sarà riavviato, a meno che essi non siano stati salvati.
"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
; <code>shorewall drop <ipaddresslist></code>: inserisce gli IP nella blacklist dinamica con politica DROP
; shorewall reject <ipaddresslist>: inserisce gli IP nella blacklist dinamica con politica REJECT
; <code>shorewall reject <ipaddresslist></code>: inserisce gli IP nella blacklist dinamica con politica REJECT
; shorewall allow <ipaddresslist>: toglie gli IP dalla blacklist dinamica
; <code>shorewall allow <ipaddresslist></code>: toglie gli IP dalla blacklist dinamica
; shorewall show dynamic: mostra gli elementi presenti nella blacklist dinamica
; <code>shorewall show dynamic</code>: mostra gli elementi presenti nella blacklist dinamica
; shorewall save: 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
Riga 200: Riga 198:


==Abilitare il forwarding==
==Abilitare il forwarding==
In <tt>/etc/shorewall/shorewall.conf</tt> l'opzione '''IP_FORWARDING''' va impostata su '''On'''.
In <tt>/etc/shorewall/shorewall.conf</tt> l'opzione <code>'''IP_FORWARDING'''</code> va impostata su <code>'''On'''</code>.
I casi in cui l''''IP_FORWARDING''' non va attivato sono due:
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.
* Il firewall è installato su un sistema isolato, per esempio un server pubblico.
Riga 208: Riga 206:
==Masquerading (NAT)==
==Masquerading (NAT)==


L'''IP Masquerading'' è una form di ''NAT'' 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 <tt>/etc/shorewall/masq</tt>:
Riga 220: Riga 218:


==Eseguire il DNAT==
==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".
<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 234:
Il comando ha alcune opzioni comode e interessanti:
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
; <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;
; 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
; <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;
; show check: esegue la validazione sintattica della configurazione
; <code>show check</code>: esegue la validazione sintattica della configurazione;
; logwatch: simile a <tt>tail -f $LOGFILE</tt>
; <code>logwatch</code>: simile a <tt>tail -f $LOGFILE</tt>;
; ipcalc [<address> <mask> | <address/vlsm>]: 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.




1 508

contributi