1. Qu’est-ce que BPDU Guard ?
T’es-tu déjà demandé ce qu’est BPDU Guard et comment il protège ton réseau ?
Voyons cela simplement, avec un exemple.
Figure 1 – Un switch pirate envoie des BPDUs pour revendiquer le rôle de Root Bridge
SW1 est le Root Bridge, avec le Bridge ID
32769:AABB.CCDD.EE01
SW2 possède un port (G0/2) configuré avec PortFast, normalement destiné aux périphériques finaux.
Mais voici le problème :
Un switch rogue est connecté sur ce port d’accès. Au lieu de rester silencieux, il envoie des BPDUs avec une priorité inférieure : 4096:AABB.CCDD.EE10
, meilleure que celle du Root Bridge actuel.
Comme BPDU Guard n’est pas activé, SW2 accepte le BPDU et le transmet dans la topologie STP.Without BPDU Guard
Sans BPDU Guard
Le switch rogue remporte l’élection du Root Bridge, car il annonce une priorité de 4096
, meilleure que celle de SW1 32769
,
Il devient alors le nouveau Root Bridge.
Figure 2 – Le switch rogue devient Root Bridge en envoyant des BPDUs supérieurs
Toute la topologie Spanning Tree est compromise, et tout cela à cause d’un simple port d’accès non sécurisé.
C’est précisément ce que la fonctionnalité BPDU Guard est conçue pour empêcher.
Solution : Activer BPDU Guard
Pour éviter cette situation, BPDU Guard doit être appliqué sur le port configuré avec PortFast.
BPDU Guard rejette tout BPDU entrant et place immédiatement le port en état err-disable (down/down).
Cela garantit que les ports d’accès, typiquement connectés à des périphériques finaux comme des PC ou des imprimantes, ne puissent pas participer au STP.
Avec BPDU Guard
Reprenons notre exemple avec BPDU Guard activé sur l’interface connectée au switch rogue.
Figure 3 – BPDU Guard bloque le switch rogue en désactivant l’interface
La fonctionnalité BPDU Guard détecte le BPDU entrant sur l’interface et désactive immédiatement le port afin de protéger le réseau.
*Dec 8 12:58:28.065: %SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Gi0/2 with BPDU Guard enabled. Disabling port.
*Dec 8 12:58:28.066: %PM-4-ERR_DISABLE: bpduguard error detected on Gi0/2, putting Gi0/2 in err-disable state
*Dec 8 12:58:29.073: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to down
*Dec 8 12:58:30.109: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to down
Comme tu peux le voir ci-dessus, un BPDU a été reçu sur l’interface G0/2 alors que BPDU Guard était activé.
Cet événement a immédiatement provoqué la mise hors service du port.
2. Configuration de BPDU Guard
Avant de plonger dans la configuration, précisons un point important :
BPDU Guard et PortFast sont deux fonctionnalités distinctes.
Bien qu’elles soient souvent utilisées ensemble, elles peuvent être configurées indépendamment selon les besoins de ton réseau.
Si tu veux que des périphériques finaux (comme des PC ou des imprimantes) accèdent instantanément au réseau et soient protégés contre les switches rogue, tu dois activer à la fois PortFast et BPDU Guard sur le même port.
Exemple de configuration
Dans cet exemple, nous allons configurer :
PortFast → pour ignorer le délai habituel des états STP.
BPDU Guard → pour désactiver le port si un BPDU inattendu est reçu.
Appliquons d’abord PortFast sur l’interface G0/2 :
Figure 4 – Configuration de PortFast sur l’interface G0/2 de SW2 avant d’activer BPDU Guard
Configuration de BPDU Guard
BPDU Guard peut être configuré de deux façons :
Sur des ports individuels : appliqué manuellement, port par port.
Globalement : appliqué automatiquement à toutes les interfaces déjà configurées avec PortFast.
Activer BPDU Guard sur un port individuel
Étapes de configuration :
Entrer en mode configuration d’interface :
SW2(config)# interface GigabitEthernet0/2
Activer BPDU Guard sur l’interface :
SW2(config-if)# spanning-tree bpduguard enable
Figure 5 – Activation de BPDU Guard sur l’interface G0/2
Vérification du statut de BPDU Guard
Pour confirmer que BPDU Guard est bien activé, utilise la commande :
SW2(config-if)# show spanning-tree interface g0/2 detail
Port 3 (GigabitEthernet0/2) of VLAN0001 is designated forwarding
Port path cost 4, Port priority 128, Port Identifier 128.3.
Designated root has priority 32769, address 50e2.aa04.6b00
Designated bridge has priority 32769, address 50e2.aa04.6b00
Designated port id is 128.3, designated path cost 0
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 1
The port is in the portfast edge mode
Link type is point-to-point by default
Bpdu guard is enabled
BPDU: sent 3, received 0
Comme tu peux le voir, la fonctionnalité BPDU Guard est activée !
Comportement lors de la réception d’un BPDU
Reprenons notre exemple : le switch rogue envoie un BPDU alors que BPDU Guard est activé.
Figure 6 – BPDU Guard désactive le port et le place en err-disabled
L’interface est immédiatement désactivée et placée en err-disabled
.
On peut le vérifier avec :
SW2# show interfaces g0/2
GigabitEthernet0/2 is down, line protocol is down (err-disabled)
!output omitted
Le protocole de ligne est down et l’état err-disabled est bien affiché.
Désactivation de BPDU Guard sur un port individuel
Dans certaines situations, il peut être nécessaire de désactiver BPDU Guard sur une interface spécifique. Cela se fait directement en mode configuration d’interface :
Figure 7 – Désactivation de BPDU Guard sur l’interface G0/2 de SW2
SW2(config)# int g0/2
SW2(config-if)# spanning-tree bpduguard disable
Cette commande supprime la protection BPDU Guard uniquement sur ce port.
Activer BPDU Guard globalement
BPDU Guard peut aussi être activé globalement, ce qui l’applique automatiquement à toutes les interfaces configurées avec PortFast :
SW2(config)# spanning-tree portfast bpduguard default
⚠️ Assure-toi de vérifier quelles interfaces de ton switch sont configurées en PortFast avant d’appliquer cette commande.
3. Comprendre l’état ErrDisable
Nous avons vu que lorsqu’un BPDU Guard détecte un BPDU, il coupe immédiatement le port afin de protéger le réseau.
L’interface entre alors dans l’état err-disabled avec un statut down/down.
Figure 8 – L’interface passe en err-disabled après réception d’un BPDU depuis un switch rogue
Une fois que l’interface est down, ton rôle d’ingénieur réseau est de retirer le périphérique rogue avant d’essayer de rétablir l’interface.
Tu peux ensuite récupérer le port en utilisant l’une des deux méthodes de récupération pour l’état ErrDisable.
4. Récupérer un port en ErrDisable
Il existe deux méthodes :
1) Récupération manuelle
Tu peux réinitialiser le port manuellement en utilisant les commandes shutdown
et no shutdown
:
SW2(config)# interface g0/2
SW2(config-if)# shutdown
SW2(config-if)# no shutdown
L’interface repasse alors à l’état UP/UP, et si aucun périphérique rogue n’envoie de BPDU, elle reste opérationnelle.
SW2# show interfaces g0/2
GigabitEthernet0/2 is up, line protocol is up (connected)
!output omitted
2) Récupération automatique (ErrDisable Recovery)
La seconde méthode est la récupération automatique, appelée ErrDisable Recovery.
Les switches Cisco disposent d’une fonctionnalité qui permet de réactiver les ports automatiquement 300 secondes après l’événement.
Par défaut, ce mécanisme est désactivé. Tu peux vérifier son état actuel avec :
SW2# show errdisable recovery
ErrDisable Reason Timer Status
----------------- --------------
arp-inspection Disabled
bpduguard Disabled
!output omitted
Timer interval: 300 seconds
Interfaces that will be enabled at the next timeout:
Ici, on voit que la raison bpduguard est désactivée.
Activer la récupération automatique
Pour activer la récupération automatique liée à BPDU Guard :
SW2(config)# errdisable recovery cause bpduguard
Figure 9 – ErrDisable Recovery réactive automatiquement le port après 300 secondes
Vérification :
SW2# show errdisable recovery
ErrDisable Reason Timer Status
----------------- --------------
arp-inspection Disabled
bpduguard Enabled
!output omitted
Timer interval: 300 seconds
Interfaces that will be enabled at the next timeout:
Interface Errdisable reason Time left(sec)
--------- ----------------- --------------
Gi0/2 bpduguard 299
Dans cet exemple, Gi0/2 est programmé pour se rétablir dans 299 secondes.
Comportement lors de la récupération
Une fois le timer écoulé, le port est automatiquement restauré à l’état up/up.
Voici les logs correspondants :
*Dec 8 15:30:45.261: %PM-4-ERR_RECOVER: Attempting to recover from bpduguard err-disable state on Gi0/2
*Dec 8 15:30:47.290: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to up
*Dec 8 15:30:48.290: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to up
Ajuster le timer de récupération
Le timer de récupération est par défaut de 300 secondes.
Tu peux le modifier dans une plage allant de 30 à 86400 secondes :
SW2(config)# errdisable recovery interval ?
<30-86400> timer-interval(sec)
Exemple : définir un intervalle de 30 secondes :
SW2(config)# errdisable recovery interval 30
Ce timer s’applique à toutes les causes actives d’errdisable recovery.
5. Conclusion
BPDU Guard désactive immédiatement un port s’il reçoit un BPDU, tant que la fonctionnalité est activée sur ce port.
Cela empêche des switches non autorisés d’interférer avec la topologie Spanning Tree.
Pourquoi c’est important – Un seul BPDU sur un port d’accès peut perturber le STP. BPDU Guard l’arrête instantanément.
Comportement – Lorsqu’il est déclenché, le port est placé en état err-disabled (down/down).
Comment le configurer –
Par port :
spanning-tree bpduguard enable
Globalement :
spanning-tree portfast bpduguard default
Comment récupérer le port –
Manuellement :
shutdown / no shutdown
Automatiquement :
errdisable recovery cause bpduguard
Dans la prochaine leçon, nous verrons BPDU Filter, une fonctionnalité associée qui permet de contrôler si les ports envoient ou traitent des BPDUs, offrant ainsi plus de flexibilité dans le comportement des edge ports.