
Associer un pont Ethernet et netfilter

Version franaise du _Ethernet Bridge + netfilter Howto_

Nils Radtke

   <Nils.Radtke_@_Think-Future.de>

   _Franois Romieu - _Traduction franaise

   _Guillaume Lelarge - _Relecture de la version franaise
   0.2.fr.1.0

   2003-03-09
   _Historique des versions_
   Version 0.2.fr.1.0 2003-03-09 Revu par : FR
   Premire traduction franaise
   Version 0.2        2002-10-08 Revu par : NR
   Ajout de la partie d'exemple de configuration et d'indications dans la
   configuration du routage et le test du routage respectivement.
   Version 0.1        2002-09-19 Revu par : NR
   Mise  jour du lien vers ebtables dans la section des  Thmes
   voisins . Ajout d'une remarque ayant trait aux messages de
   dverminage des faux positifs de br_nf

   La mise en place d'un pont Ethernet permet d'ajouter une entit
   d'audit ou de rgulation  un rseau de faon transparente. Une telle
   installation n'impose aucun changement  la topologie du rseau
   d'accueil. Elle s'effectue en connectant le pont Ethernet entre le
   rseau  analyser et l'lment responsable du routage (l'quipement
   connect  l'Internet).
     _________________________________________________________________

   _Table des matires_
   1. Introduction
   2. Introduction
   3. Logiciels requis

        3.1. Noyau Linux
        3.2. L'utilitaire brctl

   4. Mise en service de Linux

        4.1. Mise en service du pont
        4.2. Configuration du routage

   5. Test du pontage Ethernet

        5.1. Configuration de test
        5.2. Ping le, Max !
        5.3. Exemple de configuration
        5.4. Remarque

   6. Liens

        6.1. Pontage Ethernet
        6.2. Thmes voisins

1. Introduction

   La version originale de ce guide pratique est disponible dans d'autres
   formats. Pour le tlchargement, nous vous recommandons cette archive
   tar. La version originale de ce document est publi par le Projet de
   documentation Linux (LDP).

   La dernire version franaise de ce document est disponible sur le
   site du projet de traduction traduc.org.

   Pour ceux qui sont  la recherche d'une traduction, il existe aussi
   une version version allemande !
     _________________________________________________________________

2. Introduction

   Les ponts Ethernet joignent de faon transparente plusieurs segments
   Ethernet.

   Un pont Ethernet distribue les trames qui se prsentent  un port aux
   autres ports. Il l'effectue de faon intelligente : une fois qu'il
   sait grce  partir de quel port joindre une interface d'adresse MAC
   donne, la trame ne sera mise que sur le port correspondant sans
   polluer les autres segments.

   Des interfaces Ethernet peuvent s'ajouter  une interface existante et
   devenir des ports (logiques) de l'interface du pont.

   L'emploi d'un dispositif de type netfilter au dessus d'un pont rend le
   systme capable d'effectuer du filtrage. On obtient ainsi un filtrage
   transparent. Aucune adresse IP n'est mme ncessaire. Il est bien sr
   possible d'en affecter une  l'interface de pontage  des fins de
   maintenance (via ssh :o) ).

   L'intrt du dispositif est vident. La transparence pargne 
   l'administrateur la charge de reprise de la topologie rseau. Les
   utilisateurs ne remarquent pas l'existence du pont mais les connexions
   sont bloques. Enfin, la transition ne perturbe pas le fonctionnement
   oprationnel (qu'on se figure un rseau o la perte de connectivit
   rseau cote cher !).

   L'autre cas courant concerne les personnes connectes  l'Internet au
   moyen d'un routeur ddi. Les fournisseurs d'accs ne partagent gure
   les privilges d'administration sur les quipements lous et le client
   ne peut donc pas modifier la configuration. Le client a cependant un
   rseau dont il ne veut pas reprendre toute la configuration. Il n'est
   effectivement pas oblig de le faire s'il a recours  un pont.
     _________________________________________________________________

3. Logiciels requis

   La configuration logicielle suivante est ncessaire sur l'hte de
   pontage conformment  notre terrain de test.
     _________________________________________________________________

