
Pont + pare-feu + DSL Mini-HOWTO

Derek Ney

             <derek@hipgraphics.com>

   _Genevive Gracian - _Traduction franaise

   _Xavier Venient - _Relecture de la version franaise

   Version originale du 9 novembre 2000

   Version franaise du 25 novembre 2001

   Configurer un systme Linux de faon  ce qu'il se comporte comme un
   pont et un pare-feu avec une connexion DSL.
     _________________________________________________________________

   _Table des matires_
   1. Introduction

        1.1. L'histoire
        1.2. Nouvelles versions
        1.3. Copyrights

   2. Pontage, pares-feu et connexions DSL

        2.1. Le problme
        2.2. La solution
        2.3. Vue d'ensemble de l'installation
        2.4. Rfrences

   3. Marche  suivre

        3.1. Caractristiques de l'installation prise comme exemple
        3.2. Installation du matriel
        3.3. Configuration du pont
        3.4. Configuration du noyau
        3.5. Assemblage du tout
        3.6. Installation du pare-feu
        3.7. Installation d'une machine locale

   4. Bizarreries et problmes

        4.1. Message trange  l'utilisation d'ipchains -X
        4.2. Interruptions partages

   5. Adaptation franaise

        5.1. Traduction
        5.2. Relecture

1. Introduction

1.1. L'histoire

   L'criture de ce document a dbut le 10 dcembre 1999 par Derey Ney
   <derek@hipgraphics.com> aprs trois jours de frustration avec le
   pontage et le filtrage aprs avoir bascul d'un rseau PPP  un lien
   DSL.
     _________________________________________________________________

1.2. Nouvelles versions

   Les nouvelles versions peuvent tres trouves  www.tldp.org.
     _________________________________________________________________

1.2.1. Historique des versions

   v0.04 (9 novembre 2000)

     * mise  jour pour le nouvel utilitaire de configuration de pont
       bridgex

   v0.03 (24 mars 2000)

     * correction de l'URL pour BRCFG.tgz

   v0.02 (13 dcembre 1999)

     * intgration des corrections de Leonard Dickens (merci Leonard !)

   v0.01 (10 dcembre 1999)

     * version initiale
     _________________________________________________________________

1.3. Copyrights

   (c) 1999, 2000 Derek R. Ney

   Ce document peut tre distribu sous les conditions nonces dans la
   licence LDP  http://www.tldp.org/COPYRIGHT.html.
     _________________________________________________________________

2. Pontage, pares-feu et connexions DSL

   Jusqu'il y a peu de temps, notre rseau tait reli au rseau global
   via PPP par un modem. Avec cette configuration, j'avais install un
   pare-feu utilisant IPChains et cela fonctionnait correctement. Nous
   avons rcemment volu vers une configuration DSL. Je pensais que ce
   serait une bagatelle de simplement basculer mon pare-feu de faon  ce
   qu'il m'isole du rseau entrant associ  la connexion DSL. J'avais
   tort. J'ai mis trois jours avant de parvenir  un rsultat
   oprationnel. J'ai trouv beaucoup d'informations douteuses sur le
   rseau qui m'ont procur bien du dsarroi. Ce mini-HOWTO a t crit
   parce que je souponnais que notre installation serait plutt banale
   dans le futur avec l'extansion de DSL et que je souhaitais aider les
   autres  s'pargner une importante frustration.

   Je pense que ceci est applicable  une connexion modem-cble mais
    c'est vous qui voyez  dans la mesure o je ne connais rien aux
   liaisons par modem-cble.
     _________________________________________________________________

2.1. Le problme

   Le problme que je tente de rsoudre est de de configurer le systme
   de faon  ce que le code du pare-feu dans le noyau (qui est manipul
   par ipchains) soit utilisable pour filtrer les paquets qui vont et
   viennent entre le monde extrieur et le rseau local. J'avais
   galement besoin que certaines machines locales soient  vues  du
   rseau global (bien que filtres au travers du pare-feu de manire
   permanente). Ceci liminait le masquage IP (voir le IP Masquerade
   HOWTO) qui, autrement, serait probablement une solution plus aise. Ce
   n'est pas si simple qu'il y parat.
     _________________________________________________________________

