Annexe P. Monter un bridge (firewallant)

Table des matières
1. L'idée
2. Le Montage
2.1. La configuration d'un noyau 2.6
2.2. Détection des multiples cartes réseau
2.3. Configuration du bridge

Important

Cette partie requière des connaissances de base en réseau Ethernet. Lien vers une formation VIA à ce sujet.

1. L'idée

L'idée est d'ajouter à votre ordinateur sous Linux la fonction de switch Ethernet aussi appelée bridge. Nous verrons également comment cette fonction de bridge peut être perfectionnée en bridge firewallant.

Pour ajouter à votre ordinateur sous Linux cette fonction de bridge, il lui faut au minimum deux cartes réseau. Chaque carte réseau devient alors l'équivalent d'un port du switch. Le bridge fonctionnera comme un switch Ethernet classique : il apprend tout seul les adresses MAC qui sont derrière ses interfaces réseau et aiguille les paquets Ethernet comme un switch. Par contre, contrairement à un switch classique, il ne croise pas la connexion réseau : il faudra donc relier le bridge aux autres ordinateurs par des câbles croisés, et aux autres switchs par des câbles droits (les câbles "normaux" sont des câbles droits).

Figure P-1. Schéma d'un bridge

2. Le Montage

2.1. La configuration d'un noyau 2.6

Si vous voulez faire un bridge firewallant avec un noyau 2.6, il n'est plus nécessaire de patcher les sources du noyau, comme avec les noyaux 2.4.

Au niveau de la configuration du noyau, il faut activer dans le menu Device Drivers > Networking support > Networking options :

  • la fonction de bridging :

    
<M>  802.1d Ethernet Bridging
    
  • les fonctions de firewalling :

    
[*]  Network packet filtering (replaces ipchains)
    

    et les fonctions précises dont vous comptez vous servir pour le filtrage dans le sous-menu Network packet filtering (replaces ipchains) > IP: Netfilter Configuration.

Si vous avez suivi mes instructions au chapitre Configuration du noyau Linux, alors votre noyau actuel est déjà bien configuré. Si ce n'est pas le cas, alors il vous faudra reconfigurer et recompiler votre noyau.

Ensuite, éditez le fichier /etc/modprobe.d/reseau et ajoutez un alias pour l'interface bridge br0 :


alias eth0 nom_du_module_de_la_carte_réseau_n°1
alias eth1 nom_du_module_de_la_carte_réseau_n°2
alias eth2 nom_du_module_de_la_carte_réseau_n°3
alias br0 bridge

2.2. Détection des multiples cartes réseau

La première chose à faire est de mettre les cartes réseaux dans le futur bridge et de s'assurer qu'il les détecte bien au démarrage et leur donne des IRQs et des ports I/O différents. Pour le voir, il suffit de regarder les messages au démarrage. On les obtient en tapant dmesg.

Par exemple, pour une machine avec deux cartes réseau 3Com identiques, les lignes suivantes apparaîssent au démarrage :


00:09.0: 3Com PCI 3c905C Tornado at 0xe000. Vers LK1.1.16
00:0b.0: 3Com PCI 3c905C Tornado at 0xe400. Vers LK1.1.16

Si ça ne marche pas du premier coup... dommage. Munissez-vous des drivers des cartes, en particulier des programmes (souvent sous DOS) permettant de configurer l'IRQ et le port I/O des cartes. Débrouillez-vous comme vous voulez (s'il le faut en mettant une carte puis l'autre), mais il faut des IRQ et des port I/O différents pour chaque carte. Si vous n'arrivez toujours pas à voir les deux cartes en même temps (typiquement un des deux programmes de configuration ne voit pas la carte), essayez d'échanger les deux cartes sur la carte mère.

2.3. Configuration du bridge

2.3.2. Lancer le bridge au démarrage