3.1. Noyau Linux

   La prise en charge du pontage Ethernet est disponible en standard 
   partir du noyau _2.4.18_. Aucun ajout n'est requis.

   Pour disposer de netfilter et pouvoir se servir d'iptables, il faut
   toutefois appliquer un supplment de code. Le ncessaire se trouve
   dans la page sourceforge du pontage Ethernet.

root@bridge:~> cd /usr/src/
root@bridge:~> wget -c http://bridge.sourceforge.net/devel/bridge-nf/bridge-nf-
0.0.7-against-2.4.18.diff
root@bridge:~> cd /usr/src/linux/
root@bridge:~> patch -p1 -i ../bridge-nf/bridge-nf-0.0.7-against-2.4.18.diff

   Une fois le noyau standard rectifi, on active les options de
   configuration adquates du noyau. On peut se reporter au document
   suivant pour la mise au point d'un noyau personnel :
   CD-Net-Install-HOWTO, bote  outils. Oui, c'est encore en allemand.
   Je corrigerai a  l'occasion. Pour l'instant, dans :

           Code maturity level options

   on active :

           [*] Prompt for development and/or incomplete code/drivers

   et dans :

           Loadable module support

        [*] Enable loadable module support
        [*]   Set version information on all module symbols
        [*]   Kernel module loader

   Jusqu'ici, tout va bien.  prsent, dans :

           Networking options

   on active :

        [*] Network packet filtering (replaces ipchains)
        [*]   Network packet filtering debugging

   De mme, dans :

             IP: Netfilter Configuration  --->

   on choisit tout ce qui est souhait . Enfin, on active :

           [M] 802.1d Ethernet Bridging

   et  [1]  :

           [*]   netfilter (firewalling) support

   Il ne reste plus qu' excuter un cycle :

   root@bridge:~> make dep clean bzImage modules modules_install

   C'est tout. On n'oubliera pas d'diter le fichier /etc/lilo.conf en
   consquence avant de taper:

root@bridge:~> lilo -t
root@bridge:~> lilo
root@bridge:~> reboot

   Note

   Pourquoi ne pas identifier le noyau comme destin au pontage ? On
   dite le Makefile de plus haut niveau dans les sources du noyau et on
   modifie la ligne qui comprend _EXTRAVERSION =_. On peut la positionner
    _bridge_ par exemple. Une fois l'tape _modules_install_ effectue,
   les modules se trouveront dans le rpertoire
   /lib/modules/2.4.18bridge.
     _________________________________________________________________

3.2. L'utilitaire brctl

   Une fois le noyau capable de jouer les ponts Ethernet et de supporter
   netfilter, on prpare l'utilitaire brctl. brctl est l'outil de
   configuration pour le pontage. On tlcharge les sources du paquetage
   puis on le dcompresse et on se positionne dans le rpertoire cr.

root@bridge:~> wget -c http://bridge.sourceforge.net/bridge-utils/bridge-utils-
0.9.5.tar.gz
root@bridge:~> tar xvzf bridge-utils-0.9.5.tar.gz
root@bridge:~> cd bridge-utils-0.9.5

   Il est temps de lire le fichier README ainsi que ceux qui se trouvent
   dans le rpertoire doc/. On peut alors lancer une commande make.
   L'excutable brctl/brctl qui en rsulte est  copier dans le
   rpertoire /sbin/.

root@bridge:~> make
root@bridge:~> cp -vi brctl/brctl /sbin/

   On peut  prsent passer  la section d'installation.
     _________________________________________________________________

4. Mise en service de Linux

4.1. Mise en service du pont

   Linux doit tre mis au courant de l'existence du pont. On commence
   donc par rclamer une interface de pontage Ethernet virtuelle (
   excuter sur la machine _bridge_, voir la configuration de test) :

   root@bridge:~> brctl addbr br0

   Le protocole d'tablissement d'arbre (Spanning Tree) n'est pas
   ncessaire. On suppose qu'il n'y a qu'un seul routeur. Une boucle est
   donc peu probable. La fonctionnalit correspondante peut donc tre
   dsactive. Le bavardage rseau diminue alors.

   root@bridge:~> brctl stp br0 off

   Aprs cette phase prparatoire, on lance enfin quelques commandes
   intressantes. On ajoute les interfaces Ethernet physiques en les
   attachant  l'interface de pontage virtuelle _br0_ qui vient d'tre
   cre :

