IPtables NAT e PAT: Come ti rigiro il pacchetto!

 

Io Ti Trasformo!

Parto dalla logica di funzionamento di una classica rete domestica con accesso ad Internet e  avendo a disposizione un solo indirizzo ip pubblico.

 

nat pat
iptables – Nat e Pat

NAT & PAT

Il NAT -(Network Address Translation) Modifica SOLO l’ip il PAT la porta del pacchetto. Nella maggior parte dei casi, ma soprattutto per il 99,9% dei casi nei router che usiamo a casa, il processo è ibrido NAT+PAT.
Il solo NAT presuppone di avere un pool (una serie) di indirizzi pubblici da associare all’indirizzo privato. Nelle nostre abitazioni, visto che l’indirizzo pubblico è unico ed è fornito dinamicamente dal provider, se uno a casa ha 2 pc collegati, solo uno dei due a turno potrebbe uscire in internet.
Il NAT + PAT, permette di associare piu indirizzi lan privati, mantenendo un unico indirizzo pubblico e variando la porta.

Esempio:

lan1pc1 192.168.1.2
lan1pc2 192.168.1.3

dopo il NAT/PAT
wanpc1:     212.1.1.1:1000 (wan da intendere come uscita su internet )
wanpc2:    212.1.1.1:1001  (wan da intendere come uscita su internet)

quindi NAT (variazione dell’ip) e PAT (variazione della porta).



IL PAT – (Port Address Translation) La parola stessa lo dice: viene modificato il pacchetto ip e/o la porta, dove all’interno risiedono l’indirizzo di destinazione e l’indirizzo sorgente. In teoria possono essere modificati tutte e due gli indirizzi e porta (destinazione e sorgente), ma noi ci occuperemo solo del sorgente.
Il processo avviene creando una tabella di associazione (nat table) che accoppia le richieste in uscita dalla lan a un set di porte (scelte a caso dal router di volta in volta) ed a un indirizzo ip pubblico fornito dal provider.

Esempio:

Lanpc:192.168.1.2
Wan: 1.2.3.4

Il pc richiede una pagina web che ha indirizzo 151.1.1.1
-il pc manda il pacchetto al gateway (router), con indirizzo sorgente 192.168.1.1 e destinazione 151.1.1.1
-il router memorizza nella nat table che 192.168.1.2 ha richiesto una pagina che ha indirizzo 151.1.1.1
-il router sostituisce l’indirizzo sorgente nel pacchetto e ci mette quello pubblico del router 1.2.3.4 assegnato dal provider, e cambia la porta. Facciamo finta 1.2.3.4:1000
-viene memorizzato tutto nella nat table.
-il pacchetto torna indietro con le informazione richieste (la pagina web)
-il router controlla nella nat table se qualcuno all’interno della lan ha richiesto dei pacchetti provenienti da questo ip.
-se c’è una corrispondenza, sostituisce l’ip di destinazione con l’ip privato trovato nella tabella.
-e il pacchetto arriva all’host della lan

Questo è il funzionamento del NAT/PAT.

Ma siccome l’appetito vien mangiando, vediamo come si puo’ metter su un server web a casa, oppure una telecamera da controllare da remoto.

Web server port forwarding

Ricordo sempre che sto parlando del funzionamento di una classica rete domestica con accesso ad Internet e Esposizione Server WEB porta 80 o di una telecamera – avendo a disposizione un solo indirizzo ip pubblico.

 

 

web server

 

nat pat

I normali gateway (modem/router) oggi distribuiti dai maggiori provider di connessione (casalinga), sono apparecchiature attive che svolgono, anche se in maniera “semplice”, le funzioni di terminale di connettività, router e firewall. Tra le loro caratteristiche utilizzabili c’e’ anche il port forwarding (di solito viene chiamato -server virtuale nelle opzioni di configurazione-) oltre al nat/pat natio.



 

Port Forwarding

