Guide pratique de l'IP masquerade simplifié

Version française du Masquerading made simple HOWTO

Eddie Mechling

Adaptation française 

Version : 0.09.fr.1.0

10 octobre 2007

Historique des versions
Version 0.09.fr.1.02007-10-07EM
Première traduction française
Version 0.092004-07-21TS
Version 0.082002-07-11JPT
Version 0.072002-02-27JPT
Version 0.062001-09-08JPT
Version 0.052001-09-07JPT
Version 0.042001-09-01JPT
Version 0.032001-07-06JPT

Résumé

Ce document décrit l'activation du masquage IP (IP Masquerading) sur une machine hôte Linux. Le masquage d'adresse IP est une forme de traduction d'adresse réseau (NAT), permettant aux ordinateurs d'un réseau privé n'ayant aucune adresse IP d'accéder à Internet via l'adresser IP unique d'une machine Linux.


Table des matières

1. Avant-propos
1.1. Contacter les auteurs
1.2. Commentaires et corrections
1.3. Nouvelles versions de ce document
2. Introduction
3. Sommaire (J'aime bien débuter par un sommaire !)
4. Version un peu plus détaillée
5. Instructions post-installation
6. FAQ - Foire aux réclama**** Questions

Ce guide pratique ne remplace pas le « guide pratique du masquage IP » (IP-Masquerade-HOWTO), mais le complète. Ces deux documents devraient être lus en parallèle. Je n'y ai inclu aucun élément déjà détaillé dans cet autre guide pratique, ni aucune explication sur leur fonctionnement et leur signification. Veuillez vous reporter à l'adresse http://ipmasq.webhop.net/ et lisez le « Guide pratique du masquerade standard », pour une bien meilleure aide.

Tous les auteurs sont joignables sur le canal #debian sur irc.opensource.net

John Tapsell (JohnFlux) est le responsable officiel.

Contactez-moi (John Tapsell) pour toutes demandes, réactions, réclamations, rendez-vous, etc. !!!!!!!!!

Impudemment tiré du travail de David Ranch -

Ce document est placé sous la GNU Free Documentation License, consultable sur

http://www.gnu.org/copyleft/fdl.html pour la version originale. La version française est consultable sur http://www.rodage.org/gpl-3.0.fr.html. Attention ! La version française de la Gnu Free Documentation License est une version non officielle, traduite afin d'améliorer la compréhension de cette licence. Elle ne fait pas foi au-niveau juridique !

Cette introduction est volontairement courte et ciblée.

Admettons que vous aviez un réseau que vous voulez raccorder à l'extérieur :

Considérons que l'interface réseau externe est eth0, l'adresse IP 123.12.23.43 et l'interface réseau interne est eth1 :

$> modprobe ipt_MASQUERADE # Si cela échoue, essayez tout-de-même de continuer
$> iptables -F; iptables -t nat -F; iptables -t mangle -F
$> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43
$> echo 1 > /proc/sys/net/ipv4/ip_forward

Ou pour une connexion par modem :

$> modprobe ipt_MASQUERADE # Si cela échoue, essayez tout-de-même de continuer
$> iptables -F; iptables -t nat -F; iptables -t mangle -F
$> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
$> echo 1 > /proc/sys/net/ipv4/ip_forward

Pour sécuriser cela :

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$> iptables -A INPUT -m state --state NEW -i ! eth0 -j ACCEPT
$> iptables -P INPUT DROP   #seulement si les deux commandes précédentes ont abouties
$> iptables -A FORWARD -i eth0 -o eth0 -j REJECT

Ou pour une connexion par modem (avec eth0 comme interface réseau interne) :

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT
$> iptables -P INPUT DROP   #seulement si les deux commandes précédentes ont abouties
$> iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT

Et voilà ! Pour visualiser les règles tapez « iptables -t nat -L »

Compilation du noyau : (Utilisez un noyau 2.4.x ou supérieur)

Le noyau doit inclure les supports suivants :

Tout d'abord, si les modules iptables et masq ne sont pas compilés dans le noyau ni installés, mais présents en tant que modules, il faut les installer. Si vous chargez le module ipt_MASQUERADE,les modules ip_tables, ip_conntrack et iptable_nat seront aussi chargés.

$> modprobe ipt_MASQUERADE

Que votre réseau interne soit vaste, ou bien que vous vouliez connecter deux ou trois machines sur Internet, cela ne fera aucune différence dans tous les cas.

Ok, je vais suppposer que vous n'avez aucune autre règle à rajouter, donc vous tapez :

$> iptables -F; iptables -t nat -F; iptables -t mangle -F

Si vous obtenez un message d'erreur indiquant "can't find iptables", téléchargez-le et installez-le. Si le message d'erreur indique "no such table 'nat'", recompilez le noyau avec le support nat. Si le message d'erreur indique "no such table as 'mangle'", ne vous inquiétez pas, cette table n'est pas nécessaire pour le Masquerading. Si le message d'erreur indique "iptables is incompatible with your kernel", téléchargez une version de noyau supérieure à 2.4 et compilez-le avec le support iptables.

Ensuite si vous avez une adresse IP statique(Par exemple une interface réseau n'utilisant pas le DHCP) :

$> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 123.12.23.43

ou pour une adresse dynamique (Par exemple un modem rtc - vous devez appelez un numéro tout d'abord) :

$> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Enfin, afin d'indiquer au noyau que vous voulez activer le routage de packets : ( A faire après chaque redémarrage de la session - pas trop contraignant)

$> echo 1 > /proc/sys/net/ipv4/ip_forward

Une fois vérifié que tout fonctionne (voir section Post-install) vous n'allez autoriser l'IP masquerade que pour le réseau interne - vous ne souhaitez pas autoriser des personnes sur Internet à l'utiliser après tout :)

En premier lieu, autorisez toutes les connections existantes, ou les connections en dépendant ( par exemple un serveur ftp vous renvoyant une réponse)

$> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Si vous obtenez une erreur, vous n'avez probablement pas activé le marquage d'état sur les paquets dans le noyau - vous devrez le recompiler avec cette option. Nous allons ensuite n'autoriser que les nouvelles connections venant de notre réseau interne (réseau interne ou local). Remplacez ppp0 par eth0, ou par le nom de votre interface réseau externe (Le caractère ! signifie "tout sauf")

$> iptables -A INPUT -m state --state NEW -i ! ppp0 -j ACCEPT

Et bloquez maintenant tout le reste :

$> iptables -P INPUT DROP   #seulement si les deux commandes précédentes ont abouties

Si l'une des deux premières commandes échoue, cette règle empêchera le masquerading de fonctionner Pour annuler cette règle : "iptables -P INPUT ACCEPT".

Cela devrait fonctionner maintenant. N'oubliez pas de :

Pour le tester :

Où eth0 est l'interface réseau externe, et 123.12.23.43 est l'adresse ip de ce client.