VLAN Bridging ebtables
VLAN et Bridging
La topologie de notre réseau
Explication sur la topologie
On a ici deux sous réseaux de machines ne gérant pas les VLAN TAG (ou du moins, on ne l'a pas activé). On les appelera ici ENSEIGNANTS et ETUDIANTS. Les machines de ces réseaux seront nommées alors ENS1, ENS2, ... et ETU1, ETU2, ...
On a un réseau hétérogène de machines et matériel (switchs, routeurs) gérant les VLAN TAG, appelons le LE MONDE.
La machine qui sert de noeuds entre tous ces réseaux sera appelée LE CENTRE.
LE CENTRE sera ici sous GNU/Linux, il devra être configuré pour gérer les VLAN (norme IEEE 802.1Q) et les ponts (la norme 802.1D Ethernet Bridging).
ENSEIGNANTS et ETUDIANTS peuvent communiquer avec LE MONDE. Ils sont alors associé à deux VLAN distincts. Ils sont chacun branché à deux ports physiques distincts de LE CENTRE. On verra plus tard, que l'on pourra choisir de les faire communiquer, ou non.
Pourquoi vouloir procéder ainsi ?
On peut apprécier le fait que d'un coté, on ait un réseau ENSEIGNANTS ou ETUDIANTS, où il n'y a pas les VLAN, et donc qui n'ont pas besoin de configuration matérielle ou logicielle spéciale, et de l'autre coté, LE MONDE, qui lui gère des VLAN. Le réseau LE MONDE bénéficie alors de tous les avantages de la technologie associé aux VLAN. Comme par exemple, la possibilité de connecter de manière logique deux réseaux physiques distincts ou d'éviter à avoir à doubler le matériel afin d'avoir plusieurs réseaux séparés dans les mêmes locaux.
Dans notre cas, on peut aussi voir ça comme la possibilité d'ajouter de manière transparente de nouvelles salles contenant des machines pour les enseignants ou les étudiants et les rajouter dans le même VLAN afin qu'ils puissent communiquer de manière transparente ensemble.
Quel est le bénéfice réel pour la sécurité ?
Comme vu précédemment, on peut séparer un réseau physique en plusieurs réseaux logiques. Cela permet entre autres de limiter l'impact de la propagation d'un vers ou les possibilités d'écoute sur un réseau. Un membre du réseau ETUDIANTS ne pourra pas sniffer les paquets du réseau ENSEIGNANTS par exemple.
On va aussi utiliser du bridging (pontage) ce qui permet de créer un firewall transparent (ici avec ebtables) ce que l'on ne peut pas faire avec un simple switch.
VLAN
La première chose à faire quand on veut installer un VLAN est d'installer le paquet « vlan » suivant la méthode habituelle de votre distribution.
Par exemple sous Debian et Ubuntu :
#apt-get install vlan bridge-utils
Sous Gentoo :
#emerge vconfig bridge-utils
Après installation, vous devriez avoir les commandes vconfig et brctl.
Topologie réelle de notre réseau
Notre machine LE CENTRE a ici deux interfaces réseaux, eth1 et tap0 qui seront les interfaces où sera effectué notre bridge (tap0 est une interface virtuelle de niveau 2 créée par une machine virtuelle qui nous sert dans nos tests pour simuler des plus grands réseaux).
Sur eth1 est branché une machine du groupe ETUDIANTS ou ENSEIGNANTS, et sur tap0, on trouve LE MONDE.
Configuration du VLAN
Normalement, cette étape est déjà faite car LE MONDE est crée. Mais comme on considère que l'on va rajouter une machine du groupe ETUDIANTS, la première fois, il faudra bien créer le groupe, donc le VLAN associé.
La syntaxe de la commande pour créer un VLAN est la suivante:
#vconfig add interface VLAN-ID
Cela va nous créer une interface nommée "interface.VLAN-ID"
Si on veut supprimer un VLAN, rien de plus facile :
#vconfig rem interface.VLAN-ID
La commande de création dans notre cas sera vers LE MONDE est:
#vconfig add tap0 2
Une nouvelle interface visible dans ifconfig va être créée, elle s'appellera logiquement "tap0.2". On peut la voir si l'on tape "ifconfig -a".
#ifconfig -a [..SNIP..] tap0.2 Lien encap:Ethernet HWaddr FE:B7:43:8B:FB:5B BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [..SNIP..]
On pourra noter que l'interface du VLAN vient avec toutes les options d'une interface Ethernet normale, on pourra notamment changer son adresse MAC, ce qui peut s'avérer utile afin de simplifier des configurations ou de rendre transparent le changement de carte réseau sur une machine dans les VLAN.
#ifconfig tap0.2 hw ether 00:11:22:33:44:55
JRrvl3 <a href="http://vneywugmpxbe.com/">vneywugmpxbe</a>, [url=http://umhwtleksock.com/]umhwtleksock[/url], [link=http://fehaxwoyxidv.com/]fehaxwoyxidv[/link], http://cnynnlyikubr.com/
Mise en garde concernant le matériel
Certains matériels, comme des switchs ou des Access Point ne gérent pas les VLAN, ils se contentent alors de dropper les paquets. Donc si vous avez des problèmes de connectivité en passant dans un VLAN, il se peut que ça soit un problème de matériel.
Pour aller plus loin : ebtables
Ebtables est l'équivalent d'iptables pour les bridges. Il fait du filtrage du protocle Ethernet et des adresses MAC ; du filtrage IP et ARP ; du filtrage VLAN. Il supporte le MAC NAT. Il permet aussi de faire du « Brouting » : il peut décider quel trafic doit être ponté entre deux interfaces réseau et quel trafic doit être routé vers ces deux mêmes interfaces ; ces deux interfaces appartiennent au même pont mais ont leur propre adresse IP et peuvent appartenir à des sous-réseaux différents.
Le gros exemple : la création du pont pour notre réseau scolaire
Nous avions crée un bridge pour que ETUDIANTS puisse communiquer avec LE MONDE. Si nous avions voulu, nous aurions pu faire exactement pareil pour qu'ENSEIGNANTS puisse communiquer avec LE MONDE. Mais voilà, nous allons rajouter un niveau de complexité. Imaginons qu'en réalité, il y a des postes étudiants et des postes enseignants dans une salle de Travaux Pratiques, il peut être concevable que les étudiants puissent discuter avec l'ordinateur du professeur, si par exemple ce dernier a mis les sujets de TP sur un serveur HTTP sur sa machine.
Et voici le problème, tout à l'heure, nous avions séparé les deux réseaux. Maintenant, nous allons devoir les recoller pour n'en former qu'un et restreindre ensuite l'accès pour que les étudiants n'aillent pas sur les machines des autres professeurs et inversement. C'est ici qu'ebtables va nous être utile.
La topologie de ce réseau
Voici la liste des interfaces réseaux sur la machine à configurer, ainsi que le réseau sur lequel est branché chacune d'elles :
- tap0.2 : la partie ETUDIANTS de LE MONDE (donc le VLAN-ID est 2), le réseau est en 10.0.2.0/16
- tap0.3 : la partie ENSEIGNANTS de LE MONDE (son VLAN-ID est donc 3), le réseau est en 10.3.0/16
- tap2 : ENSEIGNANTS, en 10.0.2.0/16
- eth1 : ETUDIANTS, en 10.0.3.0/16
ETUDIANTS et ENSEIGNANTS auront besoin d'une route entre eux. La machine faisant le pont se chargera de faire passerelle par défaut. Pour ce faire, cette machine se verra attribuer une IP différente par interface :
- tap2 : 10.0.2.254 (ENSEIGNANTS)
- eth1 : 10.0.3.254 (ETUDIANTS)
La configuration
Ici, la machine va faire passerelle, donc il faut lui dire de "forward" les paquets qui ne lui sont pas destiné :
echo "1" > /proc/sys/net/ipv4/ip_forward
On enlève l'IP des interfaces réseaux qui vont être dans notre bridge :
#ifconfig tap0.2 0.0.0.0 #ifconfig tap0.3 0.0.0.0 #ifconfig tap2 0.0.0.0 #ifconfig eth1 0.0.0.0
On crée le bridge :
#brctl addbr br0
On rajoute les interfaces qui seront dans le bridge et on le met en route :
#brctl addif br0 tap0.2 #brctl addif br0 tap0.3 #brctl addif br0 tap2 #brctl addif br0 eth1
On monte le pont :
#ifconfig br0 up
Et peut-être iptables -A FORWARD -i br0 -j ACCEPT suivant la politique de firewall déjà en place.
On met les IP à notre passerelle :
#ifconfig tap2 10.0.2.254 netmask 255.255.0.0 #ifconfig eth1 10.0.3.254 netmask 255.255.0.0
On opte pour une stratégie par défaut où l'on droppe tous les paquets :
#ebtables -A FORWARD -P DROP #ebtables -A INPUT -P DROP #ebtables -A OUTPUT -P DROP
Les règles ebtables, pour ne pas refouler les demandes (on laisse "remonter dans la pile" tout ce qui vient sur nos interfaces réseaux et qui les désignent) :
#ebtables -t broute -A BROUTING -p ipv4 -i tap2 --ip-dst 10.0.2.254 -j DROP #ebtables -t broute -A BROUTING -p ipv4 -i eth1 --ip-dst 10.0.3.254 -j DROP
Et voici deux règles subtiles (ici, l'adresse MAC de tap2 est 7E:B2:5E:1D:69:01 et celle de eth1 est 00:13:8F:3F:91:12) :
#ebtables -t broute -A BROUTING -p arp -i tap2 -d 7E:B2:5E:1D:69:01 -j DROP #ebtables -t broute -A BROUTING -p arp -i eth1 -d 00:13:8F:3F:91:12 -j DROP
Il ne reste plus qu'à laisser passer de tap2 à eth1 (et de eth1 à tap2), de eth1 à tap0.2 (et de tap0.2 à eth1) et de tap2 à tap0.3 (et de tap0.3 à tap2) :
#ebtables -t filter -A FORWARD -i tap2 -o eth1 -j DROP #ebtables -t filter -A FORWARD -i eth1 -o tap2 -j DROP #ebtables -t filter -A FORWARD -i eth1 -o tap0.2 -j DROP #ebtables -t filter -A FORWARD -i tap0.2 -o eth1 -j DROP #ebtables -t filter -A FORWARD -i tap2 -o tap0.3 -j DROP #ebtables -t filter -A FORWARD -i tap0.3 -o tap2 -j DROP
Et pour que cela marche, les ENSEIGNANTS n'auront plus qu'à rajouter une route pour aller vers les ETUDIANTS et vice-versa.
Liens
Quelques documentations bien utiles :
- http://linux-net.osdl.org/index.php/Bridge (en anglais): un lien qui explique tout sur comment monter un bridge sous GNU/Linux
- http://ebtables.sourceforge.net/examples.html (en anglais): quelques exemples d'utilisation d'ebtables
@ Retour à la rubrique Sécurité et vie privée
Copyright
© 2007, 2010 Jiel Beaumadier et Tony Cheneau
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. |