La cible SNAT est utilisée pour la Traduction d'Adresse Réseau Source, ce qui veut dire que cette cible réécrira l'adresse IP source dans l'en-tête IP du paquet. Exemple, quand plusieurs hôtes doivent partager une connexion Internet. Nous pouvons alors activer le transfert d'IP (IP Forwarding) dans le noyau, et écrire une règle SNAT qui traduira tous les paquets sortants du réseau local vers l'IP source de notre connexion Internet. Sans cela, le monde extérieur ne saurait pas où envoyer les paquets en réponse, car les réseaux locaux utilisent la plupart du temps des adresses IP spécifiées par le IANA et qui sont allouées aux LAN (donc non routables sur l'Internet). Si nous transférons les paquets tels quels, personne sur l'Internet ne saura qu'ils proviennent de nous. La cible SNAT fait toutes les traductions nécessaires pour réaliser ce genre de chose, permettant à tous les paquets quittant notre LAN d'être vus comme provenant d'un hôte unique, qui pourrait être notre pare-feu.
SNAT n'est valide que dans la table nat, à l'intérieur de la chaîne POSTROUTING. C'est, en d'autres termes, la seule chaîne dans laquelle vous pouvez utiliser SNAT. Seul le premier paquet d'une connexion est analysé par SNAT, et ensuite tous les paquets utilisant la même connexion seront également SNATés. De plus, les règles initiales de la chaîne POSTROUTING seront appliquées à tous les paquets du même flux.
Tableau 11.17. Options de la cible SNAT
Option | --to-source |
Exemple | iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 |
Explication | L'option --to-source est utilisée pour spécifier quelle source le paquet doit utiliser. Cette option, la plus simple, prend l'adresse IP que nous voulons utiliser comme adresse IP source dans l'en-tête IP. Si nous voulons faire ceci entre plusieurs adresses IP, nous pouvons utiliser une plage d'adresses, séparées par un tiret. Les numéros IP --to--source peuvent alors ressembler à notre exemple ci-dessus : 194.236.50.155-194.236.50.160. L'IP source pour chaque flux que nous ouvrons sera allouée aléatoirement, et un flux utilisera toujours la même adresse IP pour tous les paquets transitants dans ce flux. Nous pouvons aussi spécifier une plage de ports à utiliser par SNAT. Tous les ports source seront alors confinés aux ports spécifiés. Le bit de port de la règle ressemblera alors à notre exemple, :1024-32000. Ce n'est valide que si -p tcp ou -p udp sont spécifiés quelque part dans la correspondance de la règle en question. Iptables essaiera toujours d'éviter de modifier les ports si possible, mais si deux hôtes tentent d'utiliser les mêmes ports, Iptables redirigera un de ceux-là vers un autre port. Si aucune plage de ports n'est précisée, et si elles sont requises, tous les ports source au dessous de 512 seront redirigés vers d'autres ports en dessous de 512. Ceux entre les ports source 512 et 1023 seront redirigés en dessous de 1023. Tous les autres ports seront redirigés vers 1024 et au dessus. Comme indiqué précédemment, Iptables tentera toujours de conserver les ports source utilisés par la machine établissant la connexion. Notez que ceci n'a rien à voir avec les ports destination, si un client essaie de prendre contact avec un serveur HTTP en dehors du pare-feu, il ne sera pas redirigé vers le port FTP control. |
Note | |
---|---|
Fonctionne avec les noyaux Linux 2.3, 2.4, 2.5 et 2.6. |