La traslazione di indirizzo permette di collegare solo delle richieste che provengono dalla rete interna verso quella esterna, il che significa che è impossibile in quanto tale per un terminale esterno inviare un pacchetto verso un terminale della rete interna senza che la richiesta sia stata generata dall’interno della nostra lan. In poche parole se dovessimo mettere un server web che ha necessita’ di essere raggiunto da internet, con il semplice NAT/PAT non puo’ funzionare.

Per questa ragione, esiste un’estensione del NAT detta «port forwarding» che consiste nel configurare il gateway per trasmettere ad un “client” specifico della rete interna, tutti i pacchetti ricevuti su una particolare porta. Così, se si vuole accedere ad un server web (porta 80) funzionante su un terminale 192.168.1.2 dall’esterno, sarà necessario definire una regola di forwarding della porta sul gateway, ridirigendo tutti i pacchetti TCP ricevuti sulla sua porta 80 verso il terminale 192.168.1.100:80

In questo caso, ogni richiesta da internet verso l’indirizzo 1.2.3.4 sulla porta 80 viene indirizzata verso 192.168.1.100 porta 80.

Con questa tecnica, come è semplice intuire, si potrebbe reindirizzare una richiesta proveniente su una porta, all’ip definito, su un numero di porta diverso.

Facciamolo con IPtables

Iptables è solo un’interfaccia a riga di comando per la funzionalità di filtraggio dei pacchetti in netfilter. Tuttavia, non farò  una distinzione tra iptables e netfilter ma semplicemente all’intera cosa come “iptables”.

Il meccanismo di filtraggio dei pacchetti fornito da iptables è organizzato in tre diversi tipi di strutture: tabelle, catene e target. In parole povere, una tabella è qualcosa che permette di elaborare i pacchetti in modi specifici. La tabella predefinita è la tabella dei filtri, anche se ci sono anche altre tabelle.

Anche in questo caso, queste tabelle hanno catene collegate ad esse. Queste catene permettono di ispezionare il traffico in vari punti, come quando arrivano appena sull’interfaccia di rete o appena prima di essere consegnati a un processo. È possibile aggiungere regole che corrispondono a pacchetti specifici – come i pacchetti TCP che vanno sulla porta 80 – e associarli a un target. Un target decide il destino di un pacchetto, come ad esempio autorizzarlo o rifiutarlo.

Quando un pacchetto arriva (o parte, a seconda della catena), iptables lo abbina alle regole di queste catene uno per uno. Quando trova una corrispondenza, salta sul target ed esegue l’azione ad esso associata. Se non trova una corrispondenza con nessuna delle regole, fa semplicemente ciò che la politica predefinita della catena dice di fare. Anche la politica predefinita è un target. Per impostazione predefinita, tutte le catene hanno una politica predefinita di consentire i pacchetti.

IPtables
IPtables – Tabelle

Tabelle

Come detto prima, le tabelle consentono di fare cose molto specifiche con i pacchetti. Su una moderna distribuzione Linux, ci sono quattro tabelle:

La tabella dei filtri(filter table): Questa è la tabella predefinita e forse la più usata. Viene usata per prendere decisioni sull’opportunità di permettere ad un pacchetto di raggiungere la sua destinazione.

La mangle table(mangle table): Questa tabella permette di modificare le intestazioni dei pacchetti in vari modi, come ad esempio cambiando i valori TTL.
La tabella nat (nat table): Questa tabella permette di instradare i pacchetti verso diversi host su reti NAT (Network Address Translation) cambiando l’indirizzo di origine e di destinazione dei pacchetti. Viene spesso utilizzato per consentire l’accesso a servizi a cui non è possibile accedere direttamente, perché sono su una rete NAT.
La tabella raw (raw table): iptables è un firewall stateful, il che significa che i pacchetti sono controllati rispetto al loro “stato”. (Per esempio, un pacchetto potrebbe essere parte di una nuova connessione, o potrebbe essere parte di una connessione esistente). La tabella raw permette di lavorare con i pacchetti prima che il kernel inizi a tracciare il suo stato. Inoltre, è anche possibile esonerare alcuni pacchetti dal monitoraggio dello stato .



 

