                  Guide pratique de l'IP masquerade simplifi

                       Nouvelles versions de ce document

Version franaise du Masquerading made simple HOWTO

  John Tapsell

      <[1]tapselj0@cs.man.ac.uk>

  Thomas Spellman

      <[2]thomasNO@SPAMresonancePLEASE.org>

  Matthias Grimm

      <[3]DeadBull@gmx.net>

   Version : 0.09.fr.1.0

   10 octobre 2007

   Revision History
   Revision 0.09.fr.1.0          2007-10-07          Revised by: EM
   Premire traduction franaise
   Revision 0.09                 2004-07-21          Revised by: TS
   Revision 0.08                 2002-07-11          Revised by: JPT
   Revision 0.07                 2002-02-27          Revised by: JPT
   Revision 0.06                 2001-09-08          Revised by: JPT
   Revision 0.05                 2001-09-07          Revised by: JPT
   Revision 0.04                 2001-09-01          Revised by: JPT
   Revision 0.03                 2001-07-06          Revised by: JPT

   Ce guide pratique NE REMPLACE PAS le 'guide pratique de l'IP masquerade',
   mais le complte. Ces deux documents devraient tre lus en parallle. Je
   n'y ai inclu aucun lment dj dtaill dans cet autre guide pratique, ni
   aucune explication sur leur fonctionnement et leur signification. Veuillez
   vous reporter  l'adresse [4]http://ipmasq.webhop.net/ et lisez le 'guide
   pratique du masquerade standard', pour une bien meilleure aide.

   Rsum

   Ce document dcrit l'activation du dispositif dIP Masquerading sur une
   machine hte Linux. Le masquage d'adresse IP est une forme de traduction
   d'adresse rseau ( Network Address Translation ou NAT en anglais
   ),permettant aux ordinateurs d'un rseau priv n'ayant aucune adresse IP
   d'accder  Internet via l'adresser IP unique d'une machine Linux.

   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, ractions,
   rclamations, rendez-vous, etc. !!!!!!!!!

   Impudemment tir du travail de David Ranch - <[5]dranch@trinnet.net>

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

   [6]http://www.gnu.org/copyleft/fdl.html pour la version originale. La
   version franaise est consultable sur
   [7]//="http://www.rodage.org/gpl-3.0.fr.html">
   http://www.rodage.org/gpl-3.0.fr.html. Attention! La version franaise de
   la Gnu Free Documentation License est une version non officielle, traduite
   afin d'amliorer la comprhension de cette licence. Elle ne fait pas foi
   au-niveau juridique!

   --------------------------------------------------------------------------

Introduction

   Cette introduction est volontairement courte et cible.

   Admettons que vous aviez un rseau que vous voulez raccorder 
   l'extrieur:

   --------------------------------------------------------------------------

