SNAT con iptables

Finora, abbiamo discusso NAT principi generali, tipi di NAT, e ciò che ogni tipo di NAT fa.
netfilter / iptables può essere utilizzato per eseguire NAT in uno qualsiasi dei modi che abbiamo discusso. In realtà, ci sono molte cose che si possono fare con iptables in questo settore e cercheremo di coprire quanto più possibile in questo articolo. Prima di arrivarci, vediamo che cosa abbiamo bisogno per essere in grado di eseguire correttamente il NAT su Linux.

Configurazione del Kernel

Di solito, tutte le distribuzioni Linux viene fornito con un kernel compilato con il supporto netfilter, iptables strumento, e tutti i moduli necessari per l'esecuzione di Network Address Translation.
Un ottimo HowTo su come compilare Linux kernel 2.4 e 2.6 è stato scritto da Kwan Lowe e può essere trovato alla http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
Quando si compila un nuovo kernel o ricompilare il kernel che avete, è necessario impostare NETFILTER = y al fine di utilizzare iptables. Nel kernel 2.6, questa opzione si trova solitamente sotto I driver di periferica | Networking support | Networking support (NET [= y]) | Networking options, Ma dipende molto dalla versione del kernel.
Ad esempio, nel kernel 2.6.14, questa opzione si trova sotto Networking | Reti Opzioni.
Se si utilizza make menuconfig o make xconfig per configurare il kernel per ricompilarlo, selezionare Messa in rete | Networking options | Network packet filtering (replaces ipchains) | IP: Netfilter Configuration.
Nel IP: Netfilter Configuration sezione potrai trovare le opzioni necessarie per il NAT come segue:
IP_NF_CONNTRACK o Connection tracking (required for masq / NAT) mantiene una registrazione dei pacchetti IP che passa attraverso la macchina per passare correttamente agli endpoint NATed quando le richieste fatte da quelli si risponde. Questo è di vitale importanza per NAT. Se dite No qui, non sarà in grado di eseguire NAT.

Il nat La tabella di netfilter

La tabella nat contiene tre catene-PREROUTING, POSTROUTING e OUTPUT. Ogni catena può contenere norme che siano esaminati in sequenza fino a quando una delle regole corrisponde a un pacchetto, lo stesso che per le catene nella tabella di netfilter. Queste catene possono essere visualizzate mediante l'emissione del comando iptables-t nat-L.
il iptable_nat moduli e ip_conntrack per il rilascio di tutti i comandi con iptables-t nat, quindi non c'è bisogno di usare utility Linux insmod o modprobe per NAT al lavoro.
La catena di OUTPUT non è pienamente supportato, quindi dovremo ignorare che, per ora.
Il catene PREROUTING e POSTROUTING hanno nomi significativi. La catena di PREROUTING viene analizzato dal kernel prima di qualsiasi decisione di routing è fatto. Pertanto, ciò che dobbiamo fare nella catena PREROUTING è quello di cambiare l'indirizzo del IP di destinazione e quindi lasciare che il processo di routing per trovare la destinazione che abbiamo appena cambiato (DNAT).
La catena POSTROUTING contiene le regole che analizza il kernel dopo una decisione di routing è fatto. Questo significa che abbiamo un percorso verso la destinazione, e così siamo in grado di modificare l'indirizzo IP di origine, se tale percorso è al di fuori della nostra rete (SNAT).

SNAT con iptables

SNAT è uno dei tipi più comunemente utilizzata di NAT con iptables a causa della topologia.
Vediamo, per esempio, il seguente scenario:
Rete 192.168.1.0/24 è nel nostro ufficio. Noi abbiamo una connessione Ethernet dal nostro provider, che ci ha assegnato il 1.2.3.1/30 indirizzo IP e il gateway predefinito 1.2.3.2.
Tutti i computer della rete 192.168.1.0/24 hanno il gateway di default impostato su 192.168.1.1.
Il nostro router Linux dispone di due interfacce Ethernet:

  • Eth0, con l'indirizzo IP 192.168.1.1 e netmask 255.255.255.0, è collegato ad uno switch che collega altri dispositivi della rete 192.168.1.0/24.
  • Eth1, con l'indirizzo IP 1.2.3.1 e netmask 255.255.255.252, è collegato alla CPE del provider (Customer Premises Equipment), che può essere un modem DSL, modem via cavo, media converter, ecc
  

Siamo in grado di impostare SNAT in modo che tutti i dispositivi in rete 192.168.1.0/24 l'accesso a Internet con una sola regola:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J SNAT - to 1.2.3.1

Questo comando ha lo stesso effetto come il seguente comando, che avrebbe utilizzato se l'indirizzo IP di eth1 sono stati assegnati in modo dinamico, o se abbiamo usato un modem dial-up al posto di una scheda Ethernet:


iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J MASQUERADE

Diciamo che il nostro fornitore di filtri su tutte le porte superiori a 1024. In questo caso, avremo bisogno di cambiare la porta di origine, nonché, e non solo l'indirizzo IP di origine. Questo può essere fatto da:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - to 1.2.3.1:1-1024

