Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/doc/library/linux/AppLinux/al236.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:56 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 13:25:10 2007 Êîäèðîâêà: Ïîèñêîâûå ñëîâà: http news.cosmoport.com 2005 04 22 1.htm |
Il kernel Linux 2.2.*, assieme alla gestione del filtro dei pacchetti IP, puÐ occuparsi anche del mascheramento IP e della gestione del proxy trasparente, cosa che consente di collegare all'esterno una rete privata con indirizzi IP esclusi dalla rete pubblica.
Attraverso il mascheramento IP si fa in modo di mostrare all'esterno che l'origine delle connessioni Õ sempre il nodo che esegue questo compito, anche quando in realtÞ si tratta di un nodo interno alla rete privata. Naturalmente, il nodo che esegue il mascheramento Õ poi in grado di distinguere quali siano stati i nodi mascherati che hanno originato la connessione, girando a loro i pacchetti di loro competenza.
+---------------+ | filtro di | 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 filtro di 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, e quelle di ricomposizione dei pacchetti frammentati (nello stesso modo giÞ visto nella sezioni dedicate al filtro di pacchetto IP), dove in particolare sia stata poi aggiunta anche quella di mascheramento.
Attualmente (con i kernel 2.2.*), la gestione del mascheramento IP del kernel Õ un'estensione di quella del filtro di pacchetto IP, e deve essere attivata espressamente attraverso ipchains
, utilizzando il filtro di inoltro, forward
, assieme a una politica di accettazione (ACCEPT
) con l'aggiunta dell'indicazione che si tratta di mascheramento per mezzo dell'obbiettivo MASQ
. La cosa si puÐ rappresentare schematicamente attraverso il modello seguente che comunque potrebbe essere esteso o precisato meglio.
ipchains |
Ricapitolando quindi, il mascheramento si ottiene definendo una regola nel filtro di inoltro, in cui sia 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
182.2. L'interfaccia di rete del nodo di mascheramento connessa alla rete privata (eth0
) 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 (ppp0
), avrÞ un indirizzo IP pubblico, e l'instradamento dovrÞ essere quello predefinito.
+---------------+ 192.168.1.0 ppp0 | | eth0 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 due comandi seguenti: il primo Õ un esempio approssimativo, mentre il secondo fa un riferimento esplicito agli indirizzi esterni in modo che non coincidano con quelli interni.
/sbin/ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ |
/sbin/ipchains -A forward -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j MASQ |
Visualizzando la regola attraverso ipchains
, si ottiene una tra le due informazioni seguenti (a seconda del comando prescelto).
-
L forward -
n
Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.0.0/16 0.0.0.0/0 n/a |
Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.0.0/16 !192.168.0.0/16 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/ipchains -P forward DENY /sbin/ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ |
Il proxy trasparente, o transparent proxy, Õ una funzionalitÞ attraverso la quale si fa in modo di ridirigere il traffico (TCP) verso un servizio proxy del nodo locale, quando altrimenti sarebbe diretto verso altri nodi, 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.
Naturalmente, per attivare un sistema di proxy trasparente occorre il proxy. In effetti, il vantaggio di usare questo sistema al posto del mascheramento IP sta proprio nell'inserzione di un proxy, possibilmente di una cache proxy, per ridurre il traffico nella connessione con la rete pubblica. In questo modo, il software utilizzato nei nodi della rete privata non ha bisogno di essere configurato per inviare tutte le sue richieste al proxy, ma quando i pacchetti tentano di raggiungere l'esterno, allora vengono presi in considerazione da questo.
La ridirezione attraverso cui si ottiene il proxy trasparente si definisce esclusivamente per mezzo del filtro di ingresso, input
, specificando una porta di ridirezione con l'obbiettivo REDIRECT
. Considerato che il proxy trasparente viene usato normalmente solo per il protocollo TCP, la sintassi di ipchains
per questo scopo si traduce nello schema seguente:
ipchains |
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 specificata dopo l'obbiettivo REDIRECT
nel nodo locale.
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 proxy trasparente. 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 cache proxy, senza importunare gli utenti pretendendo da loro che configurino gli 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/ipchains -A input -p tcp \ -s 192.168.1.0/24 -d ! 192.168.1.0/24 80 -j REDIRECT 8080 |
Come si puÐ intendere, il comando Õ stato suddiviso su due righe per motivi tipografici. Visualizzando la regola attraverso ipchains
, si ottiene l'informazione seguente:
-
L input
Chain input (policy ACCEPT): target prot opt source destination ports REDIRECT tcp ------ 192.168.0.0/24 !192.168.0.0/24 any -> 80 => 8080 |
Naturalmente, il proxy trasparente puÐ essere combinato anche con il mascheramento IP, per cui, dato l'esempio giÞ visto, si potrebbe anche aggiungere l'istruzione seguente:
/sbin/ipchains -A forward -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MASQ |
PerchÈ il proxy trasparente funzioni non Õ sufficiente il dirottamento dei pacchetti attraverso ipchains
, perchÈ il programma che gestisce il proxy deve poi essere in grado di gestire la cosa.
Attualmente, se si utilizza Apache non dovrebbe essere necessaria alcuna modifica nella sua configurazione, mentre nel caso di Squid sono indispensabili le due direttive seguenti, che vanno collocate nel file /etc/squid.conf
(vengono lasciati i commenti originali del sorgente di questo file).
# HTTPD-ACCELERATOR OPTIONS #----------------------------------------------------------------------------- # TAG: httpd_accel # If you want to run squid as an httpd accelerator, define the # host name and port number where the real HTTP server is. # # If you want virtual host support then specify the hostname # as "virtual". # httpd_accel virtual 80 # TAG: httpd_accel_with_proxy # If you want to use squid as both a local httpd accelerator # and as a proxy, change this to 'on'. # httpd_accel_with_proxy on |
Paul Russell, Linux IPCHAINS-HOWTO
Terry Dawson, Linux NET-3-HOWTO, Linux Networking
Mark Grennan, Firewalling and Proxy Server HOWTO
---------------------------
Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ pluto.linux.it
1.) Nel momento in cui si vuole realizzare il proxy trasparente, si intende implicitamente che tutto il traffico debba passare per il proxy, di conseguenza ha senso imporre la ricomposizione dei pacchetti frammentati.