Avanti Indietro Indice

5. Come impostare il NAT

Si devono creare delle regole di NAT che segnalino al kernel quali connessioni cambiare e come cambiarle. Per fare ciò, si userà il programma iptables, il quale oltre ad essere veramente versatile, permette anche di alterare la tabella NAT specificando l'opzione `-t nat'.

La tabella delle regole NAT contiene tre liste chiamate comunemente `catene' (chains): ogni regola è esaminata per ordine finché una non è soddisfatta. Due catene sono chiamate PREROUTING (per il Destination NAT sui pacchetti in arrivo) e POSTROUTING (per il Source NAT sui pacchetti in uscita).

Il seguente diagramma, se ho un talento artistico, dovrebbe illustrare tutto ciò molto bene.

      _____                                     _____
     /     \                                   /     \
   PREROUTING --->[Decisioni] --------------->POSTROUTING----->
     \D-NAT/     [di routing ]                 \S-NAT/
                [instradamento]                   ^
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     --------> Processi locali ----

Per ogni punto, quando un pacchetto passa viene osservata quale connessione vi è associata. Se è una nuova connessione, per sapere cosa fare, si osserverà la catena corrispondente nella tabella NAT. La risposta che si otterrà sarà poi applicata anche a tutti i pacchetti successivi appartenenti a questa connessione.

5.1 Semplici selezioni usando iptables

iptables vanta una serie di opzioni standard elencate sotto. Tutte le opzioni con doppio trattino possono essere abbreviate, sempre che iptables possa distinguerle dalle altre opzioni disponibili. Se il proprio kernel supporta iptables usando un modulo, si dovrà prima di tutto caricare il modulo ip_tables.o utilizzando `insmod ip_tables'.

L'opzione più importante è l'opzione di selezione della tabella `-t'. Per tutte le operazioni di NAT si dovrà sempre utilizzare `-t nat'. La seconda opzione più importante è `-A' usata per appendere una nuova regola alla fine della catena (es. -A `POSTROUTING') o `-I' per inserirne una all'inizio (es. `-I PREROUTING').

Si può specificare la sorgente (`-s' o `--source') e la destinazione (`-d' o `--destination') dei pacchetti su cui si vuole effettuare il NAT. Queste opzioni possono essere seguite da un indirizzo IP singolo (es. 192.168.1.1), da un nome (es. www.gnumonks.org) oppure da un indirizzo di rete (es. 192.168.1.0/24 oppure 192.168.1.0/255.255.255.0).

Si può inoltre specificare l'interfaccia di ingresso (`-i' o `--in-interface') o l'interfaccia di uscita (`-o' o `--out-interface'), ma quale usare dipende dalla catena in cui si vuole aggiungere la regola, nella catena PREROUTING si può specificare solo l'interfaccia di ingresso, nella catena POSTROUTING solo quella di uscita. Se si usa quella sbagliata iptables comunque restituirà un errore.

5.2 Note utili sulla selezione dei pacchetti da manipolare

Come detto precedentemente si può specificare un indirizzo sorgente o di destinazione. Se si omette l'opzione di indirizzo sorgente, allora si intenderà qualsiasi indirizzo sorgente. Se si omette l'opzione di indirizzo destinazione, allora si intenderà qualsiasi indirizzo destinazione.

Si può anche indicare uno specifico protocollo (`-p' o `--protocol'), come ad esempio TCP o UDP, in questo modo solo i pacchetti con quel protocollo saranno sottoposti alla regola. La ragione principale per cui è utile specificare il protocollo è che tcp e udp consentono di utilizzare delle opzioni extra, precisamente le opzioni `--source-port' e `--destination-port' (abbreviate `--sport' e `--dport').

Queste opzioni permettono di specificare che solo i pacchetti con quella certa porta sorgente e destinazione dovranno essere sottoposti alla regola. Questo è utile per le richieste di redirezione del web (TCP porta 80 o 8080) e per lasciar stare gli altri pacchetti.

Queste opzioni devono essere inserite dopo l'opzione `-p' (che ha come effetto quello di caricare la libreria estensione del protocollo). Per le porte si possono utilizzare i numeri corrispondenti, o i nomi presenti nel file /etc/services.

Tutte le differenti caratteristiche utilizzabili per selezionare un pacchetto sono dettagliate in modo esauriente nelle pagine del manuale (man iptables).


Avanti Indietro Indice