Linux Bridge+Firewall Mini-HOWTO version 1.2.0

Peter Breuer ( ptb@it.uc3m.es)
Adaptation fran�aise par Etienne BERNARD ( eb@via.ecp.fr)

19 D�cembre 1997

1. Introduction

Vous devriez lire l'original Bridging mini-HOWTO (NdT : ou en version fran�aise) par Chris Cole pour une vision diff�rente sur le sujet. L'adresse email de Chris Cole est chris@polymer.uakron.edu. La version de cet HOWTO, � partir duquel ce document est construit est la version 1.03, dat� du 23 ao�t 1996.

2. Quoi, et pourquoi (et comment ?)

2.1 Quoi

Un pont est un �l�ment qui connecte intelligement des brins gr�ce � deux cartes ethernet. Un firewall est un �l�ment isolant intelligent.

2.2 Pourquoi

Si vous avez de nombreux ordinateur, vous pouvez d�sirer installer un pont :

  1. pour �conomiser le prix d'un nouveau hub lorsqu'il se trouve que vous avez une carte ethernet libre ;
  2. pour �viter d'avoir � apprendre l'IP-forwarding et d'autres trucs alors que vous avez deux cartes dans votre ordinateur ;
  3. pour �viter des travaux de maintenance pour d'�ventuels changements futurs !

Le terme ``nombreux ordinateurs'' peut m�me repr�senter seulement trois ordinateurs, si ceux-ci font du routage ou du pontage ou qu'ils changent de place dans la pi�ce de temps en temps ! Vous pouvez m�me vouloir un pont pour vous amuser � trouver � quoi cela sert. Je voulais un pont pour la raison 2.

Si vous �tes int�ress� par le point 1, vous �tes peu dans votre cas. Lisez le NET-2-HOWTO et le Serial-HOWTO pour de meilleurs astuces.

Vous d�sirez un firewall si :

  1. vous essayez de prot�ger votre r�seau des acc�s ext�rieur, ou
  2. vous d�sirez interdire l'acc�s au monde ext�rieur aux machines de votre r�seau.

Bizarrement, j'avais besoin du point 2 ici aussi. La politique de mon universit� pour le moment est de ne pas jouer le r�le de fournisseur d'acc�s � Internet pour les undergraduates.

2.3 Comment

J'ai commenc� par du pontage entre deux cartes r�seau sur une machine jouant le r�le de firewall, et j'ai fini par lancer le firewall sans avoir coup� le pont. Cela a l'air de fonctionner, et c'est beaucoup plus flexible que chaque configuration isol�e. Je peux arr�ter le firewall et continuer � faire fonctionner le pont ou arr�ter le pont lorsque je veux �tre plus prudent.

Je suppose que la partie ``pont'' du noyau se trouve juste au-dessus de la couche physique et que la partie firewall se trouve dans une couche r�seau sup�rieure, afin que les parties de pontage et de firewalling agissent en fait comme si elles �taient connect�es en ``s�rie'' et non pas en ``parall�le'' (aie !), selon le sch�ma suivant :

-> Pont-entrant -> Firewall-entrant -> Noyau -> Firewall-sortant -> Pont-sortant ->

Il n'y a pas d'autre fa�on d'expliquer comment une machine peut �tre en m�me temps ``conducteur'' et ``isolant''. Il existe quelques embuches, mais j'en parlerai plus tard. Sch�matiquement, vous devez router les paquets que vous voulez filtrer. De toute fa�on, cela a l'air de fonctionner parfaitement pour moi, et voici comment...

3. PONT

3.1 Logiciel

R�cup�rez l' utilitaire de configuration du pont depuis la page personnelle d'Alan Cox. C'est la m�me r�f�rence que dans le document de Chris. Je n'ai pas compris que c'�tait un URL ftp en non un URL http...

3.2 Lecture pr�liminaires

