Masquerading made simple HOWTO

John Tapsell

Thomas Spellman

Matthias Grimm

Diario delle Revisioni
Revisione 0.092004-07-21Revisionato da: ts
Revisione 0.082002-07-11Revisionato da: jpt
Revisione 0.072002-02-27Revisionato da: jpt
Revisione 0.062001-09-08Revisionato da: jpt
Revisione 0.052001-09-07Revisionato da: jpt
Revisione 0.042001-09-01Revisionato da: jpt
Revisione 0.032001-07-06Revisionato da: jpt

Tutti gli autori sono contattabili sul canale #debian su irc.opensource.net

John Tapsell (JohnFlux) è il curatore ufficiale.

Io (John Tapsell) sono disponibile al contatto via email per qualsiasi domanda, feedback, polemica ed anche per appuntamenti ecc.

Si è rubato senza vergogna dal lavoro di David Ranch - .

Questo documento non intende rimpiazzare IP-Masquerading HOWTO ma gli è complementare, i due documenti andrebbero letti fianco a fianco. Non includerò cose di cui si occupa l'altro HOWTO, né darò spiegazioni di carattere generale. Si consulti http://ipmasq.cjb.net e il solito Masq-HOWTO per informazioni di questo tipo.

Questo documento descrive come abilitare la funzionalità di Masquerading IP su un host Linux. IP Masq è una forma di NAT (Network Address Translation) che permette alle macchine di una rete locale che non hanno uno o più indirizzi Internet registrati di comunicare con Internet attraverso delle macchine (Linux, nel nostro caso) dotate di un singolo indirizzo IP pubblico.

Il documento è rilasciato sotto licenza GNU Free Documentation License.

http://www.gnu.org/copyleft/fdl.html

Traduzione a cura di Riccardo Fabris (frick at linux.it).


Sommario
1. Introduzione
2. Sommario: (mi piace partire con i sommari)
3. Versione un po' più approfondita
4. Istruzioni di post-installazione
5. FAQ - le lament... le domande poste più di frequente

1. Introduzione

La faremo breve e andremo dritti al punto.

Si ha una rete locale, che si vuol far comunicare con l'esterno:


2. Sommario: (mi piace partire con i sommari)

Si assuma che la scheda di rete esterna, verso Internet, sia eth0, che l'IP esterno sia 123.12.23.43 e che la scheda di rete interna sia eth1, quindi:

$> modprobe ipt_MASQUERADE # Se fallisce, si provi ad andare avanti comunque
$> iptables -F; iptables -t nat -F; iptables -t mangle -F
$> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43
$> echo 1 > /proc/sys/net/ipv4/ip_forward

O, per una connessione telefonica:

$> modprobe ipt_MASQUERADE # Se fallisce, si provi ad andare avanti comunque
$> iptables -F; iptables -t nat -F; iptables -t mangle -F
$> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
$> echo 1 > /proc/sys/net/ipv4/ip_forward

Poi, per rendere il tutto più sicuro:

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$> iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
$> iptables -P INPUT DROP   #solo dopo che i due precedenti hanno avuto successo
$> iptables -A FORWARD -i eth0 -o eth0 -j REJECT

Ora, per una connessione telefonica (con eth0 scheda di rete interna):

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
$> iptables -P INPUT DROP   #solo dopo che i due precedenti hanno avuto successo
$> iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT

Tutto qui! Per vedere le regole di masquerading si dia "iptables -t nat -L"


3. Versione un po' più approfondita

Compilare il kernel (serve un kernel 2.4.x o successivo).

Serve abilitare il supporto alle seguenti funzionalità del kernel:

Per prima cosa, se i moduli iptable e masq non sono incorporati nel kernel né installati, ma esistono come moduli caricabili, bisogna installarli. Con "insmod ipt_MASQUERADE" si caricheranno ip_tables, ip_conntrack e iptable_nat.

$> modprobe ipt_MASQUERADE

L'intranet da collegare a Internet potrebbe essere composta da molte macchine o solo da un paio, in realtà non fa molta differenza.

Bene, sto dando per scontato che non servano altre regole. A questo punto si dia:

$> iptables -F; iptables -t nat -F; iptables -t mangle -F

Se si ottiene un errore e dice che iptables non si trova, lo si trovi ed installi. Se dice che non c'è alcuna tabella "nat", si ricompili il kernel col supporto a nat. Se dice che non c'è alcuna tabella "mangle", non ci si preoccupi, non è necessaria al masquerading. Se dice che iptables è incompatibile con il proprio kernel, ci si procuri un kernel 2.4 e lo si compili col supporto a iptables.

In caso si abbia un IP statico (p.e. non si usa DHCP), si dia:

$> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43

per un IP dinamico (p.e. un modem, ma ci si deve prima collegare!):

$> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Infine, per dire al kernel che si desidera iniziare a fare il forward dei pacchetti (cosa necessaria solo una volta per reboot, ma a farlo più volte non succede nulla di male), si dia:

$> echo 1 > /proc/sys/net/ipv4/ip_forward

Una volta che si è controllato che tutto funziona (si vedano le istruzioni di post- installazione più avanti) si deve permettere il masquerading solo dalla rete interna; non si vorrà mica che qualcuno su Internet ne abusi! :)

Per prima cosa, si consentano le connessioni preesistenti o qualunque cosa ad esse correlate (p.e. un server ftp che si collega di rimando):

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Se dà un errore, molto probabilmente nel kernel non è abilitato il "connection tracking", perciò lo si ricompili. Poi si permettano nuove connessioni solo dalla propria intranet (rete interna o locale). Si rimpiazzi ppp0 con eth0 o qualunque altra cosa sia il proprio device di rete verso l'esterno. (Il "!" è una negazione, significa "qualsiasi cosa tranne").

$> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT

Ora si neghi tutto il resto:

$> iptables -P INPUT DROP   #solo se i due precedenti hanno avuto successo

Se una delle due regole precedenti è fallita, l'ultima regola impedirà completamente il funzionamento del masquerading. Per annullare l'ultima regola si usi "iptables -P INPUT ACCEPT".


4. Istruzioni di post-installazione

Ora dovrebbe funzionare tutto. Non ci si dimentichi di:

Per testare la configurazione:

Dove eth0 è la scheda di rete ethernet verso Internet e 123.12.23.43 è l'IP pubblico della macchina.


5. FAQ - le lament... le domande poste più di frequente