BPDU Guard

1. Qu’est-ce que le BPDU Guard ?

Vous êtes-vous déjà demandé ce qu’est le BPDU Guard et comment il protège votre réseau ?

Simplifions les choses et commençons par un exemple.

Topologie STP dans laquelle un commutateur malhonnête devient le pont racine après avoir envoyé un BPDU - exemple de ce que la garde BPDU empêche.

Dans le diagramme ci-dessus, nous voyons une topologie STP typique avec trois commutateurs principaux : SW1, SW2 et SW3.

  • SW1 est le Root Bridge, avec le Bridge ID 32769:AABB.CCDD.EE01
  • SW2 a un port (G0/2) configuré avec PortFast, normalement destiné aux appareils finaux comme les PCs.

Mais voilà le problème :

Un commutateur malhonnête se connecte à ce port d’accès !

Au lieu de rester silencieux, il envoie des BPDU avec une Bridge Priority inférieure : 4096:AABB.CCDD.EE10
C’est mieux que le Root Bridge actuel !

Et comme le BPDU Guard n’est pas activé, le commutateur accepte le BPDU et SW2 le laisse entrer dans la topologie STP…

Sans BPDU Guard

Regardez maintenant ce qui se passe :

Qu'est-ce que la BPDU Guard: un commutateur malhonnête devient le Root Bridge en utilisant un Bridge ID inférieur dans la topologie STP.

C’est le commutateur erroné qui l’emporte.

Parce qu’il annonce une meilleure priorité, il est maintenant sélectionné comme nouveau Root Bridge.

Le résultat ?

Toute votre topologie Spanning Tree est compromise et tout cela est parti d’un simple port d’accès mal sécurisé.

C’est exactement ce que BPDU Guard est censé empêcher : des appareils malveillants qui tentent de prendre le contrôle de votre réseau STP.

Solution : Activation de BPDU Guard

Pour éviter cette situation, la fonction BPDU Guard est appliquée au port activé par PortFast.
Lorsqu’il est activé, tout BPDU entrant est immédiatement rejeté et le port est placé dans un état de err-disable state (down/down).

Cela garantit que les ports d’accès généralement connectés à des appareils d’utilisateur final tels que des PC ou des imprimantes ne peuvent pas participer au STP.

Après : Avec BPDU Guard

Voici un exemple où la fonction BPDU Guard est activée sur l’interface connectée au commutateur défaillant.

Qu'est-ce que le BPDU Guard : le port G0/2 est désactivé après l'envoi d'un BPDU par un commutateur malhonnête, bloqué par le BPDU Guard.

Si vous vous demandez toujours ce qu’est le BPDU Guard en action, regardez ci-dessus ! Cette fonction détecte les BPDU entrants et désactive immédiatement le port pour 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

J’espère que votre question sur ce qu’est le BPDU Guard est maintenant claire, vous avez vu le risque, la réaction et l’impact.

2. Configuration de BPDU Guard

Avant de plonger dans la configuration, clarifions un point important : BPDU Guard et PortFast sont des fonctions distinctes.
Bien qu’elles soient souvent utilisées ensemble, elles peuvent être configurées indépendamment en fonction des besoins de votre réseau.

Si vous souhaitez que les appareils des utilisateurs finaux (comme les PC ou les imprimantes) accèdent instantanément au réseau et soient protégés contre les commutateurs malveillants, vous devez activer PortFast et BPDU Guard sur le même port.

Dans cet exemple, nous allons configurer :

  • PortFast accélérer le délai STP habituel.
  • BPDU Guard pour arrêter le port en cas de réception d’un BPDU inattendu.

Nous l’appliquerons à l’interface G0/2 sur le commutateur SW2.

Exemple de configuration de commutateur appliquant BPDU Guard et PortFast sur l'interface G0/2 pour se protéger contre les BPDU erronés.

BPDU Guard peut être configuré de deux manières :

  1. Sur les ports individuels : Appliqué manuellement à un port spécifique.
  2. Global : Automatiquement appliqué à toutes les interfaces configurées avec PortFast.

Activation de BPDU Guard sur des ports individuels

Étapes de configuration :

  1. Entrez dans le mode de configuration de l’interface :
SW2(config)# interface GigabitEthernet0/2

2. Activer la BPDU Guard sur l’interface :

SW2(config-if)# spanning-tree bpduguard enable
Configuration de BPDU Guard sur l'interface G0/2 de SW2 à l'aide de commandes CLI pour protéger les ports d'accès contre les commutateurs malveillants.

Vérification de l’état de BPDU Guard

Pour confirmer que la fonction BPDU Guard est activée et active, utilisez les commandes suivantes :

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 vous pouvez le voir dans la sortie, le BPDU Guard est activé !

Cette configuration garantit que si des BPDU sont reçus sur ce port, celui-ci s’arrêtera immédiatement et passera à l’état Err-disable.

