Realizzare un semplice NAT con iptables su linux

Vediamo come fare

 

Introduzione

Il NAT è una tecnica che permette di manipolare header dei pacchettti IP quando viaggiano nel nodo di interconnessione tra le reti, questa manipolasione avviene nei seguenti modi: source network address translation (SNAT) o destination network address translation (DNAT). Ovviamnete il NAT tienetraccia dello storico delle modifiche effettuate per redirigere una connessione verso un’'altra.

Le ragioni per cui viene utilizzato il NAT sono le seguenti: 
1) connessioni di più client a Internet attraverso un solo IP address pubblico. 2) se si desidera reindirizzare un IP di destinazione ad un IP privato della rete interna.
3) se si vuole reindirizzare ad esempio un Trasparent Proxy, redirigere i pacchetti destinati a Internet verso un Web Proxy, allo scopo di evitare quelle fastidiose riconfigurazioni per impostare l'indirizzo del proxy sui ogni singolo client della propria rete.
4) implementare un Port-Forwarding allo scopo di avere un reindirizzamento delle porte.


NOTA IMPORTANTISSIMA: IL NAT NON E’ UN SISTEMA DI SICUREZZA QUINDI IL NAT non è un FIREWALL ----- NON SOSTITUISCE UN FIREWALL -----

Configurare il NAT 

Prima di configurare di una regola NAT, ricordiamoci sempre di attivare l'IP Forwarding: 
# echo 1 > /proc/sys/net/ipv4/ip_forward

 

DNAT(DestinationNAT)

Il Destination NAT o DNAT viene particolarmente utilizzato quando si hanno più server in DMZ con indirizzamento privato del tipo 192.168.0.x ed un solo server firewall dotato di IP pubblico è quindi visibile da Internet. Ricordiamo sempre che il DNAT avviene nella chain di PREROUTING ossia prima della routing decision. Il DNAT sarà utilissimo in quanto ci permette di proteggere i server pubblici in DMZ filtrando il traffico a loro destinato dal firewall che farà NAT ad esempio sola per i servizi HTTP e FTP.

 

SINTASSI

iptables -t nat -A PREROUTING -p {tcp | udp | icmp}

-s (source address)

--source-port <­porta>

-d (destination address)

--destination-port <­porta>

-j DNAT

--to-destination (destination address)

Esempio:

 

Reindirizzare l’indirizzo di rete pubblica 80.23.45.178 porta 80 verso il server web 192.168.0.254 e stesso pubblico con RDP verso il terminal server 192.168.0.253 porta rdp 3389

 

# iptables -t nat -A PREROUTING -p tcp -d 80.23.45.178 -dport 80 -j DNAT -to-destination 192.168.0.254:80

 

# iptables -t nat -A PREROUTING -p tcp -d 80.23.145.178 -dport 3389 -j DNAT -to-destination 192.168.0.253:3389

 

Reindirizzare tutto il traffico dell’interfaccia attaccata al router eth1  verso l’indirizzo 192.168.0.1

# iptables -t nat -A PREROUTING -i eth1  -j DNAT --to-destination 192.168.0.1

 

Reindirizzare il traffico HTTP proveniente dalla rete interna sull’interfaccia eth0 verso un Trasparent-Proxy 192.168.0.1 porta 8080

# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to-destination 192.168.0.1:8080

 

Reindirizzare tutto il traffico per l’indirizzo 192.168.0.1 verso l'IP 192.168.20.1

# iptables -t nat -A OUTPUT -d 192.168.0.1 -j DNAT --to-destination 192.168.20.1

 

Abilitare una serie di host interni alla rete 192.168.0.x a ricevere connessioni Telnet mediante un unico IP address esterno 80.23.45.178

# iptables -t nat -A PREROUTING -d 80.23.45.178 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80
# iptables -t nat -A PREROUTING -d 
80.23.45.178 -p tcp --dport 110 -j DNAT --to-destination 192.168.0.2:110
# iptables -t nat -A PREROUTING -d 
80.23.45.178 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.2:25

 

Alla fine dei comandi inserire quanto segue:

#iptables -t filter -P FORWARD ACCEPT

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

 

SNAT(SourceNAT)

Il Source NAT si ha quando si ha necessità di cambiare l'indirizzo IP sorgente. SNAT deve essere eseguito in fase di post-routing, un attimo prima che il pacchetto venga trattato dal processo di routing pronto per essere immesso sulla rete.
Questo è un dettaglio importante, perché solo così qualsiasi altra cosa nella Linux box (instradamento, filtraggio dei pacchetti) vedrà il pacchetto come invariato. Ciò significa inoltre che si potrà utilizzare l'opzione `-o' (interfaccia uscente). Il Masquerading o Mascheramento è anch'essa una tecnica di SNAT dove tutti i pacchetti provenienti dai client interni alla rete privata vengono mascherati in un solo IP address. Mascherare (Masquerading) tutti i pacchetti in uscita dall'interfaccia eth1(interfaccia collegata ad internet) con lo stesso l'IP address assegnato all'interfaccia eth1:

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

 

Alterare in "192.168.1.254" qualsiasi indirizzo IP sorgente proveniente dall'interfaccia eth0:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.254

 

Impostare un pool di indirizzi con cui mascherare tutti i pacchetti in uscita dall'interfaccia eth0 in un range che va da 192.168.0.1 a 192.168.0.5:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.1-192.168.0.5

 

Visualizzare le tabelle NAT

# iptables -t nat -L

 

Ripulire le tabelle NAT

# iptables -t nat -F