L'utente laptop visto nella figura precedente è un fan di IRC e ci dona una chiamata dicendo che non è possibile connettersi a tutte le reti IRC. Ciò significa che il modulo ip_conntrack ha bisogno di un piccolo aiuto, e noi possiamo dare a lui inserendo il modulo ip_conntrack_irc nel kernel. Inoltre, si potrebbe desiderare per consentire agli utenti di effettuare con successo le connessioni FTP, e così vogliamo aggiungere il modulo ip_conntrack_ftp pure.

ip_conntrack_irc # modprobe o insmod ip_conntrack_irc
ip_conntrack_ftp ip_conntrack_ftp # modprobe o insmod

Dopo poche settimane, l'utente portatile ha convinto gli altri utenti della rete 192.168.1.0/24 di come l'IRC è meraviglioso, così abbiamo circa 20-30 utenti che si connettono alla rete IRC stesso. Ora, hanno cominciato a lamentarsi di quanto sia difficile per collegarsi alla rete IRC, perché la rete IRC consente solo un paio di connessioni dallo stesso indirizzo IP. Riteniamo che, 32 indirizzi IP sono sufficienti per loro, così si chiama il fornitore di assegnare noi una / 27 subnet IP pubblico. Per qualche dollaro in più, che ci assegna 1.2.4.0/27. Dobbiamo cambiare la regola iniziale a:

 

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J SNAT - to 1.2.4.0-1.2.4.32

Smettono di lamentarsi, ma ci rendiamo conto di non utilizzare l'indirizzo IP pubblico del nostro router Linux per NAT più. Lasciatemi aggiungere che anche, in modo da dar loro un indirizzo IP extra:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - to 1.2.4.0-1.2.4.32 - A 1.2.3.1

Uno dei nostri utenti viene in una discussione su IRC, e viene allagato, mentre SNAT MAPPS il suo indirizzo IP a 1.2.4.15. Alluvione nostro fornitore del sistema di rilevazione filtra automaticamente l'indirizzo IP e ci invia una e-mail informandoci su di esso. Dobbiamo smettere di SNAT per mappare tutti gli indirizzi interni a tale indirizzo IP, in modo da effettuare le seguenti operazioni:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - Per 1.2.4.0-1.2.4.14 - a 1.2.4.16-1.2.4.32 - a 1.2.3.1

Un ragazzo dalla contabilità con l'indirizzo IP 192.168.1.19 lamenta il fatto che egli non può accedere a qualsiasi computer con indirizzi IP su 192.168.1.32. E 'possibile che abbia cambiato la sua maschera di rete a 255.255.255.227, e così tutti i pacchetti IP dal proprio computer a computer in 192.168.1.0/24 che non sono in 192.168.1.0/27 passare attraverso il router Linux e ottenere SNATed. Per risolvere questo problema, abbiamo due alternative.
Il primo sarebbe di non SNAT 192.168.1.0/24 quando la destinazione è un altro computer in 192.168.1.0/24:


iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -D! 192.168.1.0/24 -J SNAT - to 1.2.4.0-1.2.4.32 - a 1.2.3.1

La seconda scelta che abbiamo è quello di SNAT solo i pacchetti che vanno su eth1:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -O eth1 -J SNAT - to 1.2.4.0-1.2.4.32 - a 1.2.3.1

Il nostro fornitore di collegamento in un'altra posizione della nostra azienda per le stesse attrezzature, e dato che siamo nella stessa VLAN, non abbiamo per costruire un tunnel tra i router di ogni posizione, ma solo il percorso delle reti attraverso il router Linux in quella posizione . Sul sito, abbiamo la rete 192.168.2.0/24. Dobbiamo lasciare che i computer nel nostro computer di accesso alla rete nella rete 192.168.2.0/24 senza SNATing loro:

iptables-t nat-I POSTROUTING-s 192.168.1.0/24-d 192.168.2.0/24-j ACCEPT

Questo comando inserisce la regola prima della regola NAT, quindi se ogni pacchetto da 192.168.1.0/24 è destinato a qualsiasi IP della rete 192.168.2.0/24, questa regola sarà partita e la catena non sarà ulteriormente analizzato, in modo SNAT non avrà luogo.
Jane, la nostra segretaria, è famosa per il suo buon caffè, ma da quando ha avuto la febbre IRC, lei non sta facendo niente. Il gestore è arrabbiato per questo, ma lei non vuole fuoco Jane perché è addicted al suo famoso caffè, così si viene a chiederci di fare qualcosa al riguardo. Ci sono molte cose che possiamo fare in questa materia, per i pacchetti in calo esempio da Jane (192.168.1.31) quando si tenta di porte di accesso 6.666-6.669 nella catena POSTROUTING:

iptables-t nat-I POSTROUTING-s 192.168.1.31 -P tcp - dport 6666:6669 -J DROP

Potremmo desiderare di chiedere al gestore che Jane è autorizzato a fare. Ad esempio, se il gestore vuole permettere di Jane accesso web solo, siamo in grado di effettuare le seguenti operazioni:

