🏛️ ArchiZeroTrust CCIE Infrastructure Control Plane / CoPP
🛡️ Control Plane

Control Plane Policing (CoPP)

Protéger le CPU du routeur contre les attaques DoS et les tempêtes de protocoles. CoPP utilise le framework MQC pour classifier et policer le trafic à destination du control plane — avant qu'il n'atteigne le processeur.

Vue d'ensemble
MQC & Architecture
Configuration
CPPr
Vérification
Pièges
Flash Cards

Pourquoi protéger le Control Plane ?

🚀
Data Plane
Transit du trafic utilisateur
  • IP forwarding (CEF)
  • Traité par le hardware (ASIC)
  • Pas limité par le CPU
🧠
Control Plane ← CoPP ici
Protocoles de routage et signalisation
  • BGP, OSPF, EIGRP, IS-IS
  • ICMP, ARP, BFD
  • Traité par le CPU
🔧
Management Plane
Administration de l'équipement
  • SSH, Telnet, SNMP
  • Syslog, NTP, TFTP
  • Traité par le CPU

Scénario concret — sans CoPP

Un attaquant envoie 500 000 paquets/s de faux BGP OPEN vers ton routeur. Le CPU monte à 100%, les sessions BGP existantes ne reçoivent plus les keepalives, elles tombent. Toutes les routes BGP sont retirées. Résultat : blackout réseau complet — causé uniquement par du trafic control plane.

Scénario concret — avec CoPP

Le même attaque arrive. CoPP classe le trafic BGP (TCP 179) et le police à 500 kbps. Les 500 000 paquets/s sont droppés au-delà du seuil. Les vraies sessions BGP légitimes passent dans la bande autorisée. Le CPU reste stable. Les protocoles continuent de fonctionner.

Trafic ciblé par CoPP

ProtocolePort / TypeCriticitéPolitique recommandée
BGPTCP 179🔴 CritiquePolice strict — sources connues uniquement
OSPFIP proto 89🔴 CritiquePolice — multicast + unicast
EIGRPIP proto 88🔴 CritiquePolice
BFDUDP 3784/3785🟠 ÉlevéePolice faible latence (timers agressifs)
ICMPIP proto 1🟡 ModéréeRate-limit (ping légitime vs flood)
SSH / TelnetTCP 22/23🟡 ModéréePolice — sources de mgmt uniquement
SNMPUDP 161/162🟡 ModéréePolice — NMS connus
ARPL2🟡 ModéréeRate-limit anti ARP-flood
class-defaulttout le reste🟢 FaibleDrop ou police très faible

Framework MQC — les 4 étapes CoPP

ÉTAPE 1
ACL étendue
ip access-list extended

Identifie les paquets à cibler (src, dst, port, protocole)

ÉTAPE 2
Class-map
class-map match-all

Associe l'ACL à une classe de trafic

ÉTAPE 3
Policy-map
policy-map

Définit l'action : police, drop, transmit

ÉTAPE 4
Appliquer
control-plane
service-policy input

Applique la policy au control plane

Les 3 actions possibles dans la policy-map

ActionComportementQuand l'utiliser
police rate X bpsAutorise jusqu'à X bps, drop au-delàTrafic légitime à limiter (BGP, OSPF, SSH)
dropTous les paquets matchés sont droppésTrafic explicitement interdit (spoofed sources, ports inconnus)
transmitLaisse passer sans restrictionTrafic de confiance absolue (loopback, management OOB)

Police — syntaxe détaillée

policy-map CoPP-POLICY
  class BGP
    police rate 8000 bps burst 1500
      conform-action transmit    ! trafic dans la bande → laisse passer
      exceed-action  drop         ! trafic au-delà → drop

match-all vs match-any

KeywordLogiqueExemple
match-allET — toutes les conditions doivent être vraiesSrc=192.168.1.0/24 ET TCP 179
match-anyOU — au moins une condition vraieBGP OU OSPF OU EIGRP

Configuration complète — exemple CCIE

Étape 1 — ACLs de classification

! BGP — TCP 179 uniquement depuis les peers connus
ip access-list extended ACL-BGP
 permit tcp 10.0.0.0 0.0.0.255 any eq 179
 permit tcp any eq 179 10.0.0.0 0.0.0.255

! OSPF — IP proto 89 (unicast + multicast)
ip access-list extended ACL-OSPF
 permit ospf any any

! EIGRP — IP proto 88
ip access-list extended ACL-EIGRP
 permit eigrp any any

! ICMP — limiter les pings vers le routeur
ip access-list extended ACL-ICMP
 permit icmp any any

! Management — SSH depuis le réseau de gestion
ip access-list extended ACL-MGMT
 permit tcp 192.168.100.0 0.0.0.255 any eq 22