root@bridge:~> brctl addif br0 eth0
root@bridge:~> brctl addif br0 eth1

    prsent les interfaces Ethernet sont chacune devenues une extrmit
   du pont. Certes, elles taient et elles sont toujours l (on peut les
   voir :o) ) mais comme elles appartiennent au pont, elles n'ont plus
   besoin de leur adresse IP. On leur retire donc celle-ci :

root@bridge:~> ifconfig eth0 down
root@bridge:~> ifconfig eth1 down
root@bridge:~> ifconfig eth0 0.0.0.0 up
root@bridge:~> ifconfig eth1 0.0.0.0 up

   Parfait, on dispose donc  prsent d'une station sans adresse IP. Si
   ce n'tait pas dj le cas, il est temps de passer sur une console
   locale  la machine pour la configurer. Une console srie est la
   bienvenue.

   Note

   Option : On affecte une adresse IP  l'interface logique et on
   l'active :

   root@bridge:~> ifconfig br0 10.0.3.129 up

   C'est tout. Il est conseill de s'attarder sur une remarque
   importante !
     _________________________________________________________________

4.2. Configuration du routage

   Dans le cas de la configuration d'un passerelle, on active la
   transmission de paquets du noyau Linux :

   root@bridge:~> echo "1" > /proc/sys/net/ipv4/ip_forward

   La machine dispose dj d'une adresse IP mais n'a aucune route par
   dfaut. On corrige ce manque  :

   root@bridge:~> route add default gw 10.0.3.129

   La connectivit rseau devrait tre normale, depuis, vers et au
   travers de la passerelle.
     _________________________________________________________________

5. Test du pontage Ethernet

5.1. Configuration de test

   On part de la situation suivante ou d'un schma analogue :

                                                           /\
          Ethernet            Ethernet             ATM    /  -/\
+---------+       +---------+          +---------+     /-/      !
| Station |-------|  Pont   |----------| Routeur |-----| Inter-  \
+---------+       +---------+          +---------+     \  net  ---|
         ^        ^         ^          ^                \     /
         |        |         |          |                 \---/
        eth0     eth0      eth1       if0                  ^
         |        |         |          |                   |
      10.0.3.2   rien/10.0.3.1      195.137.15.7   le reste du monde
                  \         /
                   \       /
   ^                \-br0-/
   |                                      ^             ^
   |                   ^                  |             |
   |                   |                  |             |
 perso               perso             tranger      agressif

   Les possibilits d'administration sont limites aux quipements
   marqus _perso_. Le routeur, et l'Internet, sont inaccessibles.

   Si on veut contrler le trafic sur le brin Ethernet, on ne peut
   qu'ajouter un pare-feu ou intgrer un pont.

   La mthode habituelle a pour revers le changement de route par dfaut
   sur chaque machine du rseau interne. C'est extrmement pnible et
   personne n'a envie de devoir changer 5 routes par dfaut sur 5 htes
   plus d'une fois. En outre, a consomme du temps, on peut se tromper et
   la scurit n'est pas amliore.

   La seconde approche est plus systmatique, consomme moins de temps et
   rduit les risques d'erreur. Elle est plus sre en ce sens qu'il n'est
   pas ncessaire de faire apparatre une adresse IP supplmentaire. Pas
   d'IP, pas de danger. Enfin, il s'agit de la thorie en supposant que
   les piles sont sres (ce qui a intrt  tre vrifi). L'emploi d'un
   pont est transparent, pas de changements d'IP ou d'adresses MAC, c'est
   l son attrait.

   Chacun choisira sa mthode mais seule la plus amusante est examine
   ici.
     _________________________________________________________________

5.2. Ping le, Max !

   On configure l'interface eth0 comme d'habitude. Les interfaces du pont
   sont configures conformment  la section d'installation.

   La commande ci-dessous est importante pour activer la transmission de
   paquets.

   root@bridge:~> echo "1" > /proc/sys/net/ipv4/ip_forward

   On configure ventuellement une route par dfaut :

   root@bridge:~> route add default gw 10.0.3.129

   On met en place les rgles de filtrage sur _bridge_ :