Comportement lors de la réception d’un BPDU

Si un BPDU est détecté, l’interface est immédiatement arrêtée et placée dans un état err-disabled.

Le système BPDU Guard bloque un commutateur malhonnête sur l'interface G0/2 en désactivant le port après réception d'un BPDU.

Vous pouvez le vérifier en utilisant :

SW2# show interfaces g0/2 
GigabitEthernet0/2 is down, line protocol is down (err-disabled)
!output omitted

Comme vous pouvez le voir, le port est désactivé avec l’option err-disabled ! Hacker tu ne pourras pas détruire ma topologie STP 🙂

Désactivation de BPDU Guard sur des ports individuels

Dans certaines situations, il peut s’avérer nécessaire de désactiver BPDU Guard sur une interface spécifique. Cette opération peut être effectuée directement en mode de configuration de l’interface :

Désactivation de BPDU Guard sur l'interface G0/2 de SW2 à l'aide de CLI pour autoriser le trafic BPDU depuis le périphérique connecté.
SW2(config)# int g0/2
SW2(config-if)# spanning-tree bpduguard disable

Cette commande supprime la protection BPDU Guard du port sélectionné uniquement.

Activation globale de BPDU Guard

BPDU Guard peut être activé globalement, ce qui permet de l’appliquer automatiquement à toutes les interfaces configurées avec PortFast.

SW2(config)# spanning-tree portfast bpduguard default

3. Comprendre l’état ErrDisable

Lorsque BPDU Guard détecte un BPDU, il ferme immédiatement le port pour protéger le réseau. L’interface entre dans l’état err-disabled avec un statut down/down.

Dans le diagramme ci-dessous, l’interface G0/2 sur SW2 reçoit un BPDU d’un dispositif errant. En conséquence, le commutateur désactive le port :

L'interface G0/2 est dans l'état err-disabled après qu'un commutateur malveillant ait envoyé une BPDU et qu'elle soit bloquée par BPDU Guard.

⚠️ Important : Ne réactivez pas le port immédiatement !

Tout d’abord, identifiez et supprimez l’appareil qui envoie le BPDU.
Sinon, le port s’éteindra à nouveau…

Nous allons maintenant voir comment récupérer le port une fois le problème résolu.

4. Récupération des ports à partir de l’état ErrDisable

Une fois que la cause de l’état err-disabled a été supprimée, le port peut être restauré manuellement ou automatiquement.

Récupération manuelle

Vous pouvez réinitialiser le port manuellement en suivant les étapes suivantes :

SW2(config)# interface g0/2
SW2(config-if)# shutdown
SW2(config-if)# no shutdown

Vérifiez ensuite que l’interface est à nouveau en ligne :

SW2# show interfaces g0/2
GigabitEthernet0/2 is up, line protocol is up (connected) 
!output omitted

Récupération automatique (Récupération ErrDisable)

Les commutateurs peuvent également récupérer les ports automatiquement à l’aide de la fonction de errdisable recovery.

Par défaut, ce mécanisme est désactivé. Vous pouvez vérifier son état actuel à l’aide de la commande suivante :

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:

Activation de la récupération automatique

Pour activer ErrDisable Recovery pour une cause spécifique, telle que BPDU Guard :

SW2(config)# errdisable recovery cause bpduguard
Activation de la récupération automatique ErrDisable pour BPDU Guard avec un délai de 300 secondes sur l'interface G0/2

Vérifiez que ErrDisable Recovery a été activée :

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.

Ce qui se passe pendant le Recovery

Une fois le délai expiré, le port est automatiquement rétabli dans l’état « up/up ». Les journaux suivants illustrent le processus de rétablissement :

*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

Réglage du Recovery Timer

Le délai de récupération par défaut est de 300 secondes. Vous pouvez le modifier pour une valeur comprise entre 30 et 86400 secondes.

Pour vérifier la plage disponible :

SW2(config)# errdisable recovery interval ?
  <30-86400>  timer-interval(sec)

Pour définir un intervalle personnalisé, par exemple 30 secondes :

SW2(config)# errdisable recovery interval 30

Ce paramètre s’applique à toutes les causes de récupération errdisable actives.

5. Conclusion

Qu’est-ce que le BPDU Guard ?

BPDU Guard désactive un port immédiatement s’il reçoit un BPDU, tant que BPDU Guard est activé sur ce port.
Cela empêche les commutateurs non autorisés d’interférer avec la topologie Spanning Tree.

Tout au long de cette leçon, vous avez appris :

  • Pourquoi c’est important
    Un seul BPDU sur un port d’accès peut perturber le STP. BPDU Guard l’arrête instantanément.
  • Comment il se comporte
    Lorsqu’il est déclenché, le port est placé dans l’é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 : en utilisant shutdown / no shutdown
    • Automatiquement : avec errdisable recovery cause bpduguard