Étape 2 — Class-maps

class-map match-all BGP
 match access-group name ACL-BGP

class-map match-all OSPF
 match access-group name ACL-OSPF

class-map match-all EIGRP
 match access-group name ACL-EIGRP

class-map match-all ICMP
 match access-group name ACL-ICMP

class-map match-all MGMT
 match access-group name ACL-MGMT

Étape 3 — Policy-map

policy-map CoPP-POLICY

  ! BGP : 64 kbps — sessions légitimes restent dans la bande
  class BGP
    police rate 64000 bps burst 6000
      conform-action transmit
      exceed-action  drop

  ! OSPF : 500 kbps
  class OSPF
    police rate 500000 bps burst 15000
      conform-action transmit
      exceed-action  drop

  ! EIGRP : 500 kbps
  class EIGRP
    police rate 500000 bps burst 15000
      conform-action transmit
      exceed-action  drop

  ! ICMP : limité à 64 kbps (anti-ping flood)
  class ICMP
    police rate 64000 bps burst 1500
      conform-action transmit
      exceed-action  drop

  ! Management SSH : 128 kbps
  class MGMT
    police rate 128000 bps burst 8000
      conform-action transmit
      exceed-action  drop

  ! Tout le reste — drop sauf si besoin spécifique
  class class-default
    police rate 32000 bps burst 1500
      conform-action transmit
      exceed-action  drop

Étape 4 — Application au control plane

control-plane
 service-policy input CoPP-POLICY

CPPr — Control Plane Protection (IOS-XE)

CPPr est une version plus granulaire de CoPP disponible sur IOS-XE (ASR, ISR G2+). Elle divise le control plane en 3 sous-interfaces pour un contrôle plus fin.

Sous-interfaceTrafic concernéExemple
hostTrafic destiné directement au routeur (IP du routeur)BGP, OSPF, SSH, ICMP echo vers une interface du routeur
transitPaquets en transit qui doivent être traités par le CPU (TTL=1, options IP)IP options, TTL expiry, fragments
cef-exceptionPaquets que CEF ne peut pas traiter et envoie au CPUARP, CDP, BPDU, paquets non-IP

Configuration CPPr (IOS-XE)

control-plane host
 service-policy input CoPP-HOST     ! BGP, OSPF, SSH...

control-plane transit
 service-policy input CoPP-TRANSIT  ! TTL expiry, IP options

control-plane cef-exception
 service-policy input CoPP-CEF      ! ARP, CDP, BPDU

Comparaison CoPP vs CPPr

CoPPCPPr
PlateformeIOS, IOS-XEIOS-XE uniquement
GranularitéControl plane global3 sous-interfaces séparées
ComplexitéSimplePlus complexe mais plus précis
Commandecontrol-planecontrol-plane host/transit/cef-exception
Exam CCIE✅ Très fréquentConnaître le concept

Lire show policy-map control-plane — exam décomposé

C'est la question exacte de l'exam. Voici comment décoder l'output ligne par ligne.

R1#show policy-map control-plane
 Control Plane
    Service-policy input: CoPP-BGP   ← policy appliquée en input

      Class-map: BGP (match all)
        2716 packets, 172071 bytes
        5 minute offered rate 0000 bps, drop rate 0000 bps
        Match: access-group name BGP
        drop         ← action = drop absolu (pas de police)

      Class-map: class-default (match-any)
        5212 packets, 655966 bytes
        5 minute offered rate 0000 bps, drop rate 0000 bps
        Match: any         ← pas d'action = transmit implicite

Analyse de la question d'exam

ÉlémentValeurSignification
Class BGP — actiondropTOUT le trafic matché par l'ACL "BGP" est droppé — aucune exception
Class BGP — matchaccess-group name BGPSeuls les paquets matchés par l'ACL nommée "BGP" sont concernés
class-default — actionaucune (transmit)Tout ce qui ne matche pas l'ACL BGP passe librement

Autres commandes de vérification

! Vue complète avec compteurs
show policy-map control-plane

! Voir la policy appliquée
show running-config | section control-plane

! Vérifier les class-maps
show class-map

! Vérifier les ACLs utilisées
show ip access-lists

! Compteurs détaillés par classe (IOS-XE)
show policy-map control-plane host
show policy-map control-plane transit

! Remettre les compteurs à zéro
clear policy-map counters control-plane

Interpréter les compteurs

