SNAT avec iptables

Jusqu'à présent, nous avons discuté des principes généraux NAT, les types de NAT, et ce que tout sorte de NAT ne.
netfilter / iptables peut être utilisé pour effectuer NAT dans l'une des façons dont nous avons discuté. En fait, il ya beaucoup de choses que vous pouvez faire avec iptables dans ce domaine et nous allons essayer de couvrir autant que possible dans cet article. Avant d'en arriver là, nous allons voir ce que nous devons être en mesure de réaliser avec succès le NAT sur Linux.

Configuration du noyau

Habituellement, toutes les distributions Linux est fourni avec un noyau compilé avec le support de netfilter, iptables outil, et tous les modules nécessaires pour effectuer Network Address Translation.
Une explication très bonne compilation de Linux 2.4 et 2.6 est rédigé par Kwan Lowe et peut être trouvé à http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
Si vous compilez un nouveau noyau ou recompiler le noyau Linux que vous avez, vous devez définir NETFILTER = Y pour pouvoir utiliser iptables. Dans les noyaux 2.6, cette option se trouve généralement sous Les pilotes de périphériques | Réseau de soutien | Networking support (NET [= y]) | Networking options, Mais cela dépend vraiment de la version du noyau.
Par exemple, dans le noyau 2.6.14, cette option se trouve sous Réseautage | Networking Options.
Si vous utilisez make menuconfig ou make xconfig pour configurer votre noyau pour recompiler, sélectionnez Réseautage | Networking Options | Network packet filtering (replaces ipchains) | IP: Netfilter Configuration.
Dans le IP: Netfilter Configuration section, vous trouverez les options nécessaires pour NAT comme suit:
IP_NF_CONNTRACK ou Suivi de connexion (obligatoire pour masq / NAT) tient un registre des paquets IP qui sont passés par la machine afin de les faire passer correctement les paramètres NAT lorsque les demandes sont fabriqués à partir de ces réponses. Ceci est vital pour le NAT. Si vous dites Non ici, vous ne serez pas en mesure d'effectuer NAT.

La nat Table Netfilter

La table nat contient trois chaînes: PREROUTING, POSTROUTING et OUTPUT. Chaque chaîne mai contenir des règles qui sont examinées méthodiquement jusqu'à ce que l'une des règles correspond à un paquet, le même que pour les chaînes de la table netfilter. Ces chaînes peuvent être visualisées par l'émission de la commande iptables-t nat-L.
iptable_nat les modules et ip_conntrack lors de l'émission avec toutes les commandes iptables-t nat, de sorte qu'il n'est pas nécessaire d'utiliser des utilitaires Linux insmod ou modprobe pour le NAT à travailler.
La chaîne de production n'est pas totalement pris en charge, nous aurons donc d'ignorer que pour l'instant.
Les chaînes PREROUTING et POSTROUTING ont des noms significatifs. La chaîne PREROUTING est analysé par le noyau avant toute décision de routage est faite. Par conséquent, ce que nous devrions faire dans la chaîne PREROUTING est de changer l'adresse de l'IP de destination et de laisser ensuite le processus de routage pour trouver la destination qui nous vient de changer (DNAT).
La chaîne POSTROUTING contient des règles que l'analyse noyau après une décision de routage est faite. Cela signifie que nous avons un chemin vers la destination, et ainsi nous pouvons changer l'adresse IP source, si cette voie est en dehors de notre réseau (SNAT).

SNAT avec iptables

SNAT est l'un des types les plus couramment utilisées de NAT avec iptables en raison de la topologie utilisée.
Voyons voir, par exemple, le scénario suivant:
Réseau 192.168.1.0/24 est dans notre bureau. Nous disposons d'une connexion Ethernet à partir de notre fournisseur, qui nous a attribué la 1.2.3.1/30 adresse IP et la passerelle par défaut 1.2.3.2.
Tous les ordinateurs dans le réseau 192.168.1.0/24 ont la passerelle par défaut est 192.168.1.1.
Notre routeur Linux dispose de deux interfaces Ethernet:

  • Eth0, avec l'adresse IP 192.168.1.1 et masque de réseau 255.255.255.0, est relié à un interrupteur qui relie d'autres appareils dans le réseau 192.168.1.0/24.
  • Eth1, avec l'adresse IP 1.2.3.1 et le masque 255.255.255.252, est relié au CPE du prestataire (Customer Premises Equipment), qui peut être un modem DSL, modem câble, un convertisseur de média, etc
  

Nous pouvons mettre en place SNAT afin que tous les dispositifs dans l'accès 192.168.1.0/24 le réseau d'Internet avec une seule règle:

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