Sommaire (J'aime bien dbuter par un sommaire!)

   Considrons que l'interface rseau externe est eth0, l'adresse IP
   123.12.23.43 et l'interface rseau interne est eth1 :

 $> modprobe ipt_MASQUERADE # Si cela choue, essayez tout-de-mme 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-mme 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 scuriser 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 prcdentes ont abouties
 $> iptables -A FORWARD -i eth0 -o eth0 -j REJECT

   Ou pour une connexion par modem (avec eth0 comme interface rseau
   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 prcdentes ont abouties
 $> iptables -A FORWARD -i ppp0 -o ppp0 -j REJECT

   Et voil! Pour visualiser les rgles tapez "iptables -t nat -L"

   --------------------------------------------------------------------------

Version un peu plus dtaille

   Compilation du noyau: (Utilisez un noyau 2.4.x ou suprieur)

   Le noyau doit inclure les supports suivants:

     * Dans la section Networking Options

          * Network packet filtering (CONFIG_NETFILTER)

     * Section Networking Options->Netfilter Configuration

          * Connection tracking (CONFIG_IP_NF_CONNTRACK)

          * FTP Protocol support (CONFIG_IP_NF_FTP)

          * IP tables support (CONFIG_IP_NF_IPTABLES)

          * Connection state match support (CONFIG_IP_NF_MATCH_STATE)

          * Packet filtering (CONFIG_IP_NF_FILTER)

               * REJECT target support (CONFIG_IP_NF_TARGET_REJECT)

          * Full NAT (CONFIG_IP_NF_NAT)

               * MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE)

               * REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT)

          * Packet mangling (CONFIG_IP_NF_MANGLE)

          * LOG target support (CONFIG_IP_NF_TARGET_LOG)

   Tout d'abord, si les modules iptables et masq ne sont pas compils dans le
   noyau ni installs, mais prsents 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 chargs.

 $> modprobe ipt_MASQUERADE

   Que votre rseau interne soit vaste, ou bien que vous vouliez connecter
   deux ou trois machines sur Internet, cela ne fera aucune diffrence dans
   tous les cas.

   Ok, je vais suppposer que vous n'avez aucune autre rgle  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",
   tlchargez-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 inquitez pas, cette
   table n'est pas ncessaire pour le Masquerading. Si le message d'erreur
   indique "iptables is incompatible with your kernel", tlchargez une
   version de noyau suprieure  2.4 et compilez-le avec le support iptables.

   Ensuite si vous avez une adresse IP statique(Par exemple une interface
   rseau 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 numro 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 aprs chaque redmarrage de la session - pas trop
   contraignant)

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

   Une fois vrifi que tout fonctionne (voir section Post-install) vous
   n'allez autoriser l'IP masquerade que pour le rseau interne - vous ne
   souhaitez pas autoriser des personnes sur Internet  l'utiliser aprs tout
   :)

   En premier lieu, autorisez toutes les connections existantes, ou les
   connections en dpendant ( par exemple un serveur ftp vous renvoyant une
   rponse)

 $> 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 rseau interne (rseau interne ou local).
   Remplacez ppp0 par eth0, ou par le nom de votre interface rseau externe
   (Le caractre ! 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 prcdentes ont abouties

   Si l'une des deux premires commandes choue, cette rgle empchera le
   masquerading de fonctionner Pour annuler cette rgle : "iptables -P INPUT
   ACCEPT".

   --------------------------------------------------------------------------

Instructions post-installation

   Cela devrait fonctionner maintenant. N'oubliez pas de :

     * Configurer toutes les machines du rseau interne afin d'indiquer comme
       passerelle l'adresse rseau unique de la machine Linux. (Sous Windows,
       clic droit sur le voisinage rseau ->proprits->connexion au rseau
       local -> proprits -> Protocol Internet (TCP/IP) -> passerelle, et
       remplacez-la par l'adresse IP interne de la machine Linux.)

     * Configurer tous vos clients afin d'utiliser le serveur proxy http de
       votre fournisseur d'accs si vos clients en ont un, et utiliser un
       proxy en mode transparent (ATTENTION - Certains rapports font tat de
       proxy en mode transparent engendrant un ralentissement trs important
       sur les trs grands rseaux ), ou activez le squid sur votre
       passerelle Linux (ceci est facultatif mais prfrable pour les grands
       rseaux)

     * Spcifier un serveur de DNS sur les machines clientes. Sinon vous
       obtiendrez un message d'erreur indiquant 'cannot resolve address' etc.
       Si la rsolution d'adresse DNS fonctionnait (adresse URL
       fonctionnelle) avant d'avoir configur le MASQUERADING, cela signifie
       que le serveur DHCP de votre fournisseur d'accs n'arrive plus  vous
       indiquer quelle est l'adresse DNS.

       [Apart] Je me demande si vous ne pourriez pas simplement envoyer un
       broadcast DHCP qui sera achemin vers le serveur dns ( et vers le
       proxy http pendant qu'on y est) sans avoir  configurer un serveur
       DHCP (ou mme si vous le faites). Quelqu'un pourrait-il me renseigner
        ce sujet? :)

       Merci  Richard Atcheson pour me l'avoir fait remarquer

     * A prsent, vous devriez commencer  scuriser un peu tout cela!
       Premirement, dsactivez le routage : "iptables -P FORWARD DROP", puis
       apprenez  utiliser les rgles de filtrage iptables, /etc/hosts.allow
       et /etc/hosts.deny afin de scuriser votre systme. ATTENTION -
       N'essayez pas d'appliquer ces rgles iptables avant d'avoir un
       masquerading oprationnel. Vous devez explicitement autoriser chaque
       transfert de paquet si vous paramtrez la dernire rgle avec l'option
       DENY. (Annulez avec "iptables -P FORWARD ACCEPT")

     * Autorisez les accs provenant d'Internet pour chaque service.

       Par exemple, pour autoriser l'accs au serveur web, vous faites:

 $> iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT
 $> iptables -A INPUT --protocol tcp --dport 443 -j ACCEPT

       Pour autoriser l'authentification ( Se connecter sur les channels IRC
       etc...), faites

 $> iptables -A INPUT --protocol tcp --dport 113 -j ACCEPT

   Pour le tester:

     * Essayez de vous connecter sur Internet depuis une machine cliente en
       utilisant une adresse IP. L'adresse IP de Google est 64.233.183.103
       (enfin, l'une d'entre elles) et vous devriez obtenir une rponse en
       retour Par exemple "ping 64.233.183.103" "lynx 64.233.183.103".

     * Essazyez une connexion par nom, par exemple "ping google.fr" "lynx
       google.fr" ou depuis Internet Explorer / netscape.

   O eth0 est l'interface rseau externe, et 123.12.23.43 est l'adresse ip
   de ce client.

   --------------------------------------------------------------------------

FAQ - Foire aux rclama**** Questions

     * Comment lister les rgles appliques?

       - Essayez

 $> iptables -L
 $> iptables -t nat -L

     * Je ne peux rsoudre les adresses IP! Je tape 'www.microsoft.com' et
       cela m'indique qu'il ne le trouve pas!

       - Assurez-vous d'avoir ajout l'adresse IP du serveur dns sur les
       machines clientes

     * Cela ne fonctionne pas! Il ne supporte pas iptables / NAT / SNAT /
       MASQ

       - Tlchargez le dernier noyau et compilez-le avec le support iptables
       et full NAT.

     * Cela ne marche pas! Le masquerading ne fonctionne pas du tout! Meurs
       pourriture!

       - Essayez echo 1 > /proc/sys/net/ipv4/ip_forward

     * Cela ne fonctionne pas! Je ne peux plus utiliser le rseau et je vous
       hais!

       - Essayez

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

       (Toutes les rgles sont effaces) puis redmarrez les autres rgles
       iptables.

       - Essayeziptables -P FORWARD ACCEPT

     * Cela ne marche toujours pas!

       - Hmm, la commande "dmesg | tail" vous renvoie-t'elle des erreurs? ou
       bien "cat /var/log/messages | tail" ? Comme je le crains...

     * Cela ne renvoit rien. Et cela ne fonctionne toujours pas!

       - Je ne sais pas... mais vous devriez est capable de :

        1) pinguer l'extrieur depuis la passerelle
         2) pinguer les machines locales depuis la passerelle
         3) pinguer la passerelle depuis les machines locales

       Et cela avant que vous n'appliquiez le masquerading

     * O dois-placer ces trucs?

       - Dans le fichier /etc/network/interfaces, ou firewall.rc. Si vous le
       placez dans le fichier interfaces, mettez le avant l'activation de
       l'interface rseau externe, et placez "iptables -t nat -F" aprs la
       dsactivation de celle-ci.

     * How do I get it to only bring the ppp up on demand?

       - Considrant que l'adresse IP de votre passerelle FAI est 23.43.12.43
       pour le bien-fond de l'argument, then rajoutez une ligne comme
       celle-ci:

       :23.43.12.43

        la fin du fichier/etc/ppp/peers/provider. (Pour une adresse IP
       dynamique). Pour une adresse IP statique :
       external.ip.number:23.43.12.43 )

       A la fin de ce fichier, rajoutez une nouvelle ligne:

       demand

       Le dmon pppd restera en arrire-plan pour relancer la connection si
       elle est dsactive, jusqu' ce que vous faites un "ifdown ppp0" ou un
       "poff",  moins que vous n'ajoutiez une option "nopersist" , dans
       chaque cas pppd s'arrtera une fois la connection active. Vous pouvez
       galement ajouter une ligne "idle 600" pour dconnecter aprs 10
       minutes d'inactivit.

     * La connection reste inactive!

       - Tout d'abord, avez-vous effectu la procdure de connection? Est-ce
       que cela fonctionne comme cela est suppos? Vrifiez le
       fichier/etc/ppp/peers/provider, et assurez-vous que votre connection
       marche bien avant d'essayer le masquerading.

       - Deuximement, si cela ne marche pas ( cela m'est arriv ), cela
       devient peut-tre trange, et vous devrez revenir  un noyau 2.4.3 et
       voir si cela marche  la place.. je ne sais pas pourquoi.

     * Je n'aime pas faire cela moi-mme! Je voudrais un script tout fait,
       une interface graphique.

       - Bien sr: [8]http://shorewall.sourceforge.net/

       A dguster sans restrictions!

     * Dois-je considrer les modems comme ayant une adresse IP statique ou
       dynamique?

       - Bonne question.. Vous devriez la placer en dynamique.

     * Dois-je considrer les cartes rseaux DHCP comme ayant des adresses IP
       statiques ou dynamiques?

       - Elles sont dynamiques.

     * Comment traiter les services entrants?

       - Essayez de laisser passer ou de rediriger les requtes en provenance
       de ces ports IP - encore une fois, assurez-vous de les bloquer si
       ncessaire.

     * Depuis les machines clientes, je peux pinguer l'adresse IP externe de
       la passerelle Linux, mais je ne peux accder  internet.

       - Okay, essayez un "rmmod iptable_filter" - Plus d'info lorsque je les
       recevrai.

       - Assurez-vous de ne pas avoir activ le routage ou la passerelle -
       pour vrifier l'activation : "ps aux | grep -e routed -e gated".

       - Reportez-vous au site [9]http://ipmasq.webhop.net/

     * Comment visualiser les connections tablies? Avec netstat...

       - Essayez la commande cat /proc/net/ip_conntrack

     * Je dsire plus d'information sur le filtrage, le routage et autres
       trucs!

       - Lisez le Guide Pratique du routage avanc
       http://ftp.traduc.org/doc-vf/HOWTO/telechargement/html-1page/Adv-Routing-HOWTO.html

     * Ce guide pratique est une foutaise! Comment puis-je engueler le gars
       qui l'a crit?

       - Allez sur le canal #debian sur irc.opensource.net, et dnichez
       JohnFlux. - Envoyez-moi un email (JohnFlux)  tapselj0@cs.man.ac.uk

     * Cet How-To est nul! Comment puis-je obtenir de meilleurs versions?

       - Essayez [10]http://ipmasq.cjb.net

       - Consultez la LDP Masq-HOWTO.

     * Sur quoi d'autres travaillez-vous?

       Actuellement j'cris un guide simplifi pour Linux sur des missiles
       anti-missile. Il n'existe pas de bons guides pour dbutants concernant
       la protection de votre systme en cas d'attaque nuclaire Les gens
       semblent penser que c'est une science arme ou autre..