CompteurSignification
offered rate 0000 bpsPas de trafic actif au moment du show (normal si pas d'activité récente)
drop rate X bpsDu trafic est actuellement droppé → investiguer si inattendu
N packets / M bytesCumulatif depuis la dernière remise à zéro — normal d'être non nul
conform / exceed / violateAvec police : trafic dans la bande / au-dessus / très au-dessus (3-color)

Pièges CoPP — exam & production

⚠️ 1. drop ≠ police rate … exceed-action drop
drop seul dans une class = DROP ABSOLU de TOUS les paquets, même un seul. police rate X exceed-action drop = autorise jusqu'à X bps, drop au-delà. Confondre les deux peut bloquer des sessions légitimes.
Exam : "drop" seul = 0 paquet passe. police rate = quota.
⚠️ 2. class-default sans action = transmit implicite
Si tu n'appliques aucune action sur class-default, tout le trafic non classifié passe sans restriction vers le CPU. C'est la porte d'entrée des attaques DDoS sur le control plane.
Toujours : class class-default → police rate 32000 bps exceed-action drop
⚠️ 3. CoPP bloque les protocols légitimes si le rate est trop bas
Un rate BGP à 8000 bps peut sembler suffisant pour keepalives (19 octets toutes les 60s) mais insuffisant lors d'une reconvergence avec UPDATE massifs (full table = centaines de Mo). Les sessions BGP tombent, ce qui est pire que l'absence de CoPP.
Toujours faire un audit (mode transmit) avant de passer en drop.
⚠️ 4. ACL nommée vs numérotée dans match access-group
match access-group name BGP → ACL nommée "BGP"
match access-group 100 → ACL numérotée 100
Utiliser le bon keyword. Une erreur de keyword → la class-map matche RIEN.
Vérifier : show class-map → confirme ce qui est matché.
⚠️ 5. service-policy input seulement
CoPP standard ne supporte que service-policy input sous control-plane. Tenter d'appliquer un service-policy output génère une erreur.
⚠️ 6. CoPP ne protège pas contre les attaques depuis le routeur lui-même
CoPP filtre le trafic entrant vers le CPU depuis les interfaces. Le trafic généré localement par le routeur (BGP OPEN initié par le routeur, OSPF HELLO sortant) n'est pas filtré par CoPP.
⚠️ 7. Ordre des class-maps dans la policy-map
Les class-maps sont évaluées dans l'ordre de la policy-map (top-down). Un paquet matché par la première classe ne sera pas évalué par les suivantes. Mettre les classes les plus spécifiques en premier.
BGP, OSPF, EIGRP en premier — class-default toujours en dernier.
⚠️ 8. BFD et CoPP — timers agressifs
BFD avec des timers à 50ms envoie 20 paquets/seconde. Si le rate CoPP pour BFD est trop faible, les paquets BFD sont droppés → BFD déclare le lien down → IGP reconverge → instabilité réseau.
Calculer : pkt_size × pps × marge x2 = rate minimum BFD.

Flash Cards — CoPP

Clique sur une carte pour révéler la réponse.

Quel est le résultat d'un drop seul dans une class CoPP ?
100% des paquets matchés sont droppés — aucun ne passe. C'est différent d'un police rate X exceed-action drop qui autorise une bande passante.
→ exam piège classique
Que se passe-t-il si class-default n'a aucune action dans la policy-map ?
Le trafic non classifié est transmis sans restriction au CPU (transmit implicite). C'est une vulnérabilité — toujours polisher ou dropper class-default.
Dans quel sens s'applique CoPP sur le control plane ?
Input uniquement — service-policy input sous control-plane. CoPP filtre le trafic entrant vers le CPU, pas le trafic sortant.
Quelles sont les 3 sous-interfaces CPPr (IOS-XE) ?
host : trafic destiné au routeur (BGP, SSH…)
transit : paquets CPU-punted (TTL=1, IP options)
cef-exception : non-IP, ARP, CDP, BPDU
Comment vérifier qu'une police CoPP drope activement du trafic ?
show policy-map control-plane → chercher drop rate > 0 bps ou exceed N packets sur la classe concernée.
Quelle est la bonne pratique avant de déployer CoPP en production ?
Mode audit : mettre toutes les exceed-action en transmit (pas de drop), observer les compteurs pendant plusieurs heures, puis affiner les rates avant de passer en drop.
Quelle commande applique la policy-map au control plane ?
control-plane
 service-policy input NOM-POLICY
Un routeur a CoPP avec BGP en action drop. Peut-il former des sessions BGP ?
Seulement avec les peers dont l'IP n'est PAS matchée par l'ACL BGP. Les sessions vers les IPs matchées sont bloquées. Les sessions non matchées tombent dans class-default (transmit si pas d'action).
→ réponse C de la question d'exam
Quelle est la différence entre match-all et match-any dans une class-map ?
match-all : toutes les conditions doivent être vraies (ET logique)
match-any : au moins une condition vraie (OU logique). class-default utilise match-any par défaut.
Quelle commande remet les compteurs CoPP à zéro ?
clear policy-map counters control-plane
Utile après un audit pour repartir à zéro avec des mesures fraîches.