Catene

Ora, ognuna di queste tabelle è composta da alcune catene predefinite. Queste catene permettono di filtrare i pacchetti in vari punti. L’elenco delle catene che iptables fornisce sono:

  • PREROUTING: Le regole di questa catena si applicano ai pacchetti appena arrivati sull’interfaccia di rete. Questa catena è presente nelle tabelle nat, mangle e raw.
  • INPUT: Le regole di questa catena si applicano ai pacchetti appena prima di essere dati a un processo locale. Questa catena è presente nelle tabelle mangle e filter.
  • OUTPUT: Le regole qui si applicano ai pacchetti subito dopo che sono stati prodotti da un processo. Questa catena è presente nelle tavole raw, mangle, nat e filter.
  • FORWARD: Le regole qui si applicano a qualsiasi pacchetto che viene instradato attraverso l’host corrente. Questa catena è presente solo nelle tabelle mangle e filter.
  • POSTROUTING: Le regole di questa catena si applicano ai pacchetti in quanto lasciano semplicemente l’interfaccia di rete. Questa catena è presente nelle tabelle nat e mangle.

 

Targets

Come detto prima, le catene consentono di filtrare il traffico aggiungendovi delle regole. Così, per esempio, si può aggiungere una regola sulla catena INPUT della tabella dei filtri per far un match del traffico sulla porta 22. Ma cosa faresti dopo averle confrontate? Ecco a cosa servono i target – decidono il destino di un pacchetto.

I target finali più comunemente usati sono:

ACCEPT: Questo fa sì che iptables accetti il pacchetto.
DROP: iptables fa “decadere” il pacchetto. A chiunque tenti di connettersi al vostro sistema, sembrerebbe che il sistema non esista nemmeno.
REJECT: iptables “rifiuta” il pacchetto. Invia un pacchetto “connection reset” in caso di TCP, o un pacchetto “destination host unreachable” in caso di UDP o ICMP.

Esempi

Il mondo di IPtables è sconfinato , e questi semplicissimi esempi voglio solo dimostrare la logica che IPtables utilizza .

Esempio_1

Immaginiamo di avere 2 interfacce: 1) Extranet (internet) e 2) Intranet (lan locale) e vogliamo abilitare tutte le macchine presenti sulla lan ad usare internet.

iptables -t nat -A POSTROUTING -o (interfaccia sulla extranet) -s (intranet/mask) –source-address

quindi ..

iptables -t nat -A POSTROUTING -o port01 -j MASQUERADE
iptables -t filter -P FORWARD ACCEPT

Esempio_2

Abbiamo 2 server nella nostra Intranet che devono esporre i loro servizi. Uno sulla porta 80 e l’altro sulla porta 8080

a) 10.0.0.2 porta 80

b) 10.0.0.3 porta 8080

Ip Pubblico = 88.18.13.11

iptables -t nat -A PREROUTING -p tcp -d 88.18.13.11 -dport 80 -j DNAT -to-destination 10.0.0.2:80

e
iptables -t nat -A PREROUTING -p tcp -d 88.18.13.11 -dport 8080 -j DNAT -to-destination 10.0.0.3:8080

e
iptables -t filter -P FORWARD ACCEPT

Esempio_3

Se si dispone di un server sulla rete interna che si desidera rendere disponibile all’esterno attraverso un indirizzo ip pubblico attestato sull’interfaccia eth0 (ip pubblico dinamico), è possibile utilizzare il -j DNAT. Ad esempio, se si desidera inoltrare le richieste HTTP in entrata al sistema server HTTP Server Apache ip= 172.16.0.11 e porta 80, eseguire il seguente comando:

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 172.16.0.11:80

 

Di una logica estrema ……. IPtables NAT e PAT