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

5. Contrôler À Quoi Appliquer le NAT

Vous devez créer des règles de NAT qui disent au noyau quelles connexions modifier et comment les modifier. Pour cela, on utilise la souplesse de l'outil Iptables, en lui spécifiant de modifier la table de NAT avec l'option -t nat.

La table des règles de NAT contient 3 listes appelées `chaînes' : chaque règle est examinée dans l'ordre jusqu'à ce que l'une d'elles convienne. Les trois chaînes sont nommées PREROUTING (pour le NAT de destination, lorsque le paquet arrive), POSTROUTING (pour le NAT de source, lorsque le paquet part) et OUTPUT. La troisieme chaîne (OUTPUT) sera ignorée pour l'instant.

Le diagramme suivant devrait illustrer ceci clairement si j'avais le moindre talent artistique :

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

Lorsqu'un paquet traverse chacun des cercles ci-dessus, on observe la connexion à laquelle il est associé. S'il s'agit d'une nouvelle connexion, on examine la chaîne correspondante dans la table de NAT pour voir ce qu'il convient de faire du paquet. La réponse obtenue sera appliquée ensuite à tous les futurs paquets associés à cette connexion.

5.1 Sélection Simple Avec Iptables

Iptables accepte en standard de nombreuses options, listées ci-dessous. Toutes les options avec un double tiret peuvent être abrégées, à condition qu'Iptables puisse les différencier des autres. Si votre noyau contient le module de support d'Iptables, vous devrez charger le module iptables.o en premier : `insmod ip_tables'.

L'option la plus importante ici est la sélection de table avec `-t'. Pour toutes les opérations de NAT, vous aurez à utiliser `-t nat' pour la table NAT. La seconde option indispensable est `-A' pour ajouter une nouvelle règle à la fin d'une chaîne (par exemple `-A POSTROUTING') ou `-I' pour en insérer une au début (par exemple `-I PREROUTING').

Vous pouvez spécifier l'adresse de source (`-s' ou `--source') et de destination (`-d' ou `--destination') du paquet que vous voulez transformer. Ces options peuvent être suivies par une seule adresse IP (par exemple 192.168.1.1), un nom (p.e. www.gnumonks.org), ou une adresse de réseau (par exemple 192.168.1.0/24 ou 192.168.1.0/255.255.255.0).

Pour la correspondance, vous pouvez spécifier une interface d'entrée (`-i' ou `--in-interface') ou de sortie (`-o' ou `--out-interface'), mais celle que vous avez le droit de spécifier dépend de la chaîne contenant la règle : dans PREROUTING, vous ne pouvez sélectionner qu'une interface d'entrée, et dans POSTROUTING (et OUTPUT) qu'une interface de sortie. Si vous vous trompez, Iptables vous renverra une erreur.

5.2 Affinage de la Sélection des Paquets à Marquer

J'ai mentionné plus haut que vous pouviez spécifier une adresse de source et de destination. Néanmoins, si vous omettez l'adresse de source, alors toutes les adresses de source conviendront. Et si vous omettez l'adresse de destination, alors toutes les adresses de destination conviendront.

Vous pouvez aussi spécifier un protocole (`-p' ou `--protocol'), comme TCP ou UDP ; seuls les paquets de ce protocole corresponderont à la règle. Le principal intérêt de spécifier un protocole TCP ou UDP est de disposer alors d'options supplémentaires : précisément `--source-port' et `--destination-port' (abbrégées en `--sport' et `--dport').

Ces options vous permettent de spécifier que seuls les paquets avec un certain port source ou destination corresponderont à 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 l'extension de bibliothèque partagée pour ce protocole). Vous pouvez utiliser des numéros de ports ou un nom issu du fichier `/etc/services'.

Les différentes manières dont vous pouvez sélectionner un paquet sont détaillées dans la page de manuel (man iptables).


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