2.2. La solution

   Pour arriver  notre but d'isoler un rseau local du rseau global
   (sur DSL) en utilisant notre linuxette, nous utiliserons deux cartes
   ethernet (NIC). Une de ces cartes est connecte au rseau local,
   l'autre au rseau global. La seule machine qui peut directement
   communiquer avec l'extrieur est la machine Linux. Toutes les autres
   machines de notre rseau local doivent passer par cette dernire
   (pare-feu).

   La configuration logicielle consiste en rsoudre deux problmes :

     * router les paquets entre les rseaux local et global (pontage) ;
     * filtrer les paquets pour en stopper certains lorsqu'ils transitent
       par le pare-feu.

   Le Bridging mini-Howto) donne des instructions dtailles en ce qui
   concerne le premier problme de routage des paquets entre les deux
   parties du rseau (local et global). Ceci fonctionne en positionnant
   les deux cartes ethernet sur le mode  promiscuous  de faon  ce
   qu'elles dtectent les paquets sur chacune des interfaces et
   transfrent ceux-ci quand ils appartiennent  l'autre ct. Ceci se
   fait de manire transparente : les autres ordinateurs sur le rseau ne
   voient mme pas le pont, car celui-ci n'a mme pas d'adresse IP. Mais
   cela ne rsout pas totalement le problme. Je voulais que le pare-feu
   ait une adresse IP (du moins pour l'administrer  distance) et, plus
   ennuyeux, le code du pont dans le noyau interceptait et transfrait
   les paquets AVANT qu'ils ne parviennent au code du pare-feu ce qui
   faisait que celui-ci n'avait aucun effet. Vous pouvez alternativement
   attribuer des adresses IP  vos cartes et continuer  les utiliser
   comme un pont. Bien que le Bridging mini-Howto ne le fait pas (en
   ralit, il utilise l'adresse de loopback), cela fonctionne bien. Cela
   rsout un problme. En ce qui concerne le pare-feu, on se tourne vers
   une rustine sympa pour le noyau  http://ac2i.tzo.com/bridge_filter/
   qui fait en sorte que les rgles du pare-feu soient invoques pour les
   paquets qui ont travers le pont avec une nouvelle rgle  bridgein .
     _________________________________________________________________

2.3. Vue d'ensemble de l'installation

   Ce mini-HOWTO a pour but de vous aider  prendre en mains la situation
   o vous avez une machine Linux configure comme une
   passerelle/pare-feu. Le systme a deux cartes rseau. L'une des cartes
   est connecte au monde extrieur (dans notre cas, un modem DSL) et
   rien d'autre. L'autre carte est connecte  notre rseau local.

   Notez que je n'ai eu d'exprience de ceci que sur mon i386 (ABIT BP6
   MOBO, w/2 clron) avec une RedHat 6.0, un noyau 2.2.13, un modem DSL
   connect  un routeur et deux cartes Net Gear FA310TX. Votre cas peut
   tre diffrent.

   Notez galement que la dmarche propose laissera votre rseau ouvert
    des attaques ventuelles au dmarrage (avant que le pare-feu ne soit
   activ). Si vous tes trs paranoaque, vous devrez prendre des
   mesures pour viter ceci.
     _________________________________________________________________

2.4. Rfrences

   J'ai trouv pas mal d'informations sur internet que j'ai utilise pour
   faire fonctionner les choses. Une partie de cette information tait
   utile mais inapproprie.

   Le Bridging mini-HOWTO a jou un rle dcisif pour la mise en oeuvre.
   Malheureusement sa seule utilisation ne permet pas de mettre en place
   un pare-feu.

   Le Linux Bridge+Firewall mini-HOWTO) me paraissait, au premier abord,
   tre pile ce dont j'avais besoin. Nanmoins, il s'avre que je pense
   qu'il est inappropri. J'ai obtenu un fonctionnement relatif mais, en
   fin de compte, je me suis aperu qu'il n'tait pas ncessaire de
   scinder notre sous-rseau en deux comme il le prconise et je
   n'utiliserai pas cette mthode. Si vous tombez sur ce document,
   considrez-le avec des rserves.

   La rustine Bridge Filter est la cl pour obtenir un bon fonctionnement
   de l'ensemble. Assez bizarrement, l'information sur la page web vous
   redirige vers le Bridge+Firewall mini-HOWTO. Vous n'avez pas besoin de
   mettre en oeuvre les indications du Bridge+Firewall mini-HOWTO pour
   obtenir que les choses fonctionnent. Vous aurez besoin de cette
   rustine.

   Le IPCHAINS HOWTO est essentiel pour la mise en oeuvre du pare-feu en
   lui-mme. Je ne traiterai pas de l'installation du pare-feu dans ce
   document ; seules les choses qui diffrent en raison de la mise en
   oeuvre du pontage seront abordes.
     _________________________________________________________________

3. Marche  suivre

   La dmarche gnrale est la suivante :

     * installer le matriel (et vrifier son bon fonctionnement) ;
     * patcher et configurer le noyau ;
     * configurer le rseau (ifconfig, route, bridging) ;
     * configurer le pare-feu.
     _________________________________________________________________

3.1. Caractristiques de l'installation prise comme exemple

   Tout le long de la procdure, je considrerai une installation avec
   deux cartes ethernet (NIC), un lien extrieur DSL (o le modem DSL est
   connect  une des deux cartes rseau) et un rseau local connect 
   l'autre carte rseau. Arbitrairement, je dsignerai la carte connecte
   au modem DSL par  eth1  et la carte sur le rseau local par
    eth0 . Le nommage des priphriques par le noyau dpend des
   connecteurs sur lesquels ils sont enfichs.

   Je supposerai que l'on vous a assign un sous-rseau d'adresses IP 
   192.168.2.128-191, c'est  dire avec un masque de rseau de
   255.255.255.192, et que le routeur fourni par le fournisseur DSL est 
   l'adresse 192.168.2.129. Ces valeurs sont des exemples arbitraires
   pour illustrer l'installation. J'utiliserai l'adresse 192.168.2.130
   pour le pare-feu (les deux cartes), bien, qu'en fait, vous pouvez
   utiliser des adresses diffrentes pour chacune des deux cartes si vous
   le souhaitez.
     _________________________________________________________________

3.2. Installation du matriel

   Vous aurez besoin de deux cartes ethernet pour faire fonctionner les
   choses. Le plus grand problme que j'ai eu tait que j'avais choisi un
   connecteur au hasard sur ma carte mre pour le seconde carte rseau et
   qu'il s'est avr que ce slot (PCI) partageait une interruption avec
   celui de la premire carte rseau. Je ne croyais pas que c'tait un
   problme (en fait il y a peu d'informations sur ceci et je supposais
   que a fonctionnerait correctement). Cela entranait que les deux
   cartes rseau se dsactivaient silencieusement (sans indiquer
   d'erreur) et arrtaient d'mettre et de recevoir des paquets.
   Naturellement, quand vous procdez  toutes sortes de changements de
   configuration, c'est bien la dernire des choses dont vous avez
   besoin. Je ne sais pas si c'est un problme avec toutes les cartes
   rseau PCI ou seulement avec les ntres mais j'aurais tendance 
   alerter sur les interruptions partages. Le driver tulip, que nous
   utilisons, note l'IRQ de chaque carte dans le syslog au dmarrage. Il
   y a une quantit d'informations ailleurs (reportez-vous au
   Ethernet-HOWTO  la section Utiliser plus d'une carte rseau par
   machine)  propos de la reconnaissance de deux cartes ethernet par le
   noyau en utilisant des options de dmarrage ; nanmoins, je n'ai pas
   besoin de ceci (mon noyau reconnat les deux cartes sans argument).

   Ensuite, vous devez connecter la deuxime carte rseau au modem DSL
   (ou quoi que ce soit d'autre qui vous relie au monde extrieur) et
   vous assurer que cela fonctionne. Vous devriez tre en mesure
    d'ifconfigurer  la seconde carte ethernet sur une adresse IP adhoc
   et pinguer le routeur de l'autre ct du lien. Ceci permet de vrifier
   que vous pouvez envoyer et recevoir des paquets au travers du lien
   DSL. Par exemple, pour le rseau pris en illustration vous faites :

  ifconfig eth1 192.168.2.130 netmask 255.255.255.192 broadcast 192.168.2.191

   pour configurer la carte. Et puis

  ifconfig eth0 down # juste pour s'assurer que cela n'interfre pas avec autre
 chose
  ping 192.168.2.129

   pour tester que vous pouvez bien atteindre le routeur. Pour bien
   faire, vous pourriez aussi vrifier que vous pouvez atteindre les
   machines sur votre rseau local par l'autre carte :

  ifconfig eth1 down # juste pour s'assurer que cela n'interfre pas avec autre
 chose
  ifconfig eth0 up
  ping 192.168.2.x # o x est l'adresse d'un machine sur votre rseau local

    ce point, vous vous tes assur que l'ensemble du matriel
   fonctionne.
     _________________________________________________________________

3.3. Configuration du pont

   En fonction de la version de votre noyau, vous aurez besoin soit de
   l'ancien outil de configuration de pont (BRCFG) pour les noyaux
   antrieurs  la version 2.2.14, soit du nouvel outil de configuration
   (bridgex) pour les noyaux ultrieurs ; ces utilitaires vous permettent
   de contrler la fonction de pontage  l'intrieur du noyau quand
   CONFIG_BRIDGE est activ. _BRCFG_ est distribu sous forme de source
   avec des excutables pr-compils. Je ne sais pas sous quel noyau les
   excutables ont t compils mais j'ai obtenu des rsultats diffrents
   aprs une recompilation avec les fichiers include de mon noyau
   (2.2.13). Malheureusement, pour ce faire, j'ai d les patcher
   lgrement. Voici les rustines :

diff -C 3 -r /tmp/BRCFG/brcfg.c ./brcfg.c
*** /tmp/BRCFG/brcfg.c  Wed Feb 21 19:11:59 1996
--- ./brcfg.c   Wed Dec  8 12:52:23 1999
***************
*** 1,6 ****

! #include <sys/types.h>
! #include <sys/socket.h>
  #include <skbuff.h>

  #include "br.h"
--- 1,6 ----

! #include <types.h>
! #include <socket.h>
  #include <skbuff.h>

  #include "br.h"

   Appliquez la rustine, recompilez _brcfg_ et installez-le dans un
   endroit convenable (j'ai choisi _/usr/bin_).

   Pour les noyaux ultrieurs  la version 2.2.13, vous devez
   dfinitivement utiliser l'utilitaire bridgex. Je ne sais pas s'il
   fonctionne ou non avec des noyaux plus anciens. Remarquez que l'URL
   pour cet utilitaire peut tre trouve dans l'aide de la configuration
   du noyau _/usr/src/linux/Documentation/Configure.help_ ainsi, si l'URL
   mentionne ici est errone, jetez un coup d'oeil dans le fichier
   d'aide (c'est l'aide pour l'item _CONFIG_BRIDGE_. L'archive bridgex
   contient un excutable dj compil mais vous devrez probablement le
   reconstruire en utilisant le Makefile galement prsent. Remarquez que
   l'utilitaire bridgex prend des arguments lgrement diffrents de ceux
   que prend le paquet BRCFG (qui seront dtaills plus tard quand je
   traiterai de la configuration du pont).
     _________________________________________________________________

3.4. Configuration du noyau

   Vous devrez patcher et configurer votre noyau pour le pontage et le
   pont filtrant (de la mme manire que pour le pare-feu, le rseau,
   etc. si vous n'avez pas dj ces fonctionnalits). Les items de
   configuration suivants seront ncessaires (au minimum) :

  CONFIG_EXPERIMENTAL=y
  CONFIG_BRIDGE=y
  CONFIG_FIREWALL=y
  CONFIG_IP_FIREWALL=y

   Vous devriez mettre la main sur la rustine  Bridge Filter  et
   l'appliquer  votre noyau. Recompilez, installez votre noyau puis
   redmarrez.
     _________________________________________________________________

3.5. Assemblage du tout

    ce niveau, vous devriez avoir vos deux cartes rseau en tat de
   fonctionner, un noyau nouvellement reconfigur et _brcfg_ install.
   Maintenant, vous devez construire un script de dmarrage pour
   assembler le tout. J'ai fait cela en utilisant les scripts  faon
   RedHat  (_/etc/rc.d_). J'ai dclar les adresses et masques rseau
   spcifiques dans _/etc/sysconfig/network_ :

 GATEWAY=192.168.2.129          # adresse du routeur DSL
 GATEWAYDEV=eth1                # carte rseau  laquelle le routeur est reli
 ETH0_ADDR=192.168.2.130        # adresse IP de la carte sur le rseau local
 ETH0_MASK=255.255.255.192      # masque du rseau local
 ETH0_BROAD=192.168.2.191       # adresse de diffusion du rseau local
 ETH1_ADDR=192.168.2.130        # adresse IP de la carte ct DSL ; peut tre
                                # diffrente de ETH0_ADDR si vous voulez
 ETH1_MASK=$ETH0_MASK           # masque rseau ct DSL, devrait tre le mme
                                # que sur eth0
 ETH1_BROAD=$ETH1_BROAD         # idem pour l'adresse de diffusion

   Ensuite, j'ai cr un script dans _/etc/rc.d/init.d/bridge_ pour
   installer le pont. J'inclus deux scripts ici. Le premier est utilis
   par le vieil outil BRCF l'autre pour le plus rcent bridgex. D'abord,
   celui pour BRCFG :

#!/bin/sh
#
# bridge      Ce script installe le pontage pour DSL avec BRCFG
#
# description: utilise brcfg pour activer le pontage et configure les cartes
# ethernet
# nom du processus: bridge
# config:

# localisation de la bibliothque de fonctions
. /etc/rc.d/init.d/functions

# localisation de la configuration du rseau
. /etc/sysconfig/network

# voyons comment nous sommes appel
case "$1" in
  start)
        echo -n "configuration du pont: "
        ifconfig eth0 $ETH0_ADDR netmask $ETH0_MASK broadcast $ETH0_BROAD
        ifconfig eth1 $ETH1_ADDR netmask $ETH1_MASK broadcast $ETH1_BROAD
        route add $GATEWAY dev $GATEWAYDEV
        route add default gw $GATEWAY dev $GATEWAYDEV
        ifconfig eth0 promisc
        ifconfig eth1 promisc
        brcfg -enable
        echo
        ;;
  stop)
        # arrt des dmons
        brcfg -disable
        ifconfig eth0 down
        ifconfig eth1 down
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  status)
        ifconfig eth0
        ifconfig eth1
        brcfg
        ;;
  *)
        echo "utilisation: bridge {start|stop|restart|status}"
        exit 1