root@bridge:~> iptables -P FORWARD DROP
root@bridge:~> iptables -F FORWARD
root@bridge:~> iptables -I FORWARD -j ACCEPT
root@bridge:~> iptables -I FORWARD -j LOG
root@bridge:~> iptables -I FORWARD -j DROP
root@bridge:~> iptables -A FORWARD -j DROP
root@bridge:~> iptables -x -v --line-numbers -L FORWARD

   La dernire ligne produit l'affichage suivant :

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num      pkts      bytes target   prot opt in     out     source   destination
1           0        0 DROP       all  --  any    any     anywhere anywhere
2           0        0 LOG        all  --  any    any     anywhere anywhere
  LOG level warning
3           0        0 ACCEPT     all  --  any    any     anywhere anywhere
4           0        0 DROP       all  --  any    any     anywhere anywhere

   La cible _LOG_ trace tous les paquets via _syslogd_. Une telle
   configuration devrait se limiter  la phase de test puisqu'elle ouvre
   la voie  un puisement prmatur de la capacit de stockage de la
   machine en cas d'attaque de type dni de service.

   On teste les rgles de filtrage en pingant l'adresse IP (195.137.15.7)
   du routeur sur la machine _babasse_ :

root@box:~> ping -c 3 195.137.15.7
PING router.provider.net (195.137.15.7) from 10.0.3.2 : 56(84) bytes of data.
--- router.provider.net ping statistics ---
3 packets transmitted, 0 received, 100% loss, time 2020ms
^C
root@box:~>

   La rgle par dfaut rejette (DROP) le trafic. Pas de rponse ni de
   traage des trames. Cette configuration netfilter est destine  jeter
   toutes les trames  moins que la rgle 1 qui prcde la rgle LOG ne
   soit supprime :

root@bridge:~> iptables -D FORWARD 1
root@bridge:~> iptables -x -v --line-numbers -L FORWARD

   Les rgles sont  prsent :

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num      pkts      bytes target   prot opt in     out     source   destination
2           0        0 LOG        all  --  any    any     anywhere anywhere
  LOG level warning
3           0        0 ACCEPT     all  --  any    any     anywhere anywhere
4           0        0 DROP       all  --  any    any     anywhere anywhere

   Tous les paquets devraient passer. On le confirme avec un ping sur
   l'hte _babasse_ :

root@box:~> ping -c 3 195.137.15.7
PING router.provider.net (195.137.15.7) from 10.0.3.2 : 56(84) bytes of data.
64 bytes from router.provider.net (195.137.15.7): icmp_seq=1 ttl=255 time=0.103
 ms
64 bytes from router.provider.net (195.137.15.7): icmp_seq=2 ttl=255 time=0.082
 ms
64 bytes from router.provider.net (195.137.15.7): icmp_seq=3 ttl=255 time=0.083
 ms

--- router.provider.net ping statistics ---
3 packets transmitted, 3 received, 0% loss, time 2002ms
rtt min/avg/max/mdev = 0.082/0.089/0.103/0.012 ms
root@box:~>

   Parfait, le routeur est vivant et oprationnel (bien sr, il l'a t
   toute la journe).

   Note

   Une fois l'interface du pont active, il faut compter dans les trente
   secondes pour que le pont soit compltement oprationnel. La phase
   d'apprentissage du pont est d' peu prs trente secondes. Pendant ce
   temps, le pont analyse les adresses MAC au contact de chaque port.
   L'auteur du code, Lennert, prcise que ce point est susceptible
   d'amlioration un de ces jours. Pendant la priode d'apprentissage,
   aucun paquet n'est transmis et aucun ping n'obtiendra de rponse. Il
   vaut mieux ne pas l'oublier.
     _________________________________________________________________

5.3. Exemple de configuration

   Cette partie est destine  donner au lecteur quelques indications sur
   l'allure que doit avoir son systme aprs avoir suivi les indications
   du HOWTO.
     _________________________________________________________________

5.3.1. Configuration de l'interface

   Rsultat de la commande ifconfig :

root@bridge:~> ifconfig
br0       Link encap:Ethernet  HWaddr 00:04:75:81:D2:1D
          inet addr:10.0.3.129  Bcast:195.30.198.255  Mask:255.255.255.128
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:826 errors:0 dropped:0 overruns:0 frame:0
          TX packets:737 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:161180 (157.4 Kb)  TX bytes:66708 (65.1 Kb)