Tout d'abord, il faut voir quelle adresse MAC va prendre l'interface du bridge, désignée par br0. C'est très important pour pouvoir utiliser le DHCP et aussi pour ne pas perturber les outils de surveillance de certains réseau (comme celui de VIA). Il faut savoir que le bridge choisi son adresse MAC parmi les adresses MAC des différentes interfaces réseau du bridge et qu'il prend la plus petite d'entre-elles. Pour être plus précis, il lit les adresses MAC des interfaces réseau (eth0, eth1, eth2,...) de gauche à droite et note la première différence : il les compare et donne au bridge l'adresse MAC où la première différence est la plus faible. Attention, les adresses MAC sont notées en hexadécimal, donc les chiffres sont plus faibles que les lettres.

Par exemple, sur un bridge avec deux cartes réseau :

  • Adresse MAC d'eth0 : 00:01:02:1E:9B:8B

  • Adresse MAC d'eth1 : 00:01:02:AC:CA:D4

On lit de gauche à droite, et on note la première différence : elle intervient au niveau du septième caractère où on a 1 pour eth0 et A pour eth1. Comme les nombres sont plus faibles que les lettres, c'est eth0 qui a la MAC la plus faible. Donc le bridge prendra la MAC d'eth0.

Maintenant que l'on sait quelle MAC prend le bridge, il faut demander à son administrateur réseau de modifier le DHCP si nécessaire (c'est le cas du réseau VIA...).

Nous allons maintenant modifier le fichier de configuration des interfaces réseau /etc/network/interfaces en utilisant mon fichier de configuration d'exemple et en le personnalisant :


# mv /etc/network/interfaces /etc/network/interfaces.old
# cp ~/config/interfaces-bridge /etc/network/interfaces

ou :


% wget http://people.via.ecp.fr/~alexis/formation-linux/config/interfaces-bridge
# mv /etc/network/interfaces /etc/network/interfaces.old
# mv interfaces-bridge /etc/network/interfaces

Personnalisez le nouveau fichier /etc/network/interfaces ; les lignes de commentaire doivent vous permettre de comprendre chaque paramètre :


# /etc/network/interfaces
# Fichier de configuration d'exemple des interfaces réseau
# pour faire un bridge
# Formation Debian GNU/Linux par Alexis de Lattre
# http://www.via.ecp.fr/~alexis/formation-linux/

# Plus d'informations dans "man interfaces"
# et dans "/usr/share/doc/bridge-utils/README.Debian.gz"

# D'abord l'interface "loopback"
auto lo
iface lo inet loopback

# Ensuite l'interface bridge "br0" qui se configure par DHCP
auto br0
iface br0 inet dhcp
    # Liste des interfaces qui participent au bridge
    # ATTENTION :
    # Il faut mettre l'interface dont la MAC est la plus petite d'abord !
    # Sinon, cela peut perturber les outils de surveillance du réseau.
    bridge_ports eth0 eth1 eth2
    # Je désactive le Spanning tree
    bridge_stp off
    # Temps en secondes entre "learning state" et "forwarding state"
    bridge_fd 2
    # Temps maximum en secondes où le script de lancement du bridge
    # attendra lors du démarrage que le bridge passe en mode "forwarding
    # state" pour passer la main et laisser les autres services démarrer.
    bridge_maxwait 0

Relancez la configuration des interfaces réseau :


# /etc/init.d/networking restart
Reconfiguring network interfaces: done.

Pendant ce redémarrage, regardez votre console de log (si vous avez suivi la formation depuis le début, c'est la huitième console) ou faites apparaître la fin du syslog en direct avec la commande :


% tail -f /var/log/syslog

Vous verrez alors 3 étapes dans la lancement du bridge :

  1. listening : il regarde sur les interfaces réseau physiques les packets qui arrivent,

  2. learning : il en déduit la configuration du réseau tout seul, notamment quelles adresses MAC sont derrière quels ports,

  3. forwarding : le bridge se met à fonctionner, le réseau marche enfin !