Les VLAN

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 ».

Lister les vlans

Les informations VLAN sont stockés dans le fichier « vlan.dat » présent dans la mémoire NVRAM.

Switch#dir nvram:
Contenu 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 ?

Vlan Inter-Switch

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 :

Schéma GNS3 mise en place de VLAN

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
Configuration VLAN ACCESS

Comparons cette interface avec une interface non configuré par exemple interface GigabitEthernet0/1.

Interface sans VLAN

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 ».

VLAN sur SW1

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 access SW2

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
Configuration du 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 :

Configuration IP

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.

Erreur passerelle

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é.

Les types de VLAN

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
commande 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
Information 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