iptables-t nat-I POSTROUTING-s 192.168.1.31 -P tcp - dport! 80 -J DROP

Questa regola non l'indirizzo SNAT Jane's IP quando si tenta di accedere a qualcosa di diverso da porta 80 TCP, ma sarà SNAT il suo indirizzo IP quando si accede a tutti i servizi UDP, perché i pacchetti UDP non corrispondono a questa regola, così lei sarà in grado di accedere a qualsiasi server DNS al di fuori della nostra rete.

DNAT con iptables

Noi continueremo con lo scenario precedente per DNAT pure. Un giorno, il direttore ci chiama dicendo che ha bisogno di accedere al suo computer da casa. Naturalmente lei non può fare che a causa del suo indirizzo IP privato 192.168.1.50. Decidiamo di assegnare uno degli indirizzi IP pubblici che abbiamo per il suo computer d'ufficio, ma se dovessimo creare un alias sulla eth0 per questo, non solo perde alcuni indirizzi IP, ma anche lei non sarà la stessa rete come gli altri. La soluzione migliore è quella di Mappa un indirizzo IP pubblico (diciamo 1.2.4.1) per affrontare il suo computer dell'ufficio IP privato (192.168.1.50). Questo è, naturalmente, DNAT:

iptables-t nat-A PREROUTING-d 1.2.4.1 --j DNAT - to 192.168.1.50

Così la prossima cosa da fare è chiamare lei e dirgli che ogni volta che si tenta di connettersi al proprio computer dell'ufficio da casa, si deve collegare alla 1.2.4.1.
Il nostro server intranet ha l'indirizzo IP 192.168.1.100. Un tizio dal dipartimento finanziario ha una connessione a banda larga e ci chiede se può accedere al server intranet da casa. Egli ci dona il suo indirizzo IP pubblico come 1.2.5.17. Gli diciamo che dalla sua casa egli deve cercare l'indirizzo IP 1.2.4.2 del suo browser web, e noi eseguiamo:

iptables-t nat-A PREROUTING-s 1.2.5.17-d 1.2.4.2 --p tcp - dport 80-j DNAT - to 192.168.1.100

Pensiamo di voler SSH al server Intranet da qualsiasi luogo. Non sarebbe un'idea molto saggia per mappare un indirizzo IP al server intranet come è di vitale importanza per la nostra azienda, e se un bug SSH viene scoperto, non vogliamo che server per essere violato. Una buona idea sarebbe quella di mappare un alto numero di porta a porta SSH sul server della rete Intranet (si tratta di PAT o NAPT).

iptables-t nat-A PREROUTING-d 1.2.4.2 -P tcp - dport 65521-j DNAT - to 192.168.1.100:22

In questo modo, quando non sono in ufficio e vogliamo SSH al server intranet, apriamo una connessione SSH 1.2.4.2 porta a 65.521.
Dopo un po ', supponiamo che abbiamo installato un server web con l'indirizzo IP 192.168.1.200. Il server web è www.mycompany.whatever e punti in DNS 1.2.4.5. Per essere accessibile al mondo esterno, noi effettuare le seguenti operazioni:

iptables-t nat-A PREROUTING-d 1.2.4.5-p tcp - dport 80-j DNAT - to 192.168.1.200

Transparent Proxy

Proxy trasparente è un modo per obbligare gli utenti a usare un proxy server, anche se i loro browser sono configurati per non. Probabilmente sapete sui vantaggi di utilizzare un server proxy risparmiando larghezza di banda per le pagine in cache e l'attuazione di controllo di accesso (ad esempio, negare il download di file che hanno le estensioni pericolose).
Siamo in grado di eseguire proxy trasparente per tutti o per alcuni utenti per impedire loro di aggirare il proxy quando vogliono. Ciò è particolarmente utile per i computer dei bambini di negare loro l'accesso ai siti sessualmente esplicito, per esempio.
Sul nostro router Linux, abbiamo installato un server proxy Squid cache di alcuni contenuti dal web. Inoltre, vogliamo negare l'accesso a siti di sesso o download dannosi per gli utenti. Gli utenti non sono molto soddisfatto di utilizzare i nostri server proxy, e di solito rimuoverlo dalla loro configurazione del browser. Possiamo costringerli ad utilizzare il server proxy comunque. Se il server proxy in ascolto sulla porta 3128 faremo i seguenti:

iptables-t nat-A PREROUTING-s 192.168.1.0/24 -P tcp - dport 80-j REDIRECT - to-port 3128

Se vogliamo consentire al gestore (che ha l'indirizzo IP 192.168.1.50) per ignorare il server proxy, lo facciamo in questo modo:

iptables-t nat-I PREROUTING-s 192.168.1.50 --p tcp - dport 80-j ACCEPT

Quindi questa regola verrà abbinata nella catena PREROUTING, e sarà SNATed nella catena POSTROUTING.

un articolo presentato da Philip A Clare


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo "SNAT con iptables" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 240 users browsing the articles directory