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".