Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/doc/library/linux/AppLinux/al279.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:09:00 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 13:25:45 2007 Êîäèðîâêà: ISO8859-5 |
Questo capitolo viene conservato solo a sostegno di chi utilizza ancora i kernel Linux 2.0.*, e di conseguenza potrebbe utilizzare ancora il programma |
All'interno di una rete, il firewall ø un componente che serve a proteggerne una parte rispetto al resto. Di solito, si tratta di qualcosa che si interpone tra una rete privata e una rete pubblica, come Internet, per evitare un accesso indiscriminato alla rete privata da parte di nodi collocati all'esterno di questa.
Il firewall, a parte il significato letterale del nome, ø una sorta di filtro (passivo o attivo) che si interpone al traffico di rete, e che pertanto deve essere regolato opportunamente, in base agli obbiettivi che si intendono raggiungere.
+----------+ Rete privata da proteggere - - - ------------------| Firewall |------------*-----------*-------- - - - Rete pubblica +----------+ | | (Internet) +--------+ +--------+ | host | | host | +--------+ +--------+ |
Generalmente, i compiti del firewall vengono svolti da un elaboratore configurato opportunamente, e munito di almeno due interfacce di rete: una per l'accesso alla rete esterna e una per la rete privata.
Questo capitolo, dopo una breve introduzione generale ai concetti legati ai firewall, affronta in dettaglio solo le funzionalitð di filtro di pacchetto IP, native del kernel Linux.
Il firewall elementare ø un elaboratore con due interfacce di rete, per le quali siano stati definiti gli instradamenti nel modo consueto, ma dove sia stato impedito il transito del traffico tra un'interfaccia e l'altra.
L'utilitð di un filtro del genere ø minima. Probabilmente si potrebbe utilizzare come server SMTP e come punto di arrivo per i messaggi di posta elettronica, che gli utenti della rete privata potrebbero scaricare attraverso un protocollo come POP3, o IMAP. Inoltre, gli utenti che desiderano accedere alla rete esterna, potrebbero utilizzare Telnet per collegarsi al firewall per poi avviare da lü il programma client adatto all'operazione che vogliono compiere.
Evidentemente, questa non deve essere intesa come una scelta ottimale, anzi, di sicuro si tratta di un approccio sbagliato dal punto di vista della sicurezza, ma serve a rendere l'idea del significato che pu? avere un firewall.
Volendo, l'inserimento di una cache proxy all'interno del firewall potrebbe permettere agli utenti della rete privata che dispongono di software adatto, di accedere alle risorse della rete esterna (di solito solo con i protocolli HTTP e FTP).
All'estremo opposto, un router ø un firewall che consente il transito di tutto il traffico, senza porre alcun limite, nù controllo.
Si distinguono due tipi fondamentali di firewall: filtri di pacchetto IP e server proxy.
I filtri di pacchetto IP permettono di bloccare o abilitare selettivamente il traffico che attraversa il firewall, definendo i protocolli (o meglio, il tipo di pacchetto), gli indirizzi IP e le porte utilizzate.
Questo tipo di sistema permette al massimo di controllare i tipi di servizio che possono essere utilizzati in una direzione e nell'altra, da e verso determinati indirizzi IP, ma senza la possibilitð di annotare in un registro i collegamenti che sono stati effettuati (salvo eccezioni), nù di poter identificare gli utenti che li utilizzano. In un certo senso, questo tipo di firewall ø come un router su cui si pu? solo filtrare i tipi di pacchetto che si vogliono lasciar transitare.
I server proxy rappresentano una sorta di intermediario che si occupa di intrattenere le connessioni per conto di qualcun altro nella rete privata. Per tornare all'esempio del firewall elementare, ø come se un utente aprisse una connessione Telnet verso il proxy, e poi da lü utilizzasse un programma client adatto per il tipo di collegamento che intende realizzare al di fuori della sua rete privata.
Dal momento che il proxy ha un ruolo attivo nelle connessioni, pu? tenere un registro delle azioni compiute, ed eventualmente anche tentare di identificare l'utente che tenta di utilizzarlo.
Per completare il discorso, una cache proxy ø qualcosa di simile al server proxy a cui si sta facendo riferimento. La differenza sta essenzialmente nella specializzazione, che nel primo caso ø puntata alla gestione di una memoria cache, mentre nel secondo ø rivolta alla protezione della rete privata.
Il kernel Linux pu? gestire direttamente il filtro dei pacchetti IP, cosa che quindi rappresenta la scelta pi? semplice per la realizzazione di un firewall con questo sistema operativo. A parte le limitazioni che pu? avere un tale tipo di firewall, il suo inserimento nella rete non genera effetti collaterali particolari, dal momento che poi non c'ø bisogno di utilizzare software speciale per i client, come avviene invece nel caso di un firewall proxy.
Trattandosi di un'attivitð del kernel, ø necessario che questo sia stato predisposto in fase di compilazione, oppure sia accompagnato dai moduli necessari.
In aggiunta, ø opportuno aggiungere anche le funzionalitð seguenti per il controllo dei pacchetti e il mascheramento IP.
IP: firewall packet logging ( 19.2.7) Y
IP: masquerading ( 19.2.7) Y
IP: ICMP masquerading ( 19.2.7) Y
IP: transparent proxy support ( 19.2.7) Y
IP: accounting ( 19.2.7) Y
Ø importante osservare che quando si utilizza il sistema del filtro di pacchetto IP, ø necessario consentire il transito dei pacchetti attraverso il firewall, abilitando in pratica le funzionalitð di forwarding/gatewaying come nel caso di un router normale.
Una volta inserita nel kernel la funzionalitð di forwarding/gatewaying, questa pu? essere controllata attraverso un file del filesystem virtuale /proc/
. Per motivi di sicurezza, alcune distribuzioni GNU/Linux sono predisposte in modo da disattivare questa funzionalitð attraverso uno dei comandi inseriti nella procedura di inizializzazione del sistema. Per riattivare il forwarding/gatewaying, si pu? agire nel modo seguente:
#š
echo 1 > /proc/sys/net/ipv4/ip_forward
La gestione del filtro di pacchetto IP del kernel deve essere regolata in qualche modo, e questo avviene attraverso il programma ipfwadm
(IP Firewall Administration). Dal momento che le funzionalitð di firewall del kernel sono piuttosto estese, la sintassi di questo programma ø molto articolata, e se ne pu? apprendere l'utilizzo solo gradualmente.
Inoltre, ø bene chiarire subito che le funzionalitð di firewall del kernel non sono configurabili attraverso un file di configurazione; quindi, al massimo, tutto quello che si pu? fare ø la realizzazione di uno script contenente una serie di comandi con ipfwadm
.
ipfwadm
interviene su un elenco di regole riferite alle funzionalitð di firewall del kernel; un po' come avviene con la tabella degli instradamenti di un router. L'ordine in cui sono elencate tali regole ø importante, quindi si deve poter distinguere tra l'inserimento di una regola all'inizio o alla fine dell'elenco esistente.
Salvo eccezioni particolari, che verranno descritte nel contesto opportuno, la sintassi per l'utilizzo di ipfwadm
ø quella seguente:
ipfwadm <categoria-di-intervento> <comando> <parametri> [<opzioni>] |
La categoria di intervento di ipfwadm
ø rappresentata da una sigla, e serve a stabilire a cosa si riferisce la regola definita attraverso gli argomenti successivi.
-
I
Definisce una regola riferita al traffico in ingresso.
-
O
Definisce una regola riferita al traffico in uscita.
-
F
Definisce una regola riferita al traffico in transito attraverso il firewall (forward).
Dopo l'indicazione della categoria di intervento per ipfwadm
, deve essere indicato un comando, cioø un tipo di opzione pi? o meno articolato che stabilisce l'azione da compiere all'interno della regola che viene definita.
|
Cancella tutte le regole riferite alla categoria di intervento indicata anteriormente.
Se si utilizza il comando |
|
Emette attraverso lo standard output le regole riferite della categoria di intervento indicata.
Se si utilizza il comando |
|
|
Inserisce la regola definita dai parametri e dalle opzioni successive, alla fine (
, append), oppure all'inizio (-
a
) dell'elenco.
-
i
Quando si tratta di una regola di firewall (ovvero, ci? a cui si fa riferimento in queste sezioni), ø obbligatoria l'indicazione di una politica rappresentata da una parola chiave: accept
, deny
o reject
. Il significato dovrebbe essere intuitivo: accettare, rifiutare o rigettare i pacchetti che soddisfano la definizione fatta attraverso i parametri successivi.
La differenza tra deny
e reject
sta nel fatto che, nel primo caso il rifiuto ø silenzioso, mentre nel secondo viene generata una segnalazione di errore inviata all'origine del pacchetto.
|
Permette di eliminare una regola dal gruppo appartenente alla categoria specificata. Per ottenere la sua eliminazione, occorre indicare la stessa politica e gli stessi parametri utilizzati per crearla.
|
Serve a definire una politica predefinita, riferita alla categoria selezionata, per tutte le situazioni che non corrispondono ad alcuna regola indicata espressamente.
In generale, se non viene definito diversamente, la politica predefinita ø |
Le opzioni sono gli argomenti di ipfwadm
che definiscono la regola, che generalmente si vuole aggiungere. Prima di descrivere la sintassi di questi parametri, ø bene chiarire alcune convenzioni che vengono utilizzate.
La definizione di un gruppo di indirizzi IP pu? essere fatta attraverso l'indicazione di una coppia <numero-IP>/<maschera>, con una barra obliqua di separazione tra i due. La maschera pu? essere indicata nel modo consueto, oppure con un numero che esprime la quantitð di bit iniziali da porre al valore 1. A titolo di esempio, la tabella 215.1 mostra l'equivalenza tra alcune maschere di rete tipiche e questo numero di abbreviazione.
Maschera di rete | Abbreviazione | Sottorete |
255.0.0.0 | 8 | Classe A |
255.255.0.0 | 16 | Classe B |
255.255.255.0 | 24 | Classe C |
255.255.255.255 | 32 | punto-punto |
Quando si vuole fare riferimento a indirizzi imprecisati, si utilizza solitamente l'indirizzo 0.0.0.0, che pu? essere indicato anche in forma simbolica attraverso la parola chiave any
. Nello stesso modo il gruppo di indirizzi 0.0.0.0/0, cioø ogni indirizzo, pu? essere rappresentato nei rapporti (quelli che si ottengono con il comando
) con la parola chiave -
lanywhere
.
Alcune regole possono fare riferimento all'utilizzo di porte, o intervalli di porte particolari (qui si trascura volontariamente il problema dei pacchetti ICMP). Queste porte possono essere espresse attraverso un nome, come definito nel file /etc/services
, oppure per numero, cosa che di solito si preferisce per questo tipo di applicazione. Gli intervalli di porte, in particolare, vengono espressi nella forma seguente:
<porta-iniziale>:<porta-finale> |
Il kernel ø in grado di gestire un numero limitato di regole che contengano riferimenti precisi a porte. Di solito ø consentita l'indicazione massima di 10 porte, dove gli intervalli valgono per due. |
|
Stabilisce il tipo di protocollo della regola che viene definita. La parola chiave all
rappresenta qualsiasi protocollo, ed ø l'impostazione predefinita se questo parametro non viene utilizzato.
L'indicazione del protocollo ø obbligatoria quando si specificano le porte di un'origine o di una destinazione. |
|
Permette di definire l'origine dei pacchetti. L'indirizzo viene indicato generalmente in forma numerica, anche se c'ø la possibilitð di usare un nome di dominio. La maschera, eventuale, serve a indicare un gruppo di indirizzi.
Se questo parametro viene omesso, si intende implicitamente
, ovvero -
Sš0.0.0.0/0
, che rappresenta tutti gli indirizzi possibili.
-
Sšany/0
|
Permette di definire la destinazione dei pacchetti. L'indirizzo viene indicato generalmente in forma numerica, anche se c'ø la possibilitð di usare un nome di dominio. La maschera, eventuale, serve a indicare un gruppo di indirizzi.
Se questo parametro viene omesso, si intende implicitamente
, ovvero -
Dš0.0.0.0/0
, che rappresenta tutti gli indirizzi possibili.
-
Dšany/0
|
Permette di indicare l'indirizzo dell'interfaccia di rete attraverso la quale sono ricevuti o inviati i pacchetti della regola che si sta definendo.
Se questo parametro viene omesso, si intende implicitamente
, che rappresenta eccezionalmente un qualunque indirizzo.
-
Vš0.0.0.0
|
Permette di indicare il nome dell'interfaccia di rete attraverso la quale sono ricevuti o inviati i pacchetti della regola che si sta definendo.
Se questo parametro viene omesso, si intende fare riferimento implicitamente a qualunque interfaccia di rete.
Alcune opzioni finali possono essere importanti e vale la pena di conoscerle. Ø il caso di precisare che, anche se la sintassi indicata da ipfwadm(8) pone queste opzioni alla fine della riga di comando, queste possono apparire dopo i comandi, subito prima dei parametri.
|
Questa opzione pu? essere usata solo in combinazione al comando
, e permette di ottenere informazioni pi? dettagliate.
-
l
|
Questa opzione viene usata normalmente assieme al comando
, e fa in modo che le informazioni su indirizzi e porte siano espresse in forma numerica.
-
l
|
Fa in modo che la regola valga in modo bidirezionale per i pacchetti IP.
|
Attiva l'annotazione dei pacchetti che corrispondono alla regola, utilizzando il registro del sistema (per la precisione si tratta di messaggi del kernel, che di solito vengono intercettati dal demone klogd
che poi li invia al registro del sistema).
Ci sono tre utilizzi tipici di ipfwadm
con cui ø necessario avere confidenza prima di analizzare degli esempi pi? sostanziosi: l'elenco delle regole di una determinata categoria, la cancellazione di tutte le regole di una categoria e la definizione della politica predefinita.
#š
ipfwadm
[Invio]-
I -
l
IP firewall input rules, default policy: accept |
#š
ipfwadm
[Invio]-
O -
l
IP firewall output rules, default policy: accept |
#š
ipfwadm
[Invio]-
F -
l
IP firewall forward rules, default policy: accept |
L'esempio mostra l'uso dei comandi necessari a visualizzare le regole delle categorie riferite alla funzionalitð di controllo dell'input, dell'output e di attraversamento dei pacchetti IP. Se il kernel ø predisposto per la loro gestione e non sono state definite regole di alcun tipo, quello che si vede ø il risultato generato da questi comandi. Si osservi in particolare che la politica predefinita ø sempre accept
.
In generale, quando si predispone uno script con tutte le regole di firewall che si vogliono applicare, si inizia dall'azzeramento di quelle eventualmente esistenti, esattamente nel modo seguente:
#!/bin/sh /sbin/ipfwadm -I -f /sbin/ipfwadm -O -f /sbin/ipfwadm -F -f #... |
Dal momento che le funzionalitð di filtro del kernel Linux non devono interferire con quelle di routing, nel caso le prime non siano state definite, ø necessario che la politica predefinita sia sempre accept
. In generale, se si vuole configurare il proprio elaboratore come firewall, la situazione cambia, e dovrebbe essere conveniente il contrario, in modo da poter controllare la situazione. In pratica, dopo l'azzeramento delle regole delle varie categorie, ø solitamente opportuno modificare le politiche predefinite, in modo da bloccare gli accessi e il transito dei pacchetti.
#... /sbin/ipfwadm -I -p deny /sbin/ipfwadm -O -p deny /sbin/ipfwadm -F -p deny #... |
La definizione delle regole di firewall deve tenere conto dell'ordine in cui appaiono nell'elenco gestito all'interno del kernel, quindi, la scelta tra i comandi
(aggiunta in coda) e -
a
(inserimento all'inizio) deve essere fatta in modo consapevole. A seconda della propria filosofia personale, si sceglierð probabilmente di utilizzare sempre solo un tipo, oppure l'altro.
-
i
Se si sceglie di ?aggiungereË le regole, dovrebbe essere conveniente iniziare da quelle di rifiuto o rigetto (deny
o reject
), per finire con quelle di accettazione (accept
).
Se si preferisce lasciare che la politica predefinita sia accept
, ø importante ricordare di aggiungere alla fine di tutte le regole di una categoria determinata, una regola che impedisca l'accesso in modo generalizzato, come mostrato nell'esempio seguente:
#... # In coda a tutte le regole /sbin/ipfwadm -I -a deny -S any/0 -D any/0 -o /sbin/ipfwadm -O -a deny -S any/0 -D any/0 -o /sbin/ipfwadm -F -a deny -S any/0 -D any/0 -o |
Nell'esempio, ø stata usata la parola chiave any
, come sinonimo di 0.0.0.0, in modo da rappresentare qualunque indirizzo di origine e di destinazione (0.0.0.0/0). Come si pu? vedere ancora, ø stata aggiunta l'opzione
in modo da annotare nel registro del sistema i tentativi di accesso o di attraversamento non autorizzati. Questo tipo di strategia, soprattutto in considerazione della possibilitð di attivare un controllo nel registro del sistema, pu? giustificare la scelta di lasciare la politica predefinita originale: -
oaccept
.
Di solito, per la definizione delle regole di un firewall ci si limita a utilizzare la categoria
, lasciando libero l'ingresso e l'uscita dei pacchetti (le categorie -
F
e -
I
). Infatti, le regole che controllano l'ingresso e l'uscita dei dati potrebbero essere utili per proteggere un nodo che non disponga della protezione di un firewall, oppure si trovi in un ambiente di cui non ci si possa fidare.
-
O
/sbin/ipfwadm -F -a deny -S 224.0.0.0/3 -D any/0 -o |
Questa regola impedisce il transito di tutti quei pacchetti che provengono da un'origine in cui l'indirizzo IP sia composto in modo da avere i prime tre bit a 1. Infatti, 224 si traduce nel numero binario 11100000, e questo esclude tutta la classe D e la classe E degli indirizzi IPv4. Si osservi l'aggiunta dell'opzione
per ottenere l'annotazione nel registro dei tentativi di attraversamento.
-
o
Segue la visualizzazione della regola attraverso ipfwadmš
.
-
Fš-
l
type prot source destination ports deny all 224.0.0.0/3 anywhere n/a |
/sbin/ipfwadm -F -a deny -S 224.0.0.0/3 -o |
Questo esempio ø esattamente identico a quello precedente, perchù la destinazione predefinita ø proprio quella riferita a qualunque indirizzo.
/sbin/ipfwadm -F -a accept -P tcp -S 192.168.1.0/24 -D any/0 23 |
Consente ai pacchetti TCP provenienti dalla rete 192.168.1.0/255.255.255.0 di attraversare il firewall per raggiungere qualunque indirizzo, ma alla porta 23. In pratica concede di raggiungere un servizio Telnet.
Segue la visualizzazione della regola attraverso ipfwadmš
.
-
Fš-
l
type prot source destination ports acc tcp 192.168.1.0/24 anywhere any -> telnet |
---------
/sbin/ipfwadm -F -a deny -P tcp -S any/0 6000:6009 -D any/0 -o /sbin/ipfwadm -F -a deny -P tcp -S any/0 -D any/0 6000:6009 -o |
Blocca il transito delle comunicazioni riferite alla gestione remota di applicazioni per X. In questo caso, si presume di poter avere a che fare con sistemi che gestiscono fino a 10 server grafici contemporaneamente.
/sbin/ipfwadm -I -a deny -P tcp -S any/0 6000:6009 -D any/0 -o /sbin/ipfwadm -O -a deny -P tcp -S any/0 -D any/0 6000:6009 -o |
Blocca l'ingresso e l'uscita di comunicazioni riferite alla gestione remota di applicazioni per X. Questo potrebbe essere utile per proteggere un sistema che non si avvale di un firewall o che semplicemente non si fida della rete circostante.
Nel documento Linux NET-3-HOWTO, Linux Networking di Terry Dawson (precisamente nella versione 1.2 del 1997), appare l'esempio di un firewall/router con lo scopo di proteggere una rete privata con indirizzi 172.16.37.0/255.255.255.0, come mostrato dalla figura 215.2.
- - \ | 172.16.37.0 \ | /255.255.255.0 \ --------- | | 172.16.174.30 | Linux | | NET =================| f/w |------| ..37.19 | PPP | router| | -------- / --------- |--| Mail | / | | /DNS | / | -------- - - |
Segue lo script abbinato all'immagine di questa figura.
#!/bin/sh # Flush the 'Forwarding' rules table # Change the default policy to 'accept' # /sbin/ipfwadm -F -f /sbin/ipfwadm -F -p accept # # .. and for 'Incoming' # /sbin/ipfwadm -I -f /sbin/ipfwadm -I -p accept # First off, seal off the PPP interface # I'd love to use '-a deny' instead of '-a reject -y' but then it # would be impossible to originate connections on that interface too. # The -o causes all rejected datagrams to be logged. This trades # disk space against knowledge of an attack of configuration error. # /sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30 # Throw away certain kinds of obviously forged packets right away: # Nothing should come from multicast/anycast/broadcast addresses # /sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24 # # and nothing coming from the loopback network should ever be # seen on a wire # /sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24 # accept incoming SMTP and DNS connections, but only # to the Mail/Name Server # /sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53 # # DNS uses UDP as well as TCP, so allow that too # for questions to our name server # /sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53 # # but not "answers" coming to dangerous ports like NFS and # Larry McVoy's NFS extension. If you run squid, add its port here. # /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \ -D 172.16.37.0/24 2049 2050 # answers to other user ports are okay # /sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \ -D 172.16.37.0/24 53 1024:65535 # Reject incoming connections to identd # We use 'reject' here so that the connecting host is told # straight away not to bother continuing, otherwise we'd experience # delays while ident timed out. # /sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113 # Accept some common service connections from the 192.168.64 and # 192.168.65 networks, they are friends that we trust. # /sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \ -D 172.16.37.0/24 20:23 # accept and pass through anything originating inside # /sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0 # deny most other incoming TCP connections and log them # (append 1:1023 if you have problems with ftp not working) # /sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24 # ... for UDP too # /sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24 |
Un altro esempio interessante si trova nel Firewalling and Proxy Server HOWTO di Mark Grennan (versione 0.4 del 1996), dove appare uno script pensato per un firewall/router che ha lo scopo di proteggere una rete privata con indirizzi 196.1.2.0/255.255.255.0. Quello che viene mostrato di seguito ø stato modificato, per eliminare alcuni errori evidenti.
#!/bin/sh # # setup IP packet Accounting and Forwarding # # Forwarding # # By default DENY all services ipfwadm -F -p deny # Flush all commands ipfwadm -F -f ipfwadm -I -f ipfwadm -O -f # Forward email to your server ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.10 25 # Forward email connections to outside email servers ipfwadm -F -a accept -b -P tcp -S 196.1.2.10 25 -D 0.0.0.0/0 1024:65535 # Forward Web connections to your Web Server /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.11 80 # Forward Web connections to outside Web Server /sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.0/24 80 -D 0.0.0.0/0 1024:65535 # Forward DNS traffic /sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.1.2.0/24 |
Il kernel Linux, assieme alla gestione del filtro dei pacchetti IP pu? occuparsi anche del mascheramento IP, cosa che consente di collegare una rete privata con indirizzi IP esclusi dalla rete pubblica, all'esterno.
A parte l'utilizzo comune che se ne fa di solito, il mascheramento IP fa in modo che, all'esterno della rete mascherata, appaia che l'origine dei pacchetti sia sempre il firewall. Fortunatamente, il firewall ø poi in grado di distinguere quali siano stati i nodi (mascherati) che hanno originato la connessione, girando a loro i pacchetti di loro competenza.
+---------------+ | Firewall | Rete privata mascherata - - - ------------------| mascheramento |-------*-----------*-------- - - - Rete pubblica | IP | | | (Internet) +---------------+ +--------+ +--------+ | host | | host | +--------+ +--------+ |
In linea di principio, i nodi collocati nella rete privata mascherata, sono in grado di accedere all'esterno, per mezzo del firewall che offre il mascheramento degli indirizzi, mentre dall'esterno potrebbe mancare l'instradamento verso tali nodi. In effetti, quando la rete privata mascherata utilizza indirizzi IP esclusi dalla rete pubblica, tale instradamento (dall'esterno verso l'interno) non pu? esistere.
L'attivazione nel kernel delle funzionalitð di mascheramento richiede prima di tutto che siano state attivate quelle di firewall, nello stesso modo gið visto nella sezioni dedicate al filtro di pacchetto IP, dove in particolare sia stata poi aggiunta anche quella di mascheramento (come era stato gið suggerito a suo tempo).
La gestione del mascheramento IP del kernel ø un'estensione di quella del filtro di pacchetto IP, e deve essere attivata espressamente attraverso ipfwadm
, utilizzando la categoria
(forward), assieme a una politica di accettazione (-
Faccept
) con l'aggiunta dell'indicazione che si tratta di mascheramento.
Per ottenere questo, si possono usare due modi equivalenti: l'indicazione di una politica denominata masquerade
(abbreviata frequentemente con m
), che implica la politica accept
, oppure l'aggiunta dell'opzione
. La cosa si potrebbe rappresentare schematicamente attraverso gli schemi sintattici seguenti.
-
m
ipfwadm |
ipfwadm |
Ricapitolando quindi, il mascheramento si ottiene definendo una regola di inoltro (forward), in cui si stato attivato il mascheramento dell'origine nei confronti della destinazione.
In generale, il mascheramento IP si utilizza per consentire a una rete privata, che utilizza indirizzi IP esclusi da Internet, di accedere all'esterno. In questa situazione potrebbe essere sensata ugualmente una strategia di difesa attraverso le funzionalitð di filtro gið discusse nelle sezioni dedicate a questo argomento, perchù dall'esterno, qualcuno potrebbe creare un proprio instradamento verso la rete privata.
In ogni caso, la situazione comune per il mascheramento IP ø quella dello schema che appare in figura 215.4. L'interfaccia di rete del firewall connessa alla rete privata deve avere un indirizzo IP che appartenga a tale spazio, e inoltre deve essere stato previsto un instradamento corretto. L'altra interfaccia, quella rivolta verso la rete pubblica, avrð un indirizzo IP pubblico, e l'instradamento dovrð essere quello predefinito.
+---------------+ 192.168.1.0 | Firewall | Rete privata mascherata - - - ------------------| mascheramento |-------*-----------*-------- - - - Rete pubblica | IP | | | (Internet) +---------------+ +--------+ +--------+ | host | | host | +--------+ +--------+ |
In questa situazione, la regola che consente alla rete privata di raggiungere l'esterno pu? essere definita con uno dei tre comandi seguenti (che in pratica sono identici).
/sbin/ipfwadm -F -a masquerade -S 192.168.1.0/24 -D any/0 |
/sbin/ipfwadm -F -a m -S 192.168.1.0/24 -D any/0 |
/sbin/ipfwadm -F -a accept -S 192.168.1.0/24 -D any/0 -m |
Visualizzando la regola attraverso ipfwadmš
, si ottiene l'informazione seguente, dove si deve osservare che il tipo ø indicato come -
Fš-
lacc/m
, ovvero: accept
/masquerade
.
type prot source destination ports acc/m all 192.168.1.0/24 anywhere n/a |
Si ø accennato al fatto che non si pu? escludere che qualcuno voglia provare a definire un proprio instradamento verso la rete privata che in condizioni normali dovrebbe essere irraggiungibile dall'esterno. Per questo, conviene escludere esplicitamente il traffico nella direzione opposta, oppure semplicemente definire che la politica predefinita del firewall deve essere deny
.
#!/bin/sh /sbin/ipfwadm -F -p deny /sbin/ipfwadm -F -a masquerade -S 192.168.1.0/24 -D any/0 |
Il proxy trasparente, o transparent proxy, ø una funzionalitð attraverso la quale si fa in modo di ridirigere il traffico verso il nodo locale, quando altrimenti sarebbe diretto verso altre macchine, a porte determinate.
Il kernel Linux fornisce questa funzionalitð come estensione di quelle di filtro dei pacchetti IP; ma per farlo deve essere aggiunta esplicitamente la gestione di questa caratteristica.
IP: transparent proxy support ( 19.2.7) Y
Queste sezioni trattano il problema del proxy trasparente solo in modo informativo, dal momento che si tratta di una funzionalitð ancora sperimentale e probabilmente non funzionante. |
La ridirezione attraverso cui si ottiene il proxy trasparente, si definisce esclusivamente con la categoria
, specificando una porta di ridirezione con l'opzione -
I
.
-
r
La sintassi di ipfwadm
per questo scopo si traduce nello schema seguente:
ipfwadm |
Quello che si ottiene ø che il traffico proveniente dagli indirizzi previsti, diretto verso le destinazioni indicate, complete dell'informazione sulle porte, viene ridiretto alla porta indicata dall'opzione
nel nodo locale.
-
r
Un proxy trasparente pu? funzionare solo se il traffico relativo deve attraversarlo per forza. Pertanto, si pu? attivare questa funzionalitð solo in un router, che eventualmente pu? fungere sia da firewall che da filtro per il mascheramento IP. Di conseguenza, il proxy per il quale il servizio viene avviato, deve risiedere fisicamente nello stesso elaboratore che svolge il ruolo di router o di firewall.
+---------------+ | Proxy | Rete privata mascherata - - - ------------------| trasparente |-------*-----------*-------- - - - Rete esterna | | | | +---------------+ +--------+ +--------+ | host | | host | +--------+ +--------+ |
Lo scopo del proxy trasparente pu? essere semplicemente quello di ?obbligareË a utilizzare una memoria cache proxy, senza importunare gli utenti pretendendo da loro che configurino i loro applicativi per questo, oppure pu? essere il modo attraverso cui si definisce un firewall proxy, impedendo l'attraversamento del proxy per mezzo del filtro di pacchetto IP.
A titolo di esempio viene mostrato in che modo si potrebbe ridirigere il traffico di una rete locale con indirizzi 192.168.1.0/24, quando questo ø rivolto alla porta 80, cioø a un servizio HTTP, verso la porta locale 8080 (tipica di una cache proxy).
/sbin/ipfwadm -I -a accept -p tcp -S 192.168.1.0/24 -D any/0 80 -r 8080 |
Visualizzando la regola attraverso ipfwadmš
, si ottiene l'informazione seguente, dove si deve osservare che il tipo ø indicato come -
Iš-
lacc/r
, dove la lettera r
segnala appunto la ridirezione.
type prot source destination ports acc/r tcp 192.168.0.0/24 anywhere any -> http => 8080 |
Il kernel Linux, assieme alla gestione del filtro dei pacchetti IP pu? anche tenere la ?contabilitðË del traffico. Si tratta semplicemente di definire una serie di contatori per il traffico in entrata o in uscita, da o verso indirizzi determinati. Il conteggio prosegue fino all'azzeramento successivo.
Per sfruttare questa funzionalitð ø necessario che il kernel sia stato predisposto opportunamente.
IP: accounting ( 19.2.7) Y
La contabilitð del traffico non ø un'attivitð esclusiva di un elaboratore che ricopra il ruolo di firewall, per?, un firewall, o pi? semplicemente un router, ø il luogo migliore per gestirla.
Per definire i contatori che si vogliono avere in riferimento al traffico, si utilizza ipfwadm
specificando la categoria
(Accounting). Con questa categoria possono essere usati comandi e opzioni simili a quelli descritti per le funzionalitð di firewall, ma non perfettamente uguali. La sintassi generale cambia nel modo seguente:
-
A
ipfwadm
|
Come si pu? osservare, la categoria
richiede un argomento composto da una parola chiave che definisce la direzione del traffico: -
Ain
, ingresso; out
, uscita; both
, entrambe. Se tale direzione non viene specificata, si intende implicitamente che sia stata usata la parola chiave both
(entrambe).
I comandi, cioø le opzioni che seguono immediatamente la categoria
, hanno delle differenze importanti rispetto alla sintassi relativa alla gestione del firewall.
-
A
|
Cancella tutte le regole riferite alla categoria di intervento indicata anteriormente (in questo caso si tratta delle regole di contabilizzazione del traffico).
|
Emette attraverso lo standard output le regole di definizione dei contatori, con i valori che tali contatori hanno raggiunto nel frattempo.
|
Azzera tutti i conteggi. Si pu? usare anche assieme a
, e in tal caso si ottiene la visualizzazione dei valori raggiunti, e subito dopo l'azzeramento.
-
l
|
|
Inserisce la regola di conteggio alla fine (
, append), oppure all'inizio (-
a
) dell'elenco.
-
i
|
Permette di eliminare una regola dal gruppo appartenente alla categoria specificata. Per ottenere la sua eliminazione, occorre indicare gli stessi parametri utilizzati per crearla.
In generale, come ø gið stato mostrato in riferimento all'utilizzo di ipfwadm
, quando si realizza uno script per la definizione di contatori di traffico, si inizia con l'azzeramento delle regole riferite a questa funzione.
#!/bin/sh #... /sbin/ipfwadm -A -f |
Le regole di definizione dei contatori possono essere pi? o meno precise, a seconda dell'esigenza. La regola pi? vaga ø quella seguente, in cui si misura tutto il traffico (compreso quello dell'interfaccia di loopback) senza distinguere se questo ø in ingresso o in uscita.
/sbin/ipfwadm -A both -a |
Visualizzando la regola attraverso il comando ipfwadmš
, si ottiene qualcosa simile a quello che segue.
-
Aš-
l
IP accounting rules pkts bytes dir prot source destination ports 4 280 i/o all anywhere anywhere n/a |
In questo caso, si pu? osservare che c'ø stato un po' di traffico (veramente minimo), dal momento che sono transitati 280 byte in 4 pacchetti.
Ø evidente che la contabilizzazione del traffico ø utile se pu? dare qualche indicazione in pi?. L'esempio seguente serve a misurare in modo distinto il traffico in ingresso e in uscita dall'interfaccia eth0
.
/sbin/ipfwadm -A in -a -W eth0 /sbin/ipfwadm -A out -a -W eth0 |
In questo caso, per visualizzare le regole ø necessario il comando ipfwadmš
, altrimenti non si pu? notare che si fa riferimento a un'interfaccia precisa.
-
Aš-
lš-
e
IP accounting rules pkts bytes dir prot opt ifname ifaddress source destination ports 6 348 in all ---- eth0 any anywhere anywhere n/a 5 447 out all ---- eth0 any anywhere anywhere n/a |
L'esempio seguente mostra in che modo potrebbe essere controllato il traffico intrattenuto con un gruppo di nodi particolare. Si suppone si tratti della sottorete 192.168.1.0/24.
/sbin/ipfwadm -A in -a -S 192.168.1.0/24 /sbin/ipfwadm -A out -a -D 192.168.1.0/24 |
Il risultato di queste regole potrebbe essere il seguente:
IP accounting rules pkts bytes dir prot source destination ports 22 2346 in all 192.168.1.0/24 anywhere n/a 25 2598 out all anywhere 192.168.1.0/24 n/a |
Tuttavia, se l'elaboratore in cui si predispone la contabilizzazione del traffico fosse il router, o il firewall della rete dell'esempio precedente, potrebbe essere pi? interessante sapere qual ø il traffico che transita effettivamente verso l'esterno o dall'esterno. Se si usassero le regole viste nell'esempio precedente, verrebbe considerato anche il traffico locale intrattenuto con tale elaboratore.
/sbin/ipfwadm -A out -a -S 192.168.1.0/24 -W eth1 /sbin/ipfwadm -A in -a -D 192.168.1.0/24 -W eth1 |
Questo esempio inverte la direzione in
/out
, proprio per misurare il traffico uscente (verso l'esterno) che proviene dalla rete locale, e quello entrante (dall'esterno) che sia diretto verso la rete locale. Tuttavia, per fare in modo che funzioni in modo corretto, ø stato necessario specificare anche l'interfaccia a cui fare riferimento.
Infine, ø possibile misurare anche il traffico sulle porte. L'esempio seguente cerca di misurare il traffico TCP complessivo verso l'indirizzo 192.168.1.1 (corrispondente al nodo locale), per la porta 8080 (cache proxy).
/sbin/ipfwadm -A both -a -P tcp -D 192.168.1.1 8080 |
Il risultato di questa regola potrebbe essere il seguente:
IP accounting rules pkts bytes dir prot source destination ports 60 6072 i/o tcp anywhere 192.168.1.1 any -> 8080 |
Terry Dawson, Linux NET-3-HOWTO, Linux Networking
Mark Grennan, Firewalling and Proxy Server HOWTO
Ambrose Au, Linux IP Masquerade mini HOWTO
---------------------------
Appunti Linux 1999.09.21 --- Copyright ? 1997-1999 Daniele Giacomini -- šdanieleš@špluto.linux.it