Lisez le Multiple Ethernet HOWTO pour obtenir des conseils pour faire reconna�tre et pour configurer plus d'une carte r�seau.

Vous pourrez trouver encore plus de d�tails sur le type de commandes magiques � passer au prompt se trouvent dans le Boot Prompt HOWTO.

Pour compl�ter vos lectures, lisez le NET-2 HOWTO. C'est un document plut�t long, et vous devrez y piocher les d�tails qui vous int�ressent.

3.3 Configuration de lancement

Les lectures pr�c�dentes vont vous indiquer ce dont vous avez besoin pour pr�parer le noyau � reconna�tre un deuxi�me p�riph�rique ethernet lors du d�marrage, en ajoutant la ligne suivante dans votre fichier /etc/lilo.conf, et en relan�ant lilo :

append = "ether=0,0,eth1" 

Notez le "eth1". "eth0" repr�sente la premi�re carte. "eth1" est la seconde carte. Vous pouvez �galement ajouter les param�tres de d�marrage � la ligne de commande que lilo vous offre. Pour trois cartes :

linux ether=0,0,eth1 ether=0,0,eth2 

J'utilise loadlin pour lancer mon noyau Linux depuis DOS :

loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2 

Notez que cette astuce oblige le noyau � d�tecter les cartes au d�marrage. La d�tection ne sera pas faite si vous chargez les gestionnaires de p�riph�rique ethernet en module (par s�curit�, puisque l'ordre de d�tection ne peut �tre d�termin�), donc si vous utilisez des modules, vous aurez � ajouter l'IRQ appropri�e et le param�tre de port pour le gestionnaire de p�riph�rique dans votre fichier /etc/conf.modules. Dans mon cas, j'ai les lignes :

alias eth0 3c509
alias eth1 de620
options 3c509 irq=5 io=0x210
options de620 irq=7 bnc=1

Vous pouvez savoir si vous utilisez les modules en utilisant ``ps -aux'' pour voir si kerneld est lanc�, et en v�rifiant qu'il y a des fichiers .o dans un sous-r�pertoire du r�pertoire /lib/modules. Utilisez le nom de r�pertoire que vous donne la commande uname -r. Si vous avez un kerneld lanc� et/ou vous avez un fichier foo.o, �ditez /etc/conf.modules et lisez avec soin la page de manuel de depmod.

Notez �galement que jusque r�cemment (noyau 2.0.25), le driver pour la carte 3c509 ne pouvait pas �tre utilis� pour plus d'une carte s'il �tait utilis� en module. J'ai vu un patch quelque part pour corriger cette limitation. Il devrait �tre inclus dans le noyau � l'heure o� vous lisez ces lignes.

3.4 Configuration du noyau

Recompilez le noyau avec le bridging :

CONFIG_BRIDGE=y 

J'ai �galement compil� mon noyau avec le firewalling, l'IP-forwarding et l'IP-masquerading. C'est seulement si vous d�sirez utiliser le firewalling �galement...

CONFIG_FIREWALL=y           
CONFIG_NET_ALIAS=y          
CONFIG_INET=y               
CONFIG_IP_FORWARD=y         
CONFIG_IP_MULTICAST=y       
CONFIG_IP_FIREWALL=y        
CONFIG_IP_FIREWALL_VERBOSE=y
CONFIG_IP_MASQUERADE=y

Vous aurez besoin en plus de la configuration r�seau standard :

CONFIG_NET=y

et je ne pense pas que vous deviez vous pr�ocupper des autres options r�seau. Les options que je n'ai pas compil� dans le noyau sont s�lectionn�es en tant que modules afin que je puisse les ajouter �ventuellement plus tard.

Installez le nouveau noyau, relancez lilo et red�marrez sur le nouveau noyau. Rien ne devrait avoir chang� pour l'instant !

3.5 Adresses r�seau

Chris dit qu'un pont ne doit pas avoir d'adresse IP mais ce n'est pas la configuration qui est pr�sent� ici.

Vous allez utiliser la machine pour vous connecter au r�seau donc vous avez besoin d'une adresse et vous devez vous assurer que le device loopback configur� normalement afin que vos logiciels puisse communiquer avec ce � quoi ils s'attendent. Si loopback est d�sactiv�, le r�solveur de noms ou d'autres services ne fonctionneront pas. Voyez le NET-2-HOWTO, mais votre configuration standard devrait d�j� avoir fait cela :

ifconfig lo 127.0.0.1
route add -net 127.0.0.0

Vous allez devoir donner des adresses � vos cartes r�seau. J'ai chang� le fichier /etc/rc.d/rc.inet1 de ma slackware (3.x) pour configurer deux cartes et vous devrez juste regarder votre fichier de configuration du r�seau et doubler ou tripler le nombre d'instructions s'y trouvant. Supposons que vous ayez d�j� une adresse �

192.168.2.100

(cette adresse fait partie des adresses r�serv�es pour des r�seaux priv�s, mais ne faites pas attention, cela ne cassera rien si vous utilisez cette adresse par erreur) alors vous avez probablement une ligne ressemblant �

ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1

dans votre fichier de configuration. La premi�re chose que vous allez probablement vouloir faire est couper l'espace des adresses atteintes par cette carte en deux afin de pouvoir �ventuellement faire un pont ou filtrer entre les deux moiti�s. Ajoutez donc une ligne qui r�duit le masque de sous-r�seau pour adresser un plus petit nombre de machines :

ifconfig eth0 netmask 255.255.255.128

Essayez cette configuration. Cela restreint la carte � l'espace des adresses entre .0 et .127.

A pr�sent, vous pouvez configurer votre deuxi�me carte dans la deuxi�me moiti� de l'espace des adresses locales. Assurez vous que personne n'utilise l'adresse que vous allez prendre. Pour des raisons de sym�trie, j'utiliserai ici 228=128+100. N'importe quelle adresse conviendra, � condition qu'elle ne se trouve pas dans le masque de l'autre carte. �vitez les adresses sp�ciales comme .0, .1, .128, etc... � moins que vous sachiez ce que vous faites.

ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1

Cela restreint la deuxi�me carte aux adresses entre .128 et .255.

3.6 Routage r�seau

C'est ici que les d�fauts de l'utilisation simultann�e du pont et du firewall : vous ne pouvez pas filtrer des paquets qui ne sont pas rout�s. Pas de route, pas de firewall. Cette r�gle est v�rifi�e en tout cas dans les version 2.0.30 ou suivantes du noyau. Les filtres du firewall sont �troitement li�s au code source de l'IP-Forwarding.

Cela ne signifie pas que vous ne pouvez pas utiliser le pont. Vous pouvez installer un pont entre deux cartes et filtrer � partir d'une troisi�me. Vous pouvez n'avoir que deux cartes et les faire filtrer une adresse IP externe, comme celle d'un routeur proche, � condition que le routeur reli� � une seule carte.

En d'autres termes, puisque je veux utiliser la machine comme firewall, je dois contr�ler avec pr�cision la destination physique de certains paquets.

J'ai le petit r�seau de machines sur un hub connect� � eth0, je configure donc un r�seau de ce c�t� :

route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0

Remplacez le 128 par un 0 pour un r�seau de classe C entier. Ici, je ne le fais pas puisque j'ai juste divis� en deux l'espace d'adressage. Le "dev eth0" n'est pas n�cessaire ici, puisque l'adresse de la carte fait partie de ce r�seau, mais il peut �tre n�cessaire de l'�crire chez vous. On pourrait d�sirer plus d'une carte prenant ce sous r�seau en charge (127 machines sur un segment, bravo !) mais ces cartes utiliseraient le m�me masque de sous-r�seau et seraient consid�r�es comme une seule par la partie routage du noyau.

Sur l'autre carte, j'ai une ligne qui passe directement � travers un gros routeur, auquel je fais confiance.

                                             client 129
         __                                        |    __ 
client 1   \    .0                    .128         |   /   net 1
client 2 --- Hub - eth0 - Kernel - eth1 - Hub - Router --- net 2
client 3 __/       .100            .228         .2 |   \__ net 3
                                                   |
                                             client 254

J'utilise une route fixe (c'est-�-dire "statique") depuis la carte vers ce routeur, puisque sinon il ferait partie du masque de sous-r�seau de la premi�re carte et le noyau se tromperait sur la mani�re d'envoyer les paquets au routeur. Je veux filtrer ces paquets et c'est une raison de plus de les router explicitement.