Cette commande a le même effet que la commande suivante, dont nous devrions utiliser si l'adresse IP de eth1 ont été assignées de façon dynamique, ou si nous avons utilisé un dial-up modem au lieu d'une carte Ethernet:


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

Disons que notre fournisseur de filtres à tous les ports supérieurs à 1024. Dans ce cas, nous aurons besoin de changer le port d'origine ainsi, et pas seulement l'adresse IP source. Cela peut être fait par:

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

L'utilisateur de portable voit dans la figure précédente est un fan d'IRC et il nous donne un appel en disant qu'il ne peut pas se connecter à tout réseau IRC. Cela signifie que le module ip_conntrack a besoin d'un peu d'aide, et nous pouvons lui donner en insérant le module ip_conntrack_irc dans le noyau. En outre, nous pourrions permettre aux utilisateurs d'assurer la réussite de connexions FTP, et si l'on veut ajouter le module ip_conntrack_ftp ainsi.

ip_conntrack_irc # modprobe ou insmod ip_conntrack_irc
ip_conntrack_ftp ip_conntrack_ftp # modprobe ou insmod

Après quelques semaines, les utilisateurs d'ordinateurs portables a convaincu d'autres utilisateurs dans le réseau 192.168.1.0/24 merveilleux de la façon dont le CRI est: nous avons donc environ 20-30 utilisateurs se connectant au même réseau IRC. Maintenant, ils ont commencé à se plaindre de la façon dont il est difficile de se connecter sur le réseau IRC, car le réseau IRC ne permet que quelques connexions à la même adresse IP. Nous chiffre que 32 adresses IP sont assez pour eux, donc nous appeler le fournisseur d'assigner nous un / 27 sous-réseau IP public. Pour quelques dollars de plus, ils se répartissent nous 1.2.4.0/27. Nous devons changer la règle initiale à:

 

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

Ils arrêter de se plaindre, mais nous nous rendons compte que nous n'utilisons pas l'adresse IP publique de notre routeur Linux pour NAT plus. Ajoutons que trop; si nous leur donnons une adresse IP supplémentaire:

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

Un des utilisateurs se dispute sur IRC, et obtient inondé en SNAT MAPPS son adresse IP à 1.2.4.15. Inonder notre prestataire système de détection du filtre automatiquement l'adresse IP et envoie-nous un courriel nous informant à ce sujet. Nous devons cesser de SNAT à la carte toutes les adresses internes à cette adresse IP, alors nous ne le texte suivant:

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

Un gars de la comptabilité avec l'adresse IP 192.168.1.19 se plaint qu'il ne peut pas accéder à tous les ordinateurs avec des adresses IP sur 192.168.1.32. Il est possible qu'il a changé son masque réseau à 255.255.255.227, et ainsi tous les paquets IP à partir de son ordinateur à un ordinateur à 192.168.1.0/24 qui ne sont pas en 192.168.1.0/27 passer par le routeur Linux et récupérer SNATed. Pour résoudre ce problème, nous avons deux possibilités.
La première serait de ne pas SNAT 192.168.1.0/24 lorsque la destination est un autre ordinateur dans 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 - à 1.2.3.1

Le second choix que nous avons est à la SNAT seulement les paquets qui sortent sur 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 - à 1.2.3.1

Notre fournisseur associé un autre emplacement de notre entreprise pour le même matériel, et puisque nous sommes dans le même VLAN, nous ne disposons pas de construire un tunnel entre les routeurs à chaque endroit, mais se contenterait de router les réseaux à travers le routeur Linux à cet endroit . Sur le site, nous avons le réseau 192.168.2.0/24. Nous devons permettre aux ordinateurs dans nos ordinateurs d'accès au réseau dans le réseau 192.168.2.0/24 sans SNATing eux:

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

Cette commande permet d'insérer la règle avant que la règle NAT, alors, si un paquet à partir 192.168.1.0/24 est destinée à toute la propriété intellectuelle dans le réseau 192.168.2.0/24, cette règle sera match et la chaîne ne sera pas analysé plus loin, si SNAT n'aura pas lieu.
Jane, notre secrétaire, est célèbre pour son bon café, mais depuis elle a obtenu la fièvre IRC, elle ne fait rien plus. Le gestionnaire est en colère à ce sujet mais elle ne veut pas tirer Jane, parce qu'elle est accro à son célèbre café; si elle vient à nous demander de faire quelque chose. Il ya plusieurs choses que nous pouvons faire dans cette affaire, pour les paquets de chute par exemple de Jane (192.168.1.31) en essayant de ports d'accès de 6666 à 6669 dans la chaîne POSTROUTING:

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

