Pourquoi protéger le Control Plane ?
- IP forwarding (CEF)
- Traité par le hardware (ASIC)
- Pas limité par le CPU
- BGP, OSPF, EIGRP, IS-IS
- ICMP, ARP, BFD
- Traité par le CPU
- 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
| Protocole | Port / Type | Criticité | Politique recommandée |
|---|---|---|---|
| BGP | TCP 179 | 🔴 Critique | Police strict — sources connues uniquement |
| OSPF | IP proto 89 | 🔴 Critique | Police — multicast + unicast |
| EIGRP | IP proto 88 | 🔴 Critique | Police |
| BFD | UDP 3784/3785 | 🟠 Élevée | Police faible latence (timers agressifs) |
| ICMP | IP proto 1 | 🟡 Modérée | Rate-limit (ping légitime vs flood) |
| SSH / Telnet | TCP 22/23 | 🟡 Modérée | Police — sources de mgmt uniquement |
| SNMP | UDP 161/162 | 🟡 Modérée | Police — NMS connus |
| ARP | L2 | 🟡 Modérée | Rate-limit anti ARP-flood |
| class-default | tout le reste | 🟢 Faible | Drop ou police très faible |
Framework MQC — les 4 étapes CoPP
Identifie les paquets à cibler (src, dst, port, protocole)
Associe l'ACL à une classe de trafic
Définit l'action : police, drop, transmit
service-policy input
Applique la policy au control plane
Les 3 actions possibles dans la policy-map
| Action | Comportement | Quand l'utiliser |
|---|---|---|
| police rate X bps | Autorise jusqu'à X bps, drop au-delà | Trafic légitime à limiter (BGP, OSPF, SSH) |
| drop | Tous les paquets matchés sont droppés | Trafic explicitement interdit (spoofed sources, ports inconnus) |
| transmit | Laisse passer sans restriction | Trafic 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
| Keyword | Logique | Exemple |
|---|---|---|
| match-all | ET — toutes les conditions doivent être vraies | Src=192.168.1.0/24 ET TCP 179 |
| match-any | OU — au moins une condition vraie | BGP 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-interface | Trafic concerné | Exemple |
|---|---|---|
| host | Trafic destiné directement au routeur (IP du routeur) | BGP, OSPF, SSH, ICMP echo vers une interface du routeur |
| transit | Paquets en transit qui doivent être traités par le CPU (TTL=1, options IP) | IP options, TTL expiry, fragments |
| cef-exception | Paquets que CEF ne peut pas traiter et envoie au CPU | ARP, 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
| CoPP | CPPr | |
|---|---|---|
| Plateforme | IOS, IOS-XE | IOS-XE uniquement |
| Granularité | Control plane global | 3 sous-interfaces séparées |
| Complexité | Simple | Plus complexe mais plus précis |
| Commande | control-plane | control-plane host/transit/cef-exception |
| Exam CCIE | ✅ Très fréquent | Connaî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.
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ément | Valeur | Signification |
|---|---|---|
| Class BGP — action | drop | TOUT le trafic matché par l'ACL "BGP" est droppé — aucune exception |
| Class BGP — match | access-group name BGP | Seuls les paquets matchés par l'ACL nommée "BGP" sont concernés |
| class-default — action | aucune (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
| Compteur | Signification |
|---|---|
| offered rate 0000 bps | Pas de trafic actif au moment du show (normal si pas d'activité récente) |
| drop rate X bps | Du trafic est actuellement droppé → investiguer si inattendu |
| N packets / M bytes | Cumulatif depuis la dernière remise à zéro — normal d'être non nul |
| conform / exceed / violate | Avec police : trafic dans la bande / au-dessus / très au-dessus (3-color) |
Pièges CoPP — exam & production
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.
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.
match access-group name BGP → ACL nommée "BGP"match access-group 100 → ACL numérotée 100Utiliser le bon keyword. Une erreur de keyword → la class-map matche RIEN.
service-policy input sous control-plane.
Tenter d'appliquer un service-policy output génère une erreur.
Flash Cards — CoPP
Clique sur une carte pour révéler la réponse.
drop seul dans une class CoPP ?police rate X exceed-action drop qui autorise une bande passante.service-policy input sous control-plane. CoPP filtre le trafic entrant vers le CPU, pas le trafic sortant.transit : paquets CPU-punted (TTL=1, IP options)
cef-exception : non-IP, ARP, CDP, BPDU
show policy-map control-plane → chercher drop rate > 0 bps ou exceed N packets sur la classe concernée.transmit (pas de drop), observer les compteurs pendant plusieurs heures, puis affiner les rates avant de passer en drop.control-plane service-policy input NOM-POLICY
match-any : au moins une condition vraie (OU logique). class-default utilise match-any par défaut.
clear policy-map counters control-planeUtile après un audit pour repartir à zéro avec des mesures fraîches.