route add 192.168.2.2 dev eth1

Je n'en ai pas besoin, puisque je n'ai pas d'autres machines dans cette moiti� de l'espace d'adressage, mais je d�clare un r�seau sur la seconde carte. La s�paration de mes interfaces r�seau en deux groupes gr�ce au routage me permettra �ventuellement de faire du filtrage tr�s pr�cis, mais vous pouvez tr�s bien vous en sortir avec beaucoup moins de routage que cela.

route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1

J'ai �galement besoin d'envoyez tous les paquets non-locaux au monde et je dis donc au noyau de les envoyer au gros routeur :

route add default gw 192.168.2.2

3.7 configuration de la carte

Nous avions auparavant une configuration standard pour le r�seau, mais comme nous faisons du bridging, nous devons �couter sur chaque carte les paquets qui ne nous sont pas destin�s. Ceci doit aller dans le fichier de configuration r�seau :

ifconfig promisc eth0
ifconfig promisc eth1

La page de manuel indique d'utiliser allmulti=promisc, mais cela ne fonctionnait pas pour moi.

3.8 Routage additionnel

J'ai remarqu� une chose : j'ai d� passer la seconde carte dans un mode lui permettant aux questions du gros routeur � propos des machines que je cache sur mon r�seau local.

ifconfig arp eth1

