Dans cette article, nous allons verrons les élément pour comprendre le concept de VLAN. Pour rappel (ou non), un réseau local regroupe tous les périphériques dans le même domaine de diffusion. Ce domaine englobe tous les périphériques reliés au réseau local. Ainsi, si un périphérique émet une trame de diffusion, tous les autres périphériques reçoivent une copie. De ce point de vue, un domaine de diffusion équivaut à un réseau local.
Par défaut, un commutateur traite toutes ses interfaces comme appartenant au même domaine de diffusion. En d’autres termes, un commutateur diffuse toute trame entrante vers tous les autres ports. Pour séparer en deux LAN, par exemple un LAN Prod et un LAN administratif, il faudrait utiliser deux commutateurs. Cependant, avec les VLANs, nous pouvons associer des ports à différents domaines de diffusion, réduisant ainsi la diffusion des trames et optimisant la bande passante.
Pourquoi mettre en place des VLAN ?
Les raisons courantes de créer des domaines de diffusion plus petits avec des VLANs incluent la réduction de la surcharge processeur sur chaque périphérique, l’amélioration des performances de l’hôte, la diminution des risques de sécurité, et l’application de politiques de sécurité différentes par VLAN. Les VLANs permettent aussi des conceptions plus flexibles en regroupant les utilisateurs par service ou groupe, facilitent la résolution rapide des problèmes, et réduisent la charge de travail du protocole STP en confinant un VLAN à un seul commutateur d’accès.
Configuration des VLANs
Configurer un VLAN sur un switch se fait de manière simple. Il suffit de le déclarer sur le commutateur. Par défaut, le commutateur attribue tous ses ports au VLAN1, le seul VLAN qui est présent par défaut.
Switch>enable
Switch#configure terminal
Switch(config)#vlan 2
Dans le mode de configuration de VLAN reconnaissable par le prompteur (config-vlan), d’autres options , nous est ouvert, nous pouvons ainsi nommée notre vlan.
Switch(config-vlan)#name nom-du-vlan
Il est possible de lister les VLANs en mode utilisateur, avec la commande « show » suivi du mot clé « vlan ».
Les informations VLAN sont stockés dans le fichier « vlan.dat » présent dans la mémoire NVRAM.
Switch#dir nvram:
Un Vlan se voit attribué un numéro, souvent nous utilisons le terme de « tag » du VLAN
Communication des VLAN
Lorsqu’un PC et un commutateur échangent des informations, nous devons spécifier le numéro de VLAN (également connu sous le nom de tag VLAN). Ainsi, nous modifions la trame en ajoutant le numéro du VLAN dans l’entête. Précisément, nous ajoutons deux champs : TPID et TCI.
Le TPID spécifie le type de tag, existant sous deux formes : ISL ou 802.1Q. Le tag ISL, le plus ancien, n’est quasiment plus utilisé. Cisco est propriétaire de ce protocole. La norme 802.1Q, qui représente le deuxième type de VLAN, le remplace largement.
Le TCI se divise en trois champs : « priorité » (utilisé lorsque nous mettons en place de la QoS (Qualité de Service), CFI, qui indique si le tag concerne une trame Ethernet ou Token-ring, et VLAN ID, qui contient le numéro de VLAN. Le champ VLAN ID, codé sur 12 bits, nous permet de créer jusqu’à 4096 VLANs.
Comme vous pouvez le voir dans l’illustration ci-dessus, nous ne pouvons attribuer qu’un seul VLAN, ce qui peut être un problème dans le cas où 2 commutateurs serait interconnectés. Qu’elle vlan configuré entre les 2 commutateurs ?
Le Trunking et le Access
Pour répondre à cette problématique, nous faisons appel au concept « trunking ». Cette technologie, va faire de l’agrégation de VLAN. Nous aurons donc physiquement une seule liaison entre les commutateurs mais logiquement nous en aurons plusieurs, cela permettra de laisser transiter les vlan dans le réseau.
Deux modes de liaisons avec le VLAN existent : le mode « access » et le mode « trunk ». Le mode « access » permet l’accès à un seul VLAN et le port recevant la trame la traitera en conséquence. Le port « trunk », autorisant plusieurs VLANs, agit comme un intermédiaire lorsqu’il reçoit ce mode de liaison. Il reconnaît qu’il doit laisser passer la trame tout en sachant qu’il n’en est pas le destinataire final. Cela implique que la configuration du port diffère entre l’attribution d’un port en mode « access » et un port en mode « trunk ».
Configuration du mode Access et du mode Trunking
La configuration sera faite à l’aide de l’outil GNS3. Les commutateurs exécuteront une image vios-l2, les clients des VPCS. La topologie de notre lab sera la suivante :
Configuration de base
Dans la configuration de base, nous attribuerons un nom à nos commutateurs afin d’être conforme à notre illustration. Le commutateur de gauche ce nommera SW1 et le commutateur de droite SW2.
Configuration du nom sur le commutateur de gauche
Switch>enable
Switch#configure terminal
Switch(config)#hostname SW1
SW1(config)#end
SW1#copy running-config startup-config
Configuration du nom sur le commutateur de droite
Switch>enable
Switch#configure terminal
Switch(config)#hostname SW2
SW2(config)#end
SW2#copy running-config startup-config
Création des VLAN
La configuration suivante sera à faire sur les 2 commutateurs en mode configuration.
SWx(config)#vlan 2
SWx(config-vlan)#name ROUGE
SWx(config-vlan)#vlan 3
SWx(config-vlan)#name ORANGE
SWx(config-vlan)#do copy running-config startup-config
Configuration du mode « access » du commutateur SW1
Dans notre illustration, l’interface Gi0/0 est connecté au PC. Le PC étant un équipement final, il sera donc en mode « access ». Le mode « access » se configure sur le port. Cela se fait en indiquant la commande interface suivi du nom de l’interface.
SW1(config)#interface gigabitEthernet 0/0
Nous indiquerons que le port du switch sera en mode « access » en exécutant la commande suivante :
SW1(config-if)#switchport mode access
Ensuite nous devons indiquer le vlan qui sera attribué au port.
SW1(config-if)#switchport access vlan 2
Nous pouvons vérifier la configuration de notre interface, vu qu’elle n’a pas été enregistré, nous consulterons le fichier « running-config » plus particulièrement la section « interface GigabitEthernet0/0 »
SW1(config-if)#do show running-config | s interface GigabitEthernet0/0
Comparons cette interface avec une interface non configuré par exemple interface GigabitEthernet0/1.
Le mode auto negotiation
Notre interface GigabitEthernet 0/0 affiche deux lignes de plus que GigabitEthernet 0/1, montrant le mode et le VLAN associé. Ces deux lignes représentent notre configuration. Examinons la configuration par défaut de GigabitEthernet 0/1, qui révèle le type de média et la « negotiation auto ». Comprendre le type de média est simple, contrairement à « negotiation auto ». Ce paramètre signifie que le commutateur s’accorde avec le périphérique connecté. Si connecté à un PC, le port adopte le mode access, car les cartes réseau des PC utilisent ce mode. Que se passe-t-il si les deux ports sont en « negotiation auto » ? Ils se mettent en mode access, permettant au commutateur de fonctionner dès le déballage. Par défaut, le VLAN attribué est le VLAN1.
Dans notre schéma, l’interface GigabitEthernet 0/1 doit être membre du vlan 3 soit la configuration suivante :
SW1(config)#interface gigabitEthernet 0/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 3
Ensuit nous vérifierons la commande comme nous l’avons fait précédemment, c’est-à-dire en consultant le fichier running config, mais nous pouvons compléter cette vérification à l’aide de la commande « show vlan » qui devra être exécuter en mode « exec ».
Ici, nous pouvons lire que Gi0/0 (qui est le nom court de gigabitEthernet 0/0) appartient au vlan 2 et que Gi0/1 appartient au vlan 3.
Configuration du « mode access » du commutateur SW2
Sur le commutateur SW2, nous allons configurer de la même façon
SW2(config)#interface gigabitEthernet 0/0
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 2
SW2(config-if)#interface gigabitEthernet 0/1
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 3
Nous vérifierons notre configuration la running-config en exécutant la commande « show ». Nous filtrons pour ne voir que les sections qui nous intéresse c’est à dire les noms des ports débutant par « GigabitEthernet0 »
SW2#show running-config | s interface GigabitEthernet0
Configuration du mode trunk
Nous configurerons le mode trunk entre des équipements intermédiaires. La liaison entre les deux commutateurs utilise le port GigabitEthernet 0/2 sur le commutateur SW1, et SW2 porte le même nom de port. Ainsi, les deux commutateurs auront exactement la même configuration. Pour commencer, sur l’interface GigabitEthernet 0/2 du commutateur SW1, nous mettrons le port en mode trunk.
SW1(config)#interface gigabitEthernet 0/2
SW1(config-if)#switchport trunk encapsulation dot1q
SW1(config-if)#switchport mode trunk
La ligne en verte « SW1(config-if)#switchport mode trunk », spécifie au switch que nous utiliserons la norme 802.1.Q. Sur les gammes des switch de Niveau 2.
Par défaut, tous les VLANs sont autorisés sur notre interface, nous pouvons préciser que nous voulons autoriser les trames tagués 2 et 3.
SW1(config-if)#switchport trunk allowed vlan 2,3
Dans le cas où je souhaiterais indiquer une place, la « , »devra être remplacer par un « - » par exemple pour autoriser les tags de 2 à 10, la commande sera la suivant #switchport trunk allowed vlan 2-10
Sur le commutateur SW2, nous allons configurer de la même manière
SW2(config)#interface gigabitEthernet 0/2
SW2(config-if)#switchport trunk encapsulation dot1q
SW2(config-if)#switchport mode trunk
SW2(config-if)#switchport trunk allowed vlan 2,3
Nous vérifierons que notre port est bien en mode trunk et qu’il autorise les trames tagguées 2 et 3 avec la commande suivante :
SW2#show interface trunk
Nous testerons que la communication à l’intérieur d’un même LAN est fonctionnelle. Le VLAN 2 aura comme adresse réseau 192.168.2.0/24 et le vlan 3 aura l’adresse réseau 192.168.3.0/24. Nous attribuerons les adresses IP de la façon suivante :
Depuis PC1, nous exécutant une commande ping vers PC3 qui appartient au même VLAN.
A contrario, si depuis PC1, nous tentons de communiquer avec PC, nous aurons un message d’erreur.
Le message d’erreur renvoyer par le VPCS, nous indique que la passerelle n’a pas été trouvé. Ce qui est normal du fait qu’il n’y a pas de passerelle dans mon lab. Ce message nous indique aussi qu’il a besoin d’un routeur ou d’un équipement de niveau 3, c’est-à-dire, il a besoin d’une adresse IP. Si l’IP est nécessaire à la communication, c’est que nous sommes plus dans le domaine de diffusion, donc plus dans le LAN. Nous pouvons donc en conclure que les équipements qui sont dans le VLAN2 sont isolé du VLAN3.
Les types de VLAN
Dans les infrastructures nous retrouverons généralement plusieurs types de VLAN. Ici, nous listerons les types de VLAN les plus couramment utilisé.
Vlan par défaut
Comme son nom le laisse sous-entendre, le VLAN par défaut est présent par défaut, c’est-à-dire que lorsque le commutateur est banché tout de suite après l’avoir sortie de son carton, il est déjà présent. Il est associé au VLAN1. Sur ce vlan transitera les trames non taguées. En bref, lorsque nous nous branchons pour la première fois notre commutateur (même un attaquant), il sera fonctionnel car les trame passerons tous sur le VLAN1.
VLAN natif
Le VLAN natif œuvre sur les ports « trunké ». En effet, lorsqu’une trame non-taggué (par exemple une trame DHCP Discover) arrive sur un port trunk, ce dernier doit pouvoir transiter. Pour ce faire, la trame sera placée dans le VLAN Natif.
VLAN Utilisateur
Dans notre exemple, les VLAN 2 et 3 sont des VLAN utilisateurs, ce sont des VLANs dédié à la production.
VLAN de Management
Le VLAN de management qui n’est présent dans l’illustration ressemble à un vlan utilisateur à l’exception à des administrateurs réseau. La sécurité de ce vlan doit être assuré à tous les niveaux (DICP – Disponibilité Intégrité Confidentialité Preuve).
Sécurité des VLANs
Comme écrit précédemment, le VLAN par défaut est le VLAN1. Il gérera les flux des trames non-tagguées. Ce qui peut poser un problème de vulnérabilité, prenons le cas d’un attaquant qui se connecter à votre réseau depuis une prise murales RJ45 connecté à un switch. Il aura donc accès au VLAN 1. De cet accès, il fera en sorte de remonter peu à peu votre réseau. Pour ce faire, il pourra utiliser une attaque appelé attaque double-tagging. Cette attaque vise à ajouter à encapsuler un deuxième tag de vlan. Ainsi lorsque la trame arrivera sur le port, la trame se présentera avec le VLAN1, puis une fois rentrée le commutateur désencapsulera la trame qui laissera apparaître le second tag qu’il traitera comme légitime.
Des voisins un peu trop bavard
Encore faut-il connaitre tous les VLAN présent dans mon infrastructure. Dans la configuration par défaut d’un commutateur un attaquant aura accès à des informations qui utilisera pour construire son attaque. En effet, nous avons vu plus tôt que tous les ports étaient par défaut en « negociate », il négocie avec son voisin pour avoir des informations de ce dernier. Il s’appuiera sur un protocole de voisinage comme le CDP ou alors LLDP. Le premier est propriétaire CISCO, même si nous le trouvons dans d’autre équipement que ceux proposé par CISCO. Le second est un protocole Standard. Le protocole de voisinage est verbeux, pour s’en rendre compte, il nous suffit de connecteur deux commutateurs ensemble. Par exemple, SW1 et SW2.
Sur SW1 exécuter la commande suivante, pour afficher ses voisins.
SW1#show cdp neighbors
Ici, nous avons une information nous indiquant que son voisin se nomme SW2, il est connecté sur le port Gig0/0. Nous avons donc le nom de notre voisin, essayons d’en savoir plus sur ce voisin, pour cela, il nous faudra exécuter la commande :
SW1#show cdp entry SW2
Recherche des exploits pour une attaque
Vous pouvez voir que le VLAN Native est le VLAN 1, ce qui suggère une configuration spécifique. Cependant, ce n’est pas la seule information préoccupante. Des détails sur notre IOS sont également disponibles. L’attaquant trouve ainsi une piste d’attaque. Il cherchera des failles non corrigées dans votre OS. Il obtiendra des informations sur les vulnérabilités via des sites internet comme https://exploit-db.com.
Contre-mesure à envisager
Nous pouvons désactiver le protocole CDP sur les commutateurs CISCO. Cette action entraîne certains effets qu’il faudra prendre en considération. En effet, d’autres technologies, comme le MDI, dépendent du CDP. Ce dernier permet l’usage de câbles croisés à la place des droits. En désactivant le CDP, il faut être rigoureux. Sécurité et rigueur vont de pair en sécurité informatique. On peut désactiver le CDP sur certains ports spécifiques. Sur des ports connectés à un autre commutateur sécurisé, on pourrait garder le CDP actif. Mais sur les ports pour PC, on désactiverait le CDP. Ainsi, nous choisirions le port GigabitEthernet0/0 et le port GigabitEthernet0/1. Sur ces interfaces, nous désactiverions le CDP.
SW1(config)#interface range gigabitEthernet 0/0-1
SW1(config-if-range)#no cdp enable
La préconisation de l’ANSSI est de désactiver le CDP sur le commutateur.
SW1(config)#no cdp run
Un autre point de vigilance est à apporter concernant les VLANs est le protocole DTP. Précédemment, nous avons observé que le port se configure en « mode negotiate » par défaut. De même, si le port d’un commutateur se connecte à un port d’un autre commutateur configuré en mode trunk. Le port en négociate passera en mode trunk. Ce mécanisme s’appuie sur le protocole DTP pour réaliser cette action.
Si une personne malveillante se connecte à un port en mode negotiate et configure sa machine pour le trunking, elle récupérera la liste des VLAN autorisés dans le trunk. Ce protocole est donc aussi à être désactiver. Prenons l’exemple de la désactivation du DTP des interfaces gigabitEthernet 0/0 à l’interface gigabitEthernet 0/3, il faudra alors configurer de la façon suivante :
SW1(config)#interface range gigabitEthernet 0/0-3
SW1(config-if-range)#no negotiation auto
Pour respecter les bonnes pratiques, nous éteindrons toutes les interfaces qui ne seront pas utilisées. Pour ce faire, il faudra utiliser la commande no shutdown sur la configuration de ou des interfaces concernées.
SW1(config)#interface range gigabitEthernet 0/0-3
SW1(config-if-range)#no shutdown