Il est important de sécuriser le niveau 2 dans un réseau, car il s’agit de la porte d’entrée de ce dernier.
De nombreuses menaces existent, ainsi que de nombreuses méthodes de sécurité.
Nous allons voir certaines de ces menaces, ainsi que la configuration à mettre en place pour s’en protéger.
1) Port Security
Commençons par la sécurité la plus connu sur les switch : la sécurité de port.
Le but sera ici d’appliquer une restriction en fonction de l’adresse MAC source.
Seul un certain nombre d’adresses seront autorisées.
A quoi sert la sécurité de port ?
- A limiter le nombre d’adresse MAC dernière un port
- A se protéger du MAC Address Flooding
- A restreindre l’accès à certaines adresses MAC
- A désactiver le port / envoyer des logs en cas de violation
Le MAC Address Flooding consiste à envoyer des centaines / milliers de messages en indiquant à chaque fois une adresse MAC source différente.
Ainsi, le switch va remplir sa table d’adresse MAC, jusqu’à ce qu’elle soit pleine.
Une fois la table pleine, le switch ne pouvant pas en apprendre plus, il va passer en mode HUB.
Il va alors retransmettre toutes les frames qu’il reçoit sur tous les ports.
Cela peut être une technique d’attaque pour capter du trafic.
Voyons la configuration de la sécurité de port.
Tout d’abord, le port doit être en mode Access, car la sécurité de port se fait sur les ports qui font face à des clients.
Switch-1(config-if)#switchport mode access
Il faut ensuite activer la sécurité de port :
Switch-1(config-if)#switchport port-security
Nous pouvons ensuite limiter le nombre d’adresse MAC par port :
Switch-1(config-if)#switchport port-security maximum 1
Ici, une seule machine sera autorisée derrière le port.
Il y a trois options de gestion des adresses MAC :
- Dynamique
- Static
- Sticky
En mode Static, nous définissons nous même les adresses Mac autorisées.
Cette solution n’est pas très évolutive, et peut être longue à configurer.
L’avantage est que les adresses définies sont stockées dans la configuration.
Elles sont donc conservées en permanence.
En mode Dynamic, le switch apprend automatiquement les adresses. Il se base sur les frames reçues.
Les Mac autorisées seront donc les premières apprises.
Par contre, les adresses Mac ne sont pas conservées dans la configuration.
C’est pour cela qu’il y a l’option Sticky.
Elle permet au mode Dynamic d’enregistrer les adresses. Nous les retrouvons alors dans la configuration comme si elles avaient été configurées en Static.
Configuration Static :
Switch-1(config-if)#switchport port-security mac-address AAAA.BBBB.CCCC
Configuration Sticky :
Switch-1(config-if)#switchport port-security mac-address sticky
Sans cette option, le port est en mode Dynamique.
L’adresse MAC sera retenue dans la configuration comme ceci :
Switch-1#show running-config interface FastEthernet0/1 switchport mode access switchport port-security switchport port-security mac-address sticky switchport port-security mac-address sticky 0006.2AC7.70AB
On appel violation de port, quand les règles de sécurité ne sont pas respectées (ex : nombre d’adresse MAC dépassé)
Il existe 3 options pour la violation de port :
- Shutdown
- Protect
- Restrict
En mode Shutdown, le port est désactivé s’il y a violation. Il passe en Err-Disabled.
Une Trap SNMP est envoyée, un message Syslog est logué et le compteur de violation augmente.
Switch-1#show interfaces fastEthernet 0/1 FastEthernet0/1 is down, line protocol is down (err-disabled)
En mode Protect, les adresses MAC en trop sont ignorées.
Les messages avec une adresse Mac source non connue sont ignorés.
Le mode Restrict fait la même chose que le mode Protect,
En plus, une Trap SNMP est envoyée, un message Syslog est logué et le compteur de violation augmente.
Il y a deux moyens de sortir un port du mode Err-Disabled.
Soit en allant sur le port et en faisant un Shutdown puis No-Shutdown.
Soit en configurant le port pour qu’il remonte au bout d’un certain temps.
Switch-1(config)#errdisable recovery cause security-violation Switch-1(config)#errdisable recovery interval 60
Ainsi, le port va se réactivera au bout de 60 secondes.
Le Port Security Aging permet d’oublier les adresses Mac après un certain temps.
S2(config-if)# switchport port-security aging time 60 type inactivity
Ici, 60 est le temps en minutes.
Il existe 2 Types :
- Inactivity : l’adresse Mac est supprimée si elle est inactive pour le temps spécifié
- Absolute : l’adresse Mac est supprimée après le temps spécifié
Il est possible de rajouter l’option Static pour que les adresses configurées à la main puissent aussi être supprimées.
2) AAA et 802.1x
802.1x est un standard permettant d’améliorer la sécurité de notre réseau.
Le principe est simple, quand l’utilisateur se connecte au réseau, un Login / MDP va lui être demandé.
Cela peut être valable pour les connexions Wifi (le plus courant) et / ou pour les connexions Ethernet.
Si l’utilisateur ne fournit pas un Login / MDP correcte, il n’aura pas accès au réseau.
Le plus souvent, le 802.1x est utilisé sur les réseaux Wifi. Au lieu d’une clé wifi, l’utilisateur doit fournir ses identifiants. En entreprise, les identifiants correspondent en général au compte de l’utilisateur sur le domaine.
Dans un réseau sans fil, WPA Entreprise implémente 802.1x.
L’authentification de l’utilisateur se fera sur un serveur Radius.
Pour la suite, nous considérerons l’utilisation de 802.1x sur un switch.
Nous allons pouvoir choisir quels ports devront être contrôlés par 802.1x. Sur ces ports-là, les utilisateurs devront s’authentifier.
Tant qu’ils ne sont pas authentifiés, ils n’ont pas accès au réseau, ou bien ils seront placés dans un VLAN invité (avec des droits limités). C’est à l’administrateur de choisir le fonctionnement voulu.
De plus, il est possible de placer dans un VLAN invité, les clients ne prenant pas en charge EAP.
Voici un schéma du fonctionnement :
Lors-ce que le PC se connecte au switch, celui-ci lui demande ses identifiants grâce au protocole EAP – Extensible Authentification Protocol.
EAP permet différents types d’authentification. La liste donnée ci-dessus n’est pas exhaustive.
La plus simple est EAP-MD5. L’EAP-PEAP est la méthode la plus populaire.
En 802.1x le switch aura pour rôle de faire l’intermédiaire entre le client et le serveur d’authentification.
EAP permet au switch de demander les identifiants à l’utilisateur, pour ensuite l’authentifier sur un serveur RADIUS.
Comme vous pouvez le voir, il existe 3 rôles en 802.1x :
- Supplicant : la machine connectée à un port access, qui a besoin de s’authentifier
- Authenticator : l’équipement (switch ou borne wifi) qui contrôle l’accès au réseau
- Network Authentication Server : serveur qui sera interrogé pour l’authentification des utilisateurs
Voyons à présent la configuration du switch.
Premièrement, il faut activer le AAA – Authentication Authorization Accounting sur notre switch :
Switch-1(config)#aaa new-model
Ensuite, il nous faut spécifier l’adresse et la clé du serveur RADIUS :
Switch-1(config)#radius-server host 10.0.0.50 key NetworkLab
(Selon le serveur Radius que vous utilisez, il peut être nécessaire de spécifier les ports à utilisés)
Nous pouvons ensuite configurer AAA pour qu’il utilise RADIUS lors des authentifications 802.1x
Switch-1(config)#aaa authentication dot1x default group radius
Il faut ensuite active 802.1x sur le switch :
Switch-1(config)#dot1x system-auth-control
Puis il faut configurer les ports :
Switch-1(config)#interface fastEthernet 0/5 Switch-1(config-if)#switchport mode access Switch-1(config-if)#dot1x port-control auto
De cette manière, un hôte connecté à ce port devra s’authentifier.
Pour la configuration du port, nous avons trois options :
Le mode Auto permet l’authentification.
Le mode Force-authorized ne demande pas d’authentification. Le port est mis à l’état autorisé. Cette configuration est utile pour les ports sur lesquels des serveurs sont connectés. C’est le mode par défaut sur les ports.
Le mode Force-unauthorized met automatiquement le port en mode non autorisé. Les hôtes qui s’y connecte n’auront pas accès au réseau, ou alors simplement au VLAN invité.
Il est aussi possible de contrôler le nombre de tentative d’authentification :
Switch-1(config-if)#dot1x max-reauth-req 3
Les utilisateurs qui ne peuvent pas s’authentifier peuvent être placés dans un VLAN invité :
Switch-1(config-if)#dot1x guest-vlan 50
Vous pouvez consulter l’état Dot1x d’un port comme ceci :
3) Private VLAN
Le Private VLAN a été inventé afin d’isoler les hôtes au niveau 2.
Vous me direz que les VLAN standards font déjà cela, et vous aurez raison.
Mais parfois, l’utilisation des VLAN devient abusive.
Imaginons le cas où nous avons 10 serveurs à connecter au réseau, et que ces serveurs ne doivent pas pouvoir discuter entre eux (cas typique d’une DMZ).
Ou encore que nous souhaitions faire un réseau invité, ou les machines ne peuvent joindre que la passerelle.
Il nous faudrait alors 1 VLAN par machine.
Il en découlera alors une création de très nombreux sous réseau, et un gaspillage d’adresse relativement important.
L’idéal serait d’avoir un VLAN (et donc un sous réseau), dans lequel les utilisateurs ne peuvent pas discuter.
C’est ce que permettent les PVLAN.
PVLAN se compose d’une association de VLAN :
- Un VLAN Primary
- Un ou plusieurs VLAN Secondary
Le VLAN Secondary peut être de deux types :
- Isolated : les membres de ce VLAN ne peuvent pas communiquer entre eux
- Community : les membres de ce VLAN peuvent communiquer entre eux
Enfin, le port d’un switch peut fonctionner dans l’un des deux modes suivants :
- Host : Le port à un comportement qui découle du type de PVLAN auquel il est associé (Isolated ou Community)
- Promiscuous : le port peut communiquer avec les ports membres du même VLAN
Voici un schéma représentant cela :
Commençons par le routeur. Il est dans le PVLAN primaire, et le port auquel il est connecté est en mode Promiscuous. Tout le monde sera donc capable de communiquer avec le routeur.
Les serveurs 1 et 2 sont dans un PVLAN du type Community et les ports auxquels ils sont connectés sont en mode Host.
Ces deux serveurs seront donc capables de communiquer entre eux, ainsi qu’avec le routeur.
Les serveurs 3 et 4 sont dans un PVLAN du type Isolated, et les ports auxquels ils sont connectés sont en mode Host.
Les deux serveurs ne pourront donc pas communiquer entre eux, mais seulement avec le routeur.
De plus, vous remarquerez que toutes les machines sont dans le même sous réseau.
Pour mettre en place des PVLAN, il faut commencer par créer les PVLAN.
Avant toute chose assurez-vous que le switch est en mode VTP transparent :
Switch-1(config)#vtp mode transparent
Ensuite, créer les VLAN :
Switch-1(config)#vlan 201 Switch-1(config-vlan)#private-vlan community
Switch-1(config)#vlan 202 Switch-1(config-vlan)#private-vlan isolated
Switch-1(config)#vlan 200 Switch-1(config-vlan)#private-vlan primary Switch-1(config-vlan)#private-vlan association 201,202
Ensuite, nous pouvons associer les ports aux PVLAN :
Switch-1(config)#int fa 0/1 Switch-1(config-if)#switchport mode private-vlan promiscuous Switch-1(config-if)#switchport private-vlan mapping 200 201,202
Switch-1(config)#int fa0/2 Switch-1(config-if)#switchport mode private-vlan host Switch-1(config-if#switchport private-vlan host-association 200 201
Switch-1(config)#int fa0/3 Switch-1(config-if)#switchport mode private-vlan host Switch-1(config-if#switchport private-vlan host-association 200 201
Switch-1(config)#int fa0/4 Switch-1(config-if)#switchport mode private-vlan host Switch-1(config-if#switchport private-vlan host-association 200 202
Switch-1(config)#int fa0/5 Switch-1(config-if)#switchport mode private-vlan host Switch-1(config-if#switchport private-vlan host-association 200 202
Pour l’association, il faut d’abord spécifier le PVLAN Primary, et ensuite le PVLAN auquel appartient le port.
4) DHCP Snooping
Le DHCP Snooping est une fonctionnalité qui permet d’améliorer la sécurité d’une infrastructure utilisant un DHCP.
DHCP Snooping permet de :
- Choisir les ports derrière lesquels peut se trouver un DHCP
- S’assurer que les hôtes utilisent l’IP qui leur a été associée
- Définir un maximum de requêtes DHCP par port
- Etc…
Choisir les ports derrière lesquels un DHCP peut être placé est important.
En effet, si un attaquant met en place un DHCP, cela peut créer des erreurs sur le réseau. Pire encore, l’attaquant pourrait contrôler le trafic sur le réseau.
Pour choisir les ports de confiances, la configuration est simple :
Switch-1(config)#ip dhcp snooping Switch-1(config)#ip dhcp snooping vlan 99 Switch-1(config)#interface fastEthernet 0/1 Switch-1(config-if)#ip dhcp snooping trust
Seul un DHCP placé derrière le port Fa 0/1 pourra répondre aux requêtes
Ici, le DHCP Snooping ne sera effectué que sur le VLAN 99
Avec DHCP Snooping, le switch va remplir une table de correspondance indiquant quelle IP a été assignée à quelle adresse MAC sur quel port.
La fonctionnalité IP Source Guard peut se baser sur cette table, afin d’empêcher l’IP Spoofing.
Cela consiste à usurper l’IP d’une machine, pour se faire passer pour elle.
Dans le cas où l’attaquant ne se trouve pas derrière le bon port, il sera bloqué.
Voici la table de correspondance (après qu’un client ai fait une requête DHCP):
La configuration se fait comme suit :
Switch-1(config)#interface fastEthernet 0/6 Switch-1(config-if)#ip verify source vlan dhcp-snooping [port-security] Switch-1(config)#interface fastEthernet 0/7 Switch-1(config-if)#ip verify source vlan dhcp-snooping [port-security]
La switch va donc vérifier l’adresse IP source des Frames que l’hôte envoie.
L’option Port-Security permet de rajouter la vérification de l’adresse MAC source
5) Spanning Tree
Nous avons vu dans un précédent article comment configurer Spanning Tree.
Voyons ici comment ajouter de la sécurité au processus Spanning Tree.
Première option à activer, le BPDU Guard.
Cette option va simplement désactiver le port (en Err-Disabled) si des BPDU sont reçus sur le port.
Cela permet d’empêcher un attaquant de prendre la place du Root Bridge.
En effet, pour devenir le Root Bridge, l’attaquant devrait envoyer des BDPU, ce qui aurait pour effet de couper le port.
Cette option est à activer sur les ports Access.
Switch-1(config)#interface fastEthernet 0/1 Switch-1(config-if)#switchport mode access Switch-1(config-if)#spanning-tree bpduguard enable
Voici le résultat si BPDU Guard est activé et que des BPDU sont reçus :
La deuxième option se nomme Root Guard.
Cette option est à activer sur le Root Bridge et le Backup Bridge.
Nous pouvons alors choisir derrière quel port ne peut pas se trouver un Root Bridge.
Cela permet à nouveau de s’assurer que le Root Bridge est bien le switch désiré.
Concrètement, nous devons activer cette fonctionnalité sur un port d’un switch.
Ensuite, si des BPDU avec Bridge ID plus faible (que celui du switch) sont reçus sur ce port, ce dernier passe en mode Root-inconsistent. Le port va alors écouter les BPDU. Il sera réactivé lors-ce que le switch d’en face cessera d’envoyer des BPDU avec un BID plus faible.
Pour activer cette sécurité, il suffit d’entrer la commande suivante sur le port voulu :
Switch-1(config)#interface fastEthernet 0/1 Switch-1(config-if)#spanning-tree guard root
Il peut être judicieux d’activer aussi Root Guard sur le Backup Bridge.
Voici un schéma résumant l’utilisation de BPDU Guard et Root Guard :
Enfin, il existe une option nommée BPDU Filter.
Quand cette option est configurée de manière globale, tous les ports en mode Portfast arrêtent d’envoyer et de recevoir des BPDU.
Par contre, si un BPDU est reçu sur un port, ce dernier repasse en mode de fonctionnement normal.
Switch-1(config)#spanning-tree portfast bpdufilter default
Sinon, le BPDU Filtrer peut être configuré manuellement sur chaque interface.
Dans ce cas, cela revient au même que désactiver le Spanning Tree sur cette interface. Si un BPDU est reçu, il est ignoré.
Switch-1(config)#interface fastEthernet 0/1 Switch-1(config-if)#spanning-tree bpdufilter enable
6) VACL
Les VACL ou Vlan ACL sont des Access List à appliquer sur des VLAN. Elles se configurent sur un switch.
A la différence des ACL classiques qui s’appliquent sur un routeur, et qui ne peuvent que filtrer qu’entre les VLAN, les VACL permettent de filtrer le trafic au sein d’un même VLAN.
Prenons l’exemple suivant :
PC 1et PC 2 sont dans le même VLAN.
A l’aide d’une VACL, nous pouvons empêcher les PC de s’envoyer des Ping.
La configuration est un peu plus compliquée que pour une ACL standard.
Tout d’abord, il faut créer une ACL qui capte le trafic voulu :
Switch-1(config)#ip access-list extended 100 Switch-1(config-ext-nacl)#permit icmp 10.0.10.0 0.0.0.255 10.0.10.0 0.0.0.255
Nous pouvons ensuite créer la VACL :
Switch-1(config)#vlan access-map NOICMP 10 Switch-1(config-access-map)#match ip address 100 Switch-1(config-access-map)#action drop
Ici nous faisons reference à l’ACL 100, qui capte le traffic ICMP voulu.
Ensuite, nous choisissons l’action à effectuer.
Switch-1(config)#vlan access-map NOICMP 20 Switch-1(config-access-map)#action forward
Etant donné qu’il y a un implicite “Drop” à la fin, nous devons rajouter un Forward.
Switch-1(config)#vlan filter NOICMP vlan-list 10
Testons la configuration.
Du PC 1 nous envoyons un Ping à PC 2 :
Le ping ne passe pas.
Néanmoins, le PC 2 est tout de même joignable. Vous pouvez voir cela en initiant une connexion Telnet. Si vous n’avez pas configuré de serveur Telnet, vous obtiendrez un « Connection Refused », ce qui indique que PC 2 a répondu. Un Timeout indique que PC 2 n’est pas joignable.
Au final, seuls les messages ICMP sont filtrés.
Comme toujours, les utilisations des ACL peuvent être très diverses.
Libre à vous de faire différents tests.
7) Conclusion
Nous voici arrivés au terme de cette présentation de la sécurité au niveau 2.
Nous avons eu l’occasion d’effleurer différentes notions.
Bien entendu, nous pourrions parler de chaque notion pendant des heures, et leur consacrer à chacune un article complet.
L’important est ici de retenir les concepts de base, et de connaitre les configurations associées.
Bien entendu, la liste donnée dans cet article ne saurait être exhaustive. La sécurité est un domaine très vaste.
Bonjour,
Merci infiniment, très bon article.
J’aimerai savoir la différence entre les VACL et les PVLAn ? j’ai l’impression qu’ils ont le même objectif.
Merci d’avance
Bonjour,
Les PVLAN permettent les scénarios décris dans l’article. Le filtrage se fait au niveau 2.
Les VACL fonctionnent de manière similaire aux ACL classiques. Le filtrage se fait au niveau 3, sur des IP définies.
Il est possible de reproduire certains comportement des PVLAN avec les VACL, mais cela complique les choses.
une autre question svp, peut on utiliser les VACL dans un router ou switch L3 ?
Merci bcp.
bonjour,
merci pour ces explications inédites
Merci !!