Pour faire bonne mesure, j'ai effectu� cette op�ration pour l'autre carte aussi.

ifconfig arp eth0

3.9 Configuration du pont

Ajoutez la mise en route du pont dans votre fichier de configuration :

brcfg -enable

La configuration du pont mettra en route certains ports. Vous pouvez exp�rimenter l'allumage et l'extinction des ports un � la fois :

brcfg -port 0 -disable/-enable
brcfg -port 1 -disable/-enable 

Vous pouvez obtenir un rapport sur l'�tat courant avec :

brcfg

sans aucun param�tres. Vous pourrez voir que le pont �coute, apprend, et effectue le forwarding. (Je ne comprends pas pourquoi le code r�p�te la m�me adresse mat�rielle pour mes deux cartes, mais peu importe... le HOWTO de Chris affirme que c'est correct).

3.10 Essais

Si le r�seau est encore en fonction, essayez votre script de configuration en vrai en arr�tant les deux cartes et en l'ex�cutant :

ifconfig eth0 down
ifconfig eth1 down
/etc/rc.d/rc.inet1

Avec un peu de chance, les divers syst�mes tel nfs, ypbind, etc... ne s'en rendront pas compte. N'essayez pas ceci si vous n'�tes pas derri�re le clavier !

Si vous d�sirez �tre plus prudent que cela, vous devrez arr�ter le plus de d�mons possible, et d�monter les r�pertoires NFS. Le pire qu'il puisse vous arriver est d'avoir � rebooter en mode single-user (le param�tre "single" de lilo ou loadlin), et de restaurer les fichiers � leur valeur d'avant les modifications.

3.11 V�rifications

V�rifiez qu'il existe un trafic diff�rent sur chaque interface :

tcpdump -i eth0
(dans une fen�tre)
tcpdump -i eth1
(dans une autre fen�tre)

Vous devriez �tre habitu� � l'utilisation de tcpdump pour trouver des �v�nements qui ne devraient pas se passer, ou qui existent mais ne devraient pas.

Par exemple, recherchez les paquets qui ont travers� le pont vers la seconde carte depuis le r�seau interne. Ici, je cherche les paquets venant de la machine avec l'adresse .22 :

tcpdump -i eth1 -e host 192.168.2.22

A pr�sent, envoyez un ping depuis l'h�te en .22 vers le routeur. Vous devriez voir le paquet affich� par tcpdump.

A pr�sent, vous devriez avoir un pont, et qui poss�de �galement deux adresses r�seau. V�rifiez que vous pouvez les pinger depuis l'ext�rieur de votre r�seau local et depuis l'int�rieur, que vous pouvez utiliser telnet et ftp depuis et vers l'int�rieur du r�seau.

4. FIREWALLING

4.1 Logiciel et lectures

Vous devriez lire le Firewall-HOWTO.

Il vous indiquera o� trouver ipfwadm si vous ne l'avez pas d�j�. Vous pouvez �galement r�cup�rer d'autres outils, mais seulement ipfwadm m'a �t� utile. C'est pratique et de bas niveau ! Vous pouvez voir exactement ce qu'il fait.

4.2 V�rifications pr�liminaires

Vous avez compil� l'IP-forwarding et le masquerading dans le noyau, et vous allez v�rifier que le firewall est dans son �tat par d�faut (il accepte) gr�ce � :

ipfwadm -I -l
ipfwadm -O -l
ipfwadm -F -l

Ce qui, dans l'ordre, "affiche les r�gles affectant la partie .."entrante ou sortante ou qui fait suivre (masquerading) ".. du firewall". L'option "-l" signifie "lister".

Si vous avez compil� l'IP accounting �galement :

ipfwadm -A -l

Vous devriez constater qu'aucune r�gle n'est d�finir et que l'action par d�faut est d'accepter tous les paquets. Vous pouvez retourner � cet �tat � tout moment, avec :

ipfwadm -I -f
ipfwadm -O -f
ipfwadm -F -f

L'option "-f" signifie "flush" (en fran�ais, "vider"). Vous pourriez en avoir besoin.

4.3 R�gle par d�faut

Je veux interdire l'acc�s au monde entier depuis mon r�seau interne, et rien d'autre, donc je vais donner comme derni�re r�gle (comme r�gle par d�faut) une r�gle indiquant d'ignorer les paquets venant du r�seau interne et dirig�s vers l'ext�rieur. Je place toutes les r�gles (dans cet ordre) dans le fichier /etc/rc.d/rc.firewall que j'execute depuis /etc/rc.d/rc.local au d�marrage.

ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0

Le "-S" repr�sente l'adresse source/masque de sous-r�seau. L'option "-D" est pour l'adresse destination/masque de sous-r�seau.

Ce format n'a plus le vent en poupe. ipfwadm est intelligent et conna�t des abr�viations courantes. V�rifier les pages de manuel.

Il peut �tre plus pratique de placer certaines ou toutes les r�gles sur la partie sortante du firewall en utilise "-O" au lieu de "-I", mais je supposerai que les r�gles sont con�ues pour �tre utilis�es sur la moiti� entrante.

4.4 Acc�s par adresse

Avant la r�gle par d�faut, je dois placer des r�gles qui servent d'exceptions pour cette interdiction g�n�rale des services ext�rieurs aux clients int�rieurs.

Je veux traiter les adresses des machines derri�re le firewall de mani�re sp�ciale. Je veux emp�cher aux gens de se loguer sur la machine qui sert de firewall � moins qu'elles aient une permission sp�ciale, mais une fois connect�es, elles devraient �tre capables de parler au monde ext�rieur.

ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \
 -D 0.0.0.0/0.0.0.0

Je veux �galement que les clients internes soient capables de parler � la machine faisant firewall. Peut-�tre pourront-elles la persuader de les laisser sortir !

ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \
 -D 192.168.2.100/255.255.255.255

V�rifiez que vous pouvez joindre les machines � l'int�rieur du firewall depuis l'ext�rieur par telnet, mais que vous ne pouvez pas sortir. Vous pouvez faire le premier pas, mais les clients ne peuvent pas vous envoyer de messages. Essayez �galement rlogin et ping avec tcpdump lanc� sur une carte ou l'autre. Vous devriez �tre capable de comprendre ce que vous lirez.

4.5 Acc�s par protocole

J'assouplis les r�gles protocole par protocole. Je veux que les pings depuis l'ext�rieur vers l'int�rieur obtiennent une r�ponse, par exemple, donc j'ai ajout� la r�gle :

ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \
 -D 0.0.0.0/0.0.0.0

L'option "-P icmp" correspond au protocole tout entier.

Avant que j'installe un proxy ftp, j'autorise �galement les appels ftp sortants en rel�chant les restrictions sur un port donn�. Ceci vise les ports 20, 21 et 115 sur les machines externes :

ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
 -D 0.0.0.0/0.0.0.0 20 21 115

Je n'ai pas pu faire fonctionner sendmail entre les clients locaux sans serveur de noms. Au lieu d'installer un serveur de nom directement sur le firewall, j'ai juste autoris� les requ�tes TCP de r�solution de nom visant le plus proche serveur de nom, et j'ai plac� son adresse dans le fichier /etc/resolv.conf des clients. ("nameserver 123.456.789.31" sur une ligne s�par�e).

ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
 -D 123.456.789.31/255.255.255.255 54

Vous pouvez trouver quel num�ro de port et protocole requiert un service gr�ce � tcpdump. Utilisez ce service avec un ftp ou un telnet ou autre vers ou depuis une machine interne, et observez-le sur les ports d'entr�e et de sortie du firewall avec tcpdump :

tcpdump -i eth1 -e host client04

par exemple. Le fichier /etc/services/ est une importante source d'indices. Pour laisser ENTRER le telnet et le ftp depuis l'ext�rieur, vous devez autoriser un client local � envoyer des donn�es vers l'ext�rieur sur un port donn�. Je comprends pourquoi ceci est n�cessaire pour le ftp (c'est le serveur qui �tablit la connexion de donn�es), mais je me demande pourquoi telnet en a �galement besoin.

ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \
 -D 0.0.0.0/0.0.0.0

