Avanti Indietro Indice

3. Sono confuso! Instradamento, masquerading, portforwarding, ipautofw...

Questo HOWTO è sul filtraggio dei pacchetti. Ciò significa decidere quando un pacchetto debba avere o meno il permesso di passare. Comunque, essendo Linux il campo giochi degli hacker, si vorrà probabilmente fare qualcosina di più.

Un problema è che lo stesso strumento (``ipchains'') è usato per controllare anche il masquerading e il proxy trasparente, sebbene queste siano nozionalmente diverse dal filtraggio dei pacchetti (l'implementazione corrente di Linux innaturalmente le fonde insieme, dando l'impressione che siano strettamente collegate).

Il masquerading ed il proxy sono trattati da altri HOWTO, mentre le caratteristiche auto forwading e port forwarding sono controllate da altri strumenti, ma poiché la gente continua a domandarmene, includerò un insieme di scenari comuni ed indicherò quando ognuno possa essere applicato. I meriti di sicurezza di ciascuna configurazione non saranno qui discussi.

3.1 Le tre linee guida di Rusty al masquerading

Si assume che la propria interfaccia esterna si chiami `ppp0'. Si usi ifconfig per scoprire qual'è e si aggiusti il tutto a proprio gusto.

# ipchains -P forward DENY
# ipchains -A forward -i ppp0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward

3.2 Promozione gratuita: WatchGuard

I firewall si possono anche comprare. Uno eccellente è il FireBox della WatchGuard. È eccellente perché mi piace, è sicuro, è basato su Linux e anche perché quelli della WatchGuard sovvenzionano il mantenimento di ipchains e del nuovo codice di firewall (atteso per il 2.3). In breve, la WatchGuard mi sta pagando da mangiare mentre lavoro per voi. Quindi vi invito a considerare i loro prodotti.

http://www.watchguard.com

3.3 Configurazioni comuni di firewall

Supponiamo che si amministri il dominio littlecorp.com. Si ha una rete interna e una sola connessione in dialup (PPP) verso Internet (firewall.littlecorp.com che è 1.2.3.4). Si usa Ethernet nella propria rete locale e la propria macchina personale si chiama "myhost".

Questa sezione illustrerà diversi arrangiamenti comuni. Li si legga attentamente, perché sono subdolamente diversi uno dall'altro.

Rete privata: proxy tradizionale

In questo scenario, i pacchetti provenienti dalla rete privata non traverseranno mai Internet e viceversa. Gli indirizzi IP della rete privata dovranno essere assegnati secondo le Private Network Allocations del RFC1597 (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).

Il solo modo nel quale ci si potrà mai connettere ad Internet è di connettersi al firewall, che è la sola macchina in entrambe le reti che può uscire dalla rete locale. Per far questo si può eseguire un programma (nel firewall) detto proxy (ci sono proxy per FTP, accesso al web, telnet, RealAudio, Usenet News e altri servizi). Si veda il Firewall HOWTO.

Qualsiasi servizio che si vuole sia accessibile da Internet deve essere nel firewall (si veda anche Servizi interni limitati nel seguito).

Esempio: Permettere l'accesso web dalla rete privata ad Internet

  1. Alla rete privata sono assegnati gli indirizzi 192.168.1.*, e in particolare a myhost è assegnato il 192.168.1.100 e all'interfaccia Ethernet del firewall il 192.168.1.1.
  2. Nel firewall è installato e configurato un proxy web (eg. "squid"), ed è in funzione sulla porta 8080.
  3. Il Netscape sulla rete privata è configurato per usare la porta 8080 del firewall come proxy.
  4. Nel rete privata non serve sia configurato il DNS.
  5. Il DNS deve essere configurato sul firewall.
  6. Nella rete privata non dev'essere configurato nessun instradamento predefinito (gateway).

Netscape su myhost legge http://slashdot.org.

  1. Netscape si connette alla porta 8080 del firewall usando la porta 1050 su myhost. Chiede la pagina web di "http://slashdot.org".
  2. Il proxy cerca il nome "slashdot.org" ed ottiene 207.218.152.131. Apre una connessione con quell'indirizzo IP (usando la porta 1025 sull'interfaccia esterna del firewall) e chiede al server web (porta 80) la pagina web.
  3. Come il proxy riceve la pagina web dalla sua connessione con il server web, copia i dati nella connessione del Netscape.
  4. Netscape mostra la pagina.

ie. Dal punto di vista di slashdot.org, la connessione è fatta dalla porta 1025 di 1.2.3.4 (l'interfaccia PPP del firewall) verso la porta 80 di 207.218.152.131 (slashdot.org). Dal punto di vista di myhost, è fatta dalla porta 1050 di 192.168.1.100 (myhost) verso la porta 8080 di 192.168.1.1 (l'interfaccia Ethernet del firewall).

Rete privata: proxy trasparente

In questo scenario i pacchetti dalla rete privata non traversano mai Internet e viceversa. Gli indirizzi IP della rete privata dovranno essere assegnati secondo le Private Network Allocations del RFC1597 (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).

Il solo modo nel quale ci si potrà mai connettere ad Internet è di connettersi al firewall, che è la sola macchina in entrambe le reti che può uscire dalla rete locale. Per far questo si può eseguire un programma (nel firewall) detto proxy trasparente; il kernel invia i pacchetti al proxy trasparente invece di farli uscire (ie. imbastardisce l'instradamento).

Il proxy fatto in modo trasparente significa che ai client non serve sapere che c'è un proxy coinvolto.

Qualsiasi servizio che si vuole sia accessibile da Internet deve essere nel firewall (si veda anche Servizi interni limitati nel seguito).

Esempio: Permettere l'accesso web dalla rete privata ad Internet

  1. Alla rete privata sono assegnati gli indirizzi 192.168.1.*, e in particolare a myhost è assegnato il 192.168.1.100 e all'interfaccia Ethernet del firewall il 192.168.1.1.
  2. Nell firewall è installato un proxy web trasparente (credo esistano delle patch per squid per permettergli di funzionare in questo modo, oppure si usi "transproxy") ed è in funzione sulla porta 8080.
  3. Usando ipchains al kernel è detto di redirigere al proxy le connessioni dirette alla porta 80.
  4. Netscape nella rete privata è configurato per connettersi direttamente.
  5. Nella rete privata dev'essere configurato il DNS (ie. si deve eseguire anche un server DNS oltre al proxy sul firewall).
  6. Nella rete privata dev'essere configurato l'instradamento predefinito (gateway), in modo da inviare i pacchetti al firewall.

Netscape su myhost legge http://slashdot.org.

  1. Netscape cerca il nome "slashdot.org" ed ottiene 207.218.152.131. Allora apre una connessione verso quell'indirizzo IP usando la porta locale 1050 e chiede la pagina web al server web (porta 80).
  2. Come i pacchetti da myhost (porta 1050) verso slashdot.org (porta 80) passano attraverso il firewall, sono rediretti al proxy trasparente in attesa sulla porta 8080. Il proxy trasparente apre una connessione (usando la porta locale 1025) verso la porta 80 di 207.218.152.131 (che è dove stavano andando i pacchetti originali).
  3. Come il proxy riceve la pagina web dalla sua connessione con il server web, copia i dati nella connessione del Netscape.
  4. Netscape mostra la pagina.

ie. Dal punto di vista di slashdot.org, la connessione è fatta dalla porta 1025 di 1.2.3.4 (l'interfaccia PPP del firewall) verso la porta 80 di 207.218.152.131 (slashdot.org). Dal punto di vista di myhost, è fatta dalla porta 1050 di 192.168.1.100 (myhost) verso la porta 80 di 207.218.152.131, ma in realtà sta dialogando con il proxy trasparente.

Rete privata: masquerading

In questo scenario i pacchetti dalla rete privata non traversano mai Internet e viceversa. Gli indirizzi IP della rete privata dovranno essere assegnati secondo le Private Network Allocations del RFC1597 (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).

Invece di usare un proxy, usiamo una speciale caratteristica del kernel detta "masquerading" (mascheramento, travestimento). Il masquerading riscrive i pacchetti non appena passano per il firewall, così sembra sempre che provengano dal firewall stesso. Poi riscrive le risposte in modo che sembri provengano dalle fonti originali.

Il masquerading ha moduli separati per gestire protocolli "banali", come FTP, RealAudio, Quake, ecc. Per protocolli veramenente difficili da gestire, la funzione di "auto forwarding" (inoltro automatico) ne può gestire alcuni automaticamente impostando il port forwarding per l'insieme delle porte a loro relative: si veda ``ipportfw'' (kernel 2.0) o ``ipmasqadm'' (kernel 2.1).

Qualsiasi servizio che si vuole sia accessibile da Internet deve essere nel firewall (si veda anche Servizi interni limitati nel seguito).

Esempio: Permettere l'accesso web dalla rete privata ad Internet

  1. Alla rete privata sono assegnati gli indirizzi 192.168.1.*, e in particolare a myhost è assegnato il 192.168.1.100 e all'interfaccia Ethernet del firewall il 192.168.1.1.
  2. Il firewall è impostato per "mascherare" qualsiasi pacchetto proveniente dalla rete privata e destinato alla porta 80 di un host Internet.
  3. Netscape è configurato per connettersi direttamente.
  4. Nella rete privata dev'essere configurato correttamente il DNS.
  5. Il firewall dovrà essere l'instradamento predefinito (gateway) per la rete privata.

Netscape su myhost legge http://slashdot.org.

  1. Netscape cerca il nome "slashdot.org", ed ottiene 207.218.152.131. Allora apre una connessione verso quell'indirizzo IP usando la porta locale 1050 e chiede la pagina web al server web (porta 80).
  2. Come i pacchetti da myhost (porta 1050) verso slashdot.org (porta 80) passano attraverso il firewall, sono riscritti per apparire provenienti dall'interfaccia PPP del firewall (porta 65000). Il firewall ha un indirizzo Internet valido (1.2.3.4) e quindi i pacchetti di risposta provenienti da slashdot.org vengono correttamente instradati indietro.
  3. Come i pacchetti da slashdot.org (port 80) verso firewall.littlecorp.com (porta 65000) arrivano, sono riscritti per andare alla porta 1050 di myhost. Questa è la vera magia del masquerading: si ricorda quando riscrive pacchetti uscenti e così può riscriverli non appena arrivano le risposte.
  4. Netscape mostra la pagina.

ie. Dal punto di vista di slashdot.org, la connessione avviene dalla porta 65000 di 1.2.3.4 (l'interfaccia PPP del firewall) verso la porta 80 di 207.218.152.131 (slashdot.org). Dal punto di vista di myhost, la connessione è fatta dalla porta 1050 di 192.168.1.100 (myhost), verso la porta 80 di 207.218.152.131 (slashdot.org).

Rete pubblica

In questo scenario la propria rete personale è parte di Internet: i pacchetti possono fluire senza modifiche tra le due reti. Gli indirizzi IP della rete interna devono essere assegnati richiedendo un blocco di indirizzi IP, in modo che il resto della rete sappia come raggiungerla. Ciò implica una connessione permanente.

In tal caso, il filtraggio dei pacchetti è usato per decidere quali pacchetti possono essere inoltrati tra la propria rete ed il resto di Internet, eg. per restringere il resto di Internet al solo accesso ai propri server web interni.

Esempio: Permettere l'accesso web dalla rete privata verso Internet.

  1. Alla propria rete interna è assegnato un blocco di indirizzi IP che si è richiesto (diciamo 1.2.3.*).
  2. Il firewall è impostato per permettere tutto il traffico.
  3. Netscape è configurato per connettersi direttamente.
  4. Nella propria rete dev'essere configurato il DNS.
  5. Il firewall dovrà essere l'instradamento predefinito (gateway) per la rete privata.

Netscape su myhost legge http://slashdot.org.

  1. Netscape cerca il nome "slashdot.org" e ottiene 207.218.152.131. Apre poi una connessione verso quel indirizzo IP usando la porta locale 1050 e chiede la pagina al server web (porta 80).
  2. I pacchetti passano attraverso il proprio firewall, proprio come passano attraverso diversi altri router tra myhost e slashdot.org.
  3. Netscape mostra la pagina.

ie. C'è solo una connessione: dalla porta 1050 di 1.2.3.100 (myhost) verso la porta 80 di 207.218.152.131 (slashdot.org).

Servizi interni limitati

Ci sono un po' di trucchi che si possono usare per permettere ad Internet di accedere ai propri servizi interni, piuttosto che far girare i servizi sul firewall. Funzioneranno solo con un approccio basato su proxy o masquerading per le connessioni esterne.

L'approccio più semplice è di usare un "dirottatore" che non è altro che un proxy dei poveri, che attenende la connessione su una data porta e poi apre una connessione ad una porta fissa di un host interno copiando i dati tra le due connessioni. Un esempio è il programma "redir". Dal punto di vista di Internet, la connessione è fatta verso firewall. Dal punto di vista del server interno la connessione è fatta dall'interfaccia interna del firewall al server.

Un altro approccio (che richiede un kernel 2.0 con la patch per ipportfw, oppure un kernel 2.1 o più recente) è di usare il port forwarding del kernel. Quest'ultimo fa lo stesso lavoro di "redir" ma in modo diverso: il kernel riscrive i pacchetti mentre passano, cambiando il loro indirizzo di destinazione e la porta per indirizzarli verso l'host interno e la relativa porta. Dal punto di vista di Internet, la connessione è fatta verso il firewall. Dal punto di vista del server interno è fatta una connessione diretta tra l'host Internet ed il server.

3.4 Ulteriori informazioni sul masquerading

David Ranch ha scritto un eccellente nuovo HOWTO sul masquerading, che ha parecchi argomenti in comune con questo HOWTO. Attualmente lo si può trovare a

http://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html#ipmasq

Presto mi aspetterei di trovarlo sotto gli patrocinio del Linux Documentation Project, a http://www.metalab.unc.edu/LDP

L'home page ufficiale del Masquerading è a

http://ipmasq.cjb.net


Avanti Indietro Indice