BPDU Guard

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.

STP topology where a rogue switch becomes Root Bridge after sending a BPDU – example of what BPDU Guard prevents

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.

What is BPDU Guard: rogue switch becomes Root Bridge by using a lower Bridge ID in STP topology

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.

What is BPDU Guard: port G0/2 disabled after rogue switch sends BPDU, blocked by BPDU Guard

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 :

Switch configuration example applying BPDU Guard and PortFast on interface G0/2 to protect against rogue BPDUs

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 :

  1. Sur des ports individuels : appliqué manuellement, port par port.

  2. Globalement : appliqué automatiquement à toutes les interfaces déjà configurées avec PortFast.

Activer BPDU Guard sur un port individuel

Étapes de configuration :

  1. Entrer en mode configuration d’interface :

SW2(config)# interface GigabitEthernet0/2
  1. Activer BPDU Guard sur l’interface :

SW2(config-if)# spanning-tree bpduguard enable

BPDU Guard configuration on interface G0/2 of SW2 using CLI commands to protect access ports from rogue switches

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

BPDU Guard blocks a rogue switch on interface G0/2 by disabling the port after receiving a BPDU

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 :

Disabling BPDU Guard on SW2 interface G0/2 using CLI to allow BPDU traffic from the connected device

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.

Interface G0/2 in err-disabled state after rogue switch sends BPDU and is blocked by BPDU Guard

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

Enabling automatic ErrDisable recovery for BPDU Guard with a 300-second timer on interface G0/2

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