IPTables

http://openskill.info/topic.php?ID=125
Data di creazione: 2005-05-21

Network address translation con la tabella nat

La tabella nat (-t nat) si usa per modificare IP e porte sorgenti e destinazione.
Ha 3 catene di default:
PREROUTING – Viene attraversata prima che il sistema decida come fare routing. Si usa per fare DESTINATION NATTING (target DNAT)
POSTROUTING – Viene usata dopo che il sistema ha deciso su che interfaccia fa uscire un pacchetto. Si usa per SOURCE NATTING (target SNAT).
OUTPUT – Si applica a pacchetti in uscita dal sistema stesso per eventuali modifica dell’IP sorgente.

Esempio per nattare una rete completa con un unico IP pubblico (PAT) su interfaccia dialup:

iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -o ppp0 -j MASQUERADE

Analogo esempio preferibile su interfacce con ip fisso (es: 80.80.14.14):

iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 80.80.14.14

Esempio per nattare un host con IP privato su IP pubblico :

iptables -t nat -I PREROUTING -d 213.198.151.5 -j DNAT --to-dest 10.10.10.19

Alterazione di pacchetti con la tabella mangle

La tabella mangle (-t mangle) permette la modifica di vari header IP o TCP di un pacchetto.
Viene tipicamente usata per alterare il TOS e prevede le catene di default: PREROUTING, INPUT, FORWARD, OUTPOUT, POSTROUTING.
Ha usi rari e sporadici come il tentativo di ottimizzare la velocità del traffico in uscita impostando il TOS o, più in voga, il DSCP di un pacchetto.

Esempio di modifica TOS per ridurre la latenza di pacchetti DNS:

iptables -t mangle -A OUTPUT -p udp --dport 53 -j TOS --set-tos Minimize-Delay

Esempio di impostazione del massimo throughput per protocolli di trasferimento file:

iptables -t mangle -A FORWARD -p tcp -m multiport --dport 21,20,43,88,109,110,143,873 -j TOS --set-tos Maximize-Throughput

Logica di attraversamento di iptables

Il kernel gestisce ogni pacchetto secondo logiche e seguenze ben precise, che determinano il modo con cui vanno processate, e configurate, le iptables.

Pacchetti destinati al sistema locale
1 – Un pacchetto entra da una interfaccia (es: eth0)
2 – Attraversa la tabella/catena mangle / PREROUTING (set TOS ecc)
3 – Attraversa la tabella/catena nat / PREROUTING (DNAT)
4 – Viene fatta la decisione di routing sulla base dell’IP destinazione attuale.
5 – Attraversa la tabella/catena mangle / INPUT
6 – Attraversa la tabella/catena filter / INPUT
7 – Viene processato da una applicazione locale (in userland)

Pacchetti in uscita dal sistema locale
1 – Il pacchetto viene processato/generato da una applicazione locale
2 – Il kernel decide dove routare, sulla base dell’IP destinazione.
3 – Attraversa la tabella/catena mangle / OUTPUT
4 – Attraversa la tabella/catena nat / OUTPUT
5 – Attraversa la tabella/catena filter / OUTPUT
6 – Attraversa la tabella/catena mangle / POSTROUTING
7 – Attraversa la tabella/catena nat / POSTROUTING (SNAT)
8 – Esce dall’interfaccia per raggiungere la sua destinazione (es: eth1)

Pacchetti che attraversano il firewall
1 – Un pacchetto entra da una interfaccia (es: eth0)
2 – Attraversa la tabella/catena mangle / PREROUTING
3 – Attraversa la tabella/catena nat / PREROUTING
4 – Viene routato verso l’IP di destinazione (in questo caso remoto).
5 – Attraversa la tabella/catena mangle / FORWARD
6 – Attraversa la tabella/catena filter / FORWARD
7 – Attraversa la tabella/catena mangle / POSTROUTING
8 – Attraversa la tabella/catena nat / POSTROUTING
9 – Esce dall’interfaccia per raggiungere la sua destinazione (es: eth1)

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...