Il existe un probl�me particulier avec certains d�mons qui cherchent le nom d'h�te de la machine firewall afin de d�cider quelle est leur adresse r�seau. J'ai eu des probl�mes avec rpc.yppasswdd. Il insiste sur des informations broadcast qui indiquent qu'il se trouve en dehors du firewall (sur la seconde carte). Cela signifie que les clients � l'int�rieur ne peuvent pas le contacter.

Au lieu de lancer l'IP aliasing ou de changer le code source du d�mon, j'ai traduit le nom vers l'adresse de la carte du c�t� int�rieur sur les clients, dans leur fichier /etc/hosts.

4.6 V�rifications

Vous voudrez tester que vous pouvez toujours utiliser telnet, rlogin et ping depuis l'ext�rieur. Depuis l'int�rieur, vous devriez �tre capable d'utiliser ping vers la sortie. Vous devriez �galement �tre capables d'utiliser le telnet vers la machine firewall depuis l'int�rieur, et cette derni�re manipulation devrait vous permettre d'acc�der au reste.

Et voil�. A pr�sent, vous voulez probablement apprendre rpc/Yellow Pages et leur interaction avec le fichier de mots de passe. Le r�seau derri�re le firewall devrait vouloir emp�cher aux utilisateurs non privil�gi�s de se logguer sur le firewall, et donc de sortir. C'est trait� dans un autre HOWTO !