eth0      Link encap:Ethernet  HWaddr 00:04:75:81:ED:B7
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5729 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3115 errors:0 dropped:0 overruns:0 carrier:656
          collisions:0 txqueuelen:100
          RX bytes:1922290 (1.8 Mb)  TX bytes:298837 (291.8 Kb)
          Interrupt:11 Base address:0xe400

eth1      Link encap:Ethernet  HWaddr 00:04:75:81:D2:1D
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:1 frame:0
          TX packets:243 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:342 (342.0 b)  TX bytes:48379 (47.2 Kb)
          Interrupt:7 Base address:0xe800

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1034 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:82068 (80.1 Kb)  TX bytes:82068 (80.1 Kb)
     _________________________________________________________________

5.3.2. Configuration du routage

   Rsultat de la commande route :

root@bridge:~> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.3.129      0.0.0.0         255.255.255.128 U     0      0        0 br0
0.0.0.0         10.0.3.129      0.0.0.0         UG    0      0        0 br0
root@bridge:~>
     _________________________________________________________________

5.3.3. Configuration d'iptables

   On se reportera  la section Ping le, Max!.
     _________________________________________________________________

5.4. Remarque

   Il semble y avoir une anomalie dans le code br-nf :

From: Bart De Schuymer
Date: Sun, 1 Sep 2002 21:52:46 +0200
To: Nils Radtke
Subject: Re: Ethernet-Brigde-netfilter-HOWTO

Hello Nils,

[...]
Also, network packet filtering debugging is generally a bad idea with the
br-nf patch. It can gives a lot of false warnings (about bugs) in the logs.
[...]

   NdT: l'auteur du message lectronique signale que l'emploi des options
   de dverminage lorsque br-nf a t appliqu est susceptible de remplir
   les fichiers d'enregistrement de fausses alertes.

   Pour ma part je n'ai jamais eu de fausse alerte dans mes logs.
   Peut-tre que l'anomalie a t corrige. Contact sur ce point, Bart a
   rpondu

From: Bart De Schuymer
Date: Mon, 2 Sep 2002 18:30:25 +0200
To: Nils Radtke
Subject: Re: Ethernet-Brigde-netfilter-HOWTO

On Monday 02 September 2002 00:39, Nils Radtke wrote:
> Will the revision of the nf-debug code in br-nf be subject of improvement?

I must admit I haven't been running any kernel with netfilter debugging
lately. It sure used to give false positives a few months ago (the bridge
mailing list has posts about that), I've been lacking time to see why and if
it is still the case. It's on my todo list.
[...]

   NdT: l'auteur reconnat ne pas avoir essay la combinaison sus-cite
   depuis un moment. Il n'a pas eu le temps dernirement de confirmer le
   problme ni de l'analyser. Il figure en tout cas dans son pense-bte.

    la date d'criture de ce document (19/09/2002), je n'ai trouv aucun
   message comme quoi l'erreur aurait disparu. Il est donc conseill de
   garder un oeil sur la liste de diffusion du pontage Ethernet
     _________________________________________________________________

6. Liens

   L'auteur du document peut tre contact en anglais ou en allemand par
   courrier lectronique. Voir la page web de l'auteur.

   Merci d'envoyer vos commentaires, remarques, corrections concernant la
   version franaise de ce document  commentaires@traduc.org
     _________________________________________________________________

6.1. Pontage Ethernet

     * La liste de diffusion du pontage Ethernet.
     * Utilitaires, correctifs, et ctera : page web du pontage Ethernet
       du noyau Linux.
     * Le Guide pratique du pontage et de STP.
     * Le pare-feu conomique, par Shawn Grimes.
     _________________________________________________________________

6.2. Thmes voisins

     * Filtrage au niveau des trames, Ethernet-Bridging-Tables :
          + ebtables chez sourceforge
          + page page de garde sourceforge d'ebtables
          + fonctionnalits d'ebtables
          + exemples pour ebtables : simples, volus
          + documentation dtaille d'ebtables
          + guide du bricoleur ebtables
     * extension IP du pontage Linux IP mode, LVS
     * Linux et la haute disponibilit : Linux haute disponibilit
     * Serveur virtuel Linux : LVS

  Notes

   [1]

   Remarque : Cette entre n'est disponible qu'avec un noyau modifi !