Nous pourrions vouloir demander au gérant ce que Jane est autorisé à faire. Par exemple, si le gestionnaire veut permettre Jane accès Web seulement, nous pouvons faire ce qui suit:

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

Cette règle ne sera pas SNAT Jane adresse IP lorsque vous tentez d'accéder à quelque chose d'autre que le port 80 TCP, mais il sera SNAT son adresse IP pour accéder à tous les services UDP car les paquets UDP ne correspondra pas à cette règle, de sorte qu'elle sera en mesure d'accéder à n'importe quel serveur DNS en dehors de notre réseau.

DNAT avec iptables

Nous allons continuer avec le scénario précédent pour DNAT ainsi. Un jour, le gestionnaire nous appelle à nous dire qu'elle a besoin d'accéder à son ordinateur à la maison. Bien sûr, elle ne peut le faire en raison de son adresse IP privée 192.168.1.50. Nous décidons de consacrer l'une des adresses IP publiques que nous avons pour son ordinateur de bureau, mais si nous devions créer un alias sur eth0 pour cela, nous aurions non seulement perdent certaines adresses IP, mais elle ne sera plus possible dans la même réseau comme les autres. La meilleure solution est de Plan une adresse IP publique (disons 1.2.4.1) à l'adresse privée de son ordinateur de bureau IP (192.168.1.50). Ceci est, bien sûr, DNAT:

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

Donc, la prochaine chose à faire est de l'appeler et lui dire que chaque fois qu'elle essaie de se connecter à son ordinateur de bureau de la maison, elle doit se connecter à 1.2.4.1.
Notre serveur intranet a l'adresse IP 192.168.1.100. Un gars de la direction financière dispose d'une connexion à large bande et nous demande s'il peut accéder au serveur intranet de la maison. Il nous donne son adresse IP publique que 1.2.5.17. Nous lui disons que, de sa maison, il devrait essayer de l'adresse IP 1.2.4.2 de son navigateur Web, et nous exécutons:

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

Nous pensons que nous pourrions vouloir SSH au serveur intranet de n'importe où. Il ne serait pas une idée très sage de la carte d'une adresse IP au serveur intranet, il est vital pour notre entreprise, et si un bug SSH est découvert, nous ne voulons pas que serveur pour être piraté. Une bonne idée serait de mapper un port de haute nombre vers le port SSH sur le serveur intranet (c'est PAT ou NAPT).

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

De cette façon, lorsque nous ne sommes pas au bureau et nous voulons SSH sur le serveur intranet, nous allons ouvrir une connexion SSH à 1.2.4.2 port 65521.
Après un moment, supposons que nous avons installé un serveur web avec l'adresse IP 192.168.1.200. Le serveur web est www.mycompany.whatever et des points dans le DNS pour 1.2.4.5. Pour être accessible au monde extérieur, nous effectuons le texte suivant:

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

Transparent Proxy

Proxy transparent est un moyen de forcer les utilisateurs à utiliser un serveur proxy, même si leurs navigateurs sont configurés pour ne pas. Vous savez sans doute sur les avantages d'utiliser un serveur proxy économiser la bande passante pour les pages mises en cache et la mise en œuvre de contrôle d'accès (par exemple, refuser de téléchargements de fichiers qui ont des extensions dangereuses).
Nous pouvons effectuer proxy transparent pour tous ou certains utilisateurs afin de les empêcher de contourner le proxy quand ils le veulent. Cela est particulièrement bien adaptés aux ordinateurs des enfants à leur refuser l'accès aux sites sexuellement explicites, par exemple.
Sur notre routeur Linux, nous avons installé un serveur proxy Squid pour mettre en cache une partie du contenu du Web. Aussi, nous voulons refuser l'accès aux sites à caractère sexuel ou des téléchargements malveillants pour les utilisateurs. Les utilisateurs ne sont pas très heureux sur l'utilisation de notre serveur proxy, et ils permettent généralement d'éliminer à partir de leur configuration du navigateur. Nous ne pouvons les forcer à utiliser le serveur proxy de toute façon. Si le serveur proxy écoute sur le port 3128, nous ferons ce qui suit:

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

Si nous voulons permettre au gestionnaire (qui a l'adresse IP 192.168.1.50) pour contourner le serveur proxy, nous le faisons comme ceci:

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

Ainsi, cette règle se traduira dans la chaîne PREROUTING, et elle sera SNATed dans la chaîne POSTROUTING.

un article présenté par Philip A Clare


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article "SNAT avec iptables" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 389 users browsing the articles directory