Page suivante Page précédente Table des matières

5. Controller quoi il faut NAT

Tu dois créer des règles de NAT qui disent au kernel quelles connections changer, et comment les changer. Pour faire cela, nous utilisons l'outil très versatile iptables, et lui disons d'altèrer la table NAT en specifiant l'option -t nat.

La table des règles de NAT contient 3 listes appelées `chaines': chaque règle est examinée dans l'ordre jusqu'a ce qu'une convienne. Les trois chaines sont appelées PREROUTING (pour le NAT de destination, lorsque le paquet arrives), POSTROUTING (pour le NAT de source, lorsque le paquet part), et OUTPUT (pour le NAT de destination des paquets localement générés).

Le diagramme suivant devrait illustrer pas mal si j'avais un peu de talent artistique:

      _____                                     _____
     /     \                                   /     \
   PREROUTING -->[décision]----------------->POSTROUTING----->
     \D-NAT/     [de routage]                  \S-NAT/
                     |                            ^
                     |                          __|__
                     |                         /     \
                     |                        | OUTPUT|
                     |                         \D-NAT/
                     |                            ^
                     |                            |
                     -------->Processus local------

A chacun des points ci dessus, quand un paquet passe nous regardons a quelle connection il est associé. Si c'est une nouvelle connection, nous regardons la chaine correspondante dans la table NAT pour voir quoi faire avec lui. La réponse donnée sera appliquée a tous les paquets futurs de cette connection.

5.1 Sélection simple en utilisant iptables

iptables a un nombre d'options standard comme listées ci-dessous. Toutes les options avec un double tiret peuvent ètre abbrégées, aussi longtemps que iptables peut les différencier des autres options possibles. Si ton kernel a un support iptables comme module, tu devras charger le module iptables.o en premier: `insmod ip_tables'.

L'option la plus importante ici ezst la sélection de table, `-t'. Pour toutes les operations de NAT, tu voudras utiliser `-t nat' pour la table NAT. La seconde option la plus importante a utiliser est `-A' pour ajouter une nouvelle règle a la fin de la chaine (pe. `-A POSTROUTING'), ou `-I' pour en insérer une au début (pe. `-I PREROUTING').

Tu peux specifier la source (`-s' ou `--source') et la destination (`-d' ou `--destination') du paquet que tu veux NAT. Ces options peuvent ètre suivies d'une seule adresse ip (pe. 192.168.1.1), un nom (pe. www.kernelnotes.org), ou une adresse de réseau (pe. 192.168.1.0/24 ou 192.168.1.0/255.255.255.0).

Tu peux specifier une interface d'entrée (`-i' ou `--in-interface') ou de sortie (`-o' ou `--out-interface') qui convient, mais celle que tu peux specifier dépend dans quelle chaine tu mets la règle: au PREROUTING tu peux seulement selectionner une interface d'entrée, et au POSTROUTING (et OUTPUT) une de sortie. Si tu utilises la mauvaise, iptables retournera une erreur.

5.2 Affinage Des Points De Sélection Des Paquets A Modifier

J'ai dit plus haut que tu pouvais specifier une adresse source et destination. Si tu omets l'adresse source, alors toutes les adresses sources conviendront. Si tu omets l'adresse destination, alors toutes les adresses destination conviendront.

Tu peux aussi specifier un protocole (`-p' ou `--protocol'), comme TCP ou UDP; seuls les paquets de ce protocole conviendront pour la règle. La raison, principale de specifier un protocole tcp ou udp est que on a alors des options supplémentaires: spécifiquement `--source-port' et `--destination-port' (abbrégées en `--sport' et `--dport').

Ces options te permettent de specifier que seulement les paquets avec un certain port source et destination conviendront a la régle. C'est utile pour rediriger les requètes web (port TCP 80 ou 8080) et laisser les autres paquets tranquilles.

Ces options doivent suivre l'option `-p' (qui a comme effet de charger la librairie partagée pour ce protocole). Tu peux utiliser des numéros de ports, ou un nom du fichier /etc/services.

Toutes les différentes manières dont tu peux selectionner un paquet sont détaillées dans la page de manuel (man iptables).


Page suivante Page précédente Table des matières