esac

exit 0

   Le script qui suit est  utiliser avec l'utilitaire de configuration
   de pont bridgex. Notez que bridgex est bien plus configurable que le
   moins jeune BRCFG et que vous devriez jeter un coup d'oeil  la page
   de manuel incluse dans l'archive de bridgex et adapter ce script :

#!/bin/sh
#
# bridge      Ce script installe le pontage pour DSL avec bridgex
#
# description: utilise bridgex pour dmarrer le pontage et configurer les
# cartes ethernet
# nom du processus: bridge
# configuration:

# localisation de la bibliothque de fonctions
. /etc/rc.d/init.d/functions

# localisation de la configuration du rseau
. /etc/sysconfig/network

# voyons comment nous sommes appel
case "$1" in
  start)
        echo -n "configuration du pont: "
        ifconfig eth0 $ETH0_ADDR netmask $ETH0_MASK broadcast $ETH0_BROAD
        ifconfig eth1 $ETH1_ADDR netmask $ETH1_MASK broadcast $ETH1_BROAD
        route add default gw $GATEWAY dev $GATEWAYDEV
        ifconfig eth0 promisc
        ifconfig eth1 promisc
        brcfg start
        brcfg device eth0 enable
        brcfg device eth1 enable
        echo
        ;;
  stop)
        # arrt des dmons
        brcfg stop
        ifconfig eth0 down
        ifconfig eth1 down
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  status)
        ifconfig eth0
        ifconfig eth1
        brcfg
        ;;
  *)
        echo "utilisation: bridge {start|stop|restart|status}"
        exit 1
esac

exit 0

   Le script est excut lors du dmarrage. Il attribue les adresses 
   chacune des cartes rseau, ajoute une route par dfaut qui pointe vers
   le routeur DSL, ajoute une route spcifique vers le routeur DSL,
   positionne chaque carte en mode  promiscuous  et puis active le
   pontage. J'ai cr des liens vers ce script dans les rpertoires
   suivants dans _/etc/rc.d_ :

 /etc/rc.d/rc0.d/K90bridge
 /etc/rc.d/rc1.d/K90bridge
 /etc/rc.d/rc2.d/S11bridge
 /etc/rc.d/rc3.d/S11bridge
 /etc/rc.d/rc4.d/S11bridge
 /etc/rc.d/rc5.d/S11bridge
 /etc/rc.d/rc6.d/K90bridge

   Ceci fait en sorte qu'il s'excute aprs le script de dmarrage du
   rseau. Vous devez dsactiver les autres configurations de eth0 (ou
   eth1) telles que celles qui sont faites dans le script
   _/etc/rc.d/init.d/network_ (en supprimant les fichiers _ifcfg-eth?_ de
   _/etc/sysconfig/network-scripts/_ dans la RedHat).

   Pour tester les choses, je suggre de redmarrer en mode
   mono-utilisateur (en spcifiant  single  comme argument du noyau,
   par exemple, dans lilo  lilo: linux single ) et en excutant les
   scripts de dmarrage de _/etc/rc.d/rc3.d_ un par un jusqu' ce que
   vous arriviez au dmarrage du pont. Dmarrez le pont et alors vrifiez
   si vous pouvez atteindre des machines (vous utiliserez certainement
    _ping -n_  pour ceci, afin de maintenir le serveur de noms hors
   jeu) :

     * pinguez le routeur DSL ;
     * pinguez une machine locale ;
     * pinguez une machine sur le rseau global.

   Si vous pouvez pinguer toutes ces localisations, il y a de fortes
   chances que tout se passe bien. Remarquez que le pont met un petit
   moment  dmarrer. Vous pouvez contrler son tat en utilisant la
   commande _brcfg_ sans option.
     _________________________________________________________________

3.6. Installation du pare-feu

   Vous aurez besoin d'installer un pare-feu (en supposant que vous en
   voulez un) pour vous protger des accs non autoriss. La rustine
    Bridge Filter  vous permet d'utiliser une nouvelle rgle intgre
    bridgein  avec ipchains. Cette rgle est utilise  chaque fois
   qu'un paquet doit tre redirig de eth0 vers eth1 ou inversement. La
   rgle bridgein n'est pas utilise quand le paquet est destin au
   pare-feu lui mme ; vous devez utiliser la rgle input pour cela. Je
   ne tenterai pas de rentrer en dtail dans l'installation du pare-feu.
   Rfrez-vous au IPCHAINS HOWTO pour ceci.
     _________________________________________________________________

3.7. Installation d'une machine locale

   Pour chacune des machines de votre rseau local, vous devez simplement
   lui indiquer une adresse IP, un masque de rseau et utiliser le
   routeur DSL comme une passerelle (route par dfaut) le pont filtrant
   transfrera les paquets vers et depuis le routeur DSL.
     _________________________________________________________________

4. Bizarreries et problmes

4.1. Message trange  l'utilisation d'ipchains -X

   La rustine qui ajoute la rgle intgre bridgein  ipchains fait que
   la commande de suppression de toutes les chanes, _ipchains -X_,
   produit l'erreur suivante :

 ipchains: Device or resource busy

   d'autant que je sache, ceci n'est pas grave. Je souponne que ipchains
   ne comprend pas que la nouvelle rgle d'entre de pont est prdfinie.
     _________________________________________________________________

4.2. Interruptions partages

   Comme je l'ai mentionn dans la section Section 3.2, au moins pour les
   cartes PCI, vous ne devez pas partager d'interruptions entre deux
   cartes (et probablement aussi avec aucun autre priphrique).
     _________________________________________________________________

5. Adaptation franaise

5.1. Traduction

   La traduction franaise de ce document a t ralise par Genevive
   Gracian <ggracian@free.fr>.
     _________________________________________________________________

5.2. Relecture

   La relecture de ce document a t ralise par XavierVenient
   <xvenient@free.fr>.
