Compilare il kernel (serve un kernel 2.4.x o successivo).
Serve abilitare il supporto alle seguenti funzionalità del kernel:
Sotto "Networking Options"
Network packet filtering (CONFIG_NETFILTER)
Sotto "Networking Options->Netfilter Configuration"
Connection tracking (CONFIG_IP_NF_CONNTRACK)
FTP Protocol support (CONFIG_IP_NF_FTP)
IP tables support (CONFIG_IP_NF_IPTABLES)
Connection state match support (CONFIG_IP_NF_MATCH_STATE)
Packet filtering (CONFIG_IP_NF_FILTER)
REJECT target support (CONFIG_IP_NF_TARGET_REJECT)
Full NAT (CONFIG_IP_NF_NAT)
MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE)
REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT)
Packet mangling (CONFIG_IP_NF_MANGLE)
LOG target support (CONFIG_IP_NF_TARGET_LOG)
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".