Authentification MD5 (EIGRP)

Bonjour,

Voici un petit récapitulatif sur la mise en place d’authentification MD5 sur le protocole EIGRP. Pour configurer l’authentification MD5, il faut réaliser ces 3 étapes :

  1. Créer une key chain
  2. Définir le mode d’authentification pour EIGRP (MD5)
  3. Préciser la key chain à utiliser

Le schéma utilisé sera le suivant :

I. Créer une key chain

Une key chain, ca sert à quoi ? C’est simple, c’est un trousseau de clés constitué de plusieurs clés, ni plus ni moins. L’utilité est de pouvoir changer régulièrement et dynamiquement les clés utilisées pour l’authentification, sans action particulière et sans interruption de service. A l’intérieur de la key chain, on retrouve l’ensemble des clés; chacune d’entre elles possède :

  • Un ID (Key ID)
  • Un secret (Key String)
  • Des périodes de validité pour l’émission et la réception de message (Accept-lifetime / Send-lifetime)

Ici pour l’exemple, je vais configurer une key chain nommée cisco :

!
conf t
  key chain cisco 
     key 1 
        key-string 111 
        accept-lifetime 21:00:00 Jan 1 2030 duration 30
        send-lifetime 21:00:00 Jan 1 2030 duration 30
     key 2 
        key-string 222 
     key 3 
        key-string 333
!

On retrouve donc le trousseau appelé cisco et les 3 clés. J’ai volontairement crée une clé 1 bidon (que le routeur n’utilisera pas) pour expliquer le fonctionnement de la sélection des clés par la suite. Lors de la création des différentes clés, vous pouvez définir des périodes pendant lesquelles, le routeur va utiliser telle ou telle clé pour envoyer/recevoir les paquets EIGRP.  C’est ce que j’ai fait pour la clé 1. Si on ne spécifie pas d’Accept-lifetime ni de Send-lifetime, la clé crée sera toujours valide.

Vérification de la key chain et des clés associées :

R7#sh key chain cisco
Key-chain cisco:
key 1 -- text "111"
accept lifetime (21:00:00 UTC Jan 1 2030) - (30 seconds)
send lifetime (21:00:00 UTC Jan 1 2030) - (30 seconds)
key 2 -- text "222"
accept lifetime (always valid) - (always valid) [valid now]
send lifetime (always valid) - (always valid) [valid now]
key 3 -- text "333"
accept lifetime (always valid) - (always valid) [valid now]
send lifetime (always valid) - (always valid) [valid now]

II & III. Définir le mode d’authentification pour EIGRP (MD5) et préciser la key chain à utiliser

Après avoir crée la key chain et ses clés, il faut définir le mode d’authentification utilisé ainsi que la key chain à utiliser. Cela se fait directement sur l’interface concernée :

!
conf t
   interface FastEthernet2/0
      ip authentication mode eigrp 100 md5
      ip authentication key-chain eigrp 100 cisco
!

Ensuite, on peut vérifier l’application de l’authentification sur cette interface :

R7#sh ip eigrp int detail fastEthernet 2/0
IP-EIGRP interfaces for process 100

Xmit Queue Mean Pacing Time Multicast Pending
Interface Peers Un/Reliable SRTT Un/Reliable Flow Timer Routes
Fa2/0 0 0/0 0 0/1 0 0
Hello interval is 5 sec
Next xmit serial <none>
Un/reliable mcasts: 0/0 Un/reliable ucasts: 0/0
Mcast exceptions: 0 CR packets: 0 ACKs suppressed: 0
Retransmissions sent: 0 Out-of-sequence rcvd: 0
Authentication mode is md5, key-chain is "cisco"
Use multicast

On se retrouve donc avec le schéma suivant :

La question restante est : comment le routeur va savoir quelle clé utiliser pour envoyer/recevoir le paquet ?

C’est assez simple ! Dans l’exemple, R7 va envoyer un paquet hello mais doit ajouter le hash MD5. Pour cela, le router va inspecter la key chain, il va parcourir les clés séquentiellement (à la manière d’une ACL) et utilisera la première clé valide (Send-lifetime = valid). Ensuite, il va devoir créer un hash à partir de cette clé. Pour cela, il va utiliser la Key ID & le Key String :

Ce qui va créer un hash qui sera ajouté à l’entête EIGRP. Le paquet sera ensuite envoyé.

R8 lui va recevoir le paquet avec le hash inséré par R7. Il va ensuite lui aussi checker la première clé valide (Accept-lifetime = valid) de la key chain, calculer le hash correspondant et le comparer au hash contenu dans l’entête du paquet reçu.  Si les 2 hashs sont identiques, le paquet est accepté, sinon, il est rejeté. Enfin, R8 va à son tour chercher sa première clé valide pour l’envoie du paquet hello à son tour (Send-lifetime = valid) et envoyer le paquet avec le hash correspondant.

A la réception du paquet, R7 fera comme R8 en comparant le hash reçu et acceptera ou non le paquet. On peut vérifier facilement les échanges et les clés utilisées via un debug eigrp packet hello :

R7#
*Mar 1 00:52:38.323: EIGRP: received packet with MD5 authentication, key id = 2
*Mar 1 00:52:38.323: EIGRP: Received HELLO on FastEthernet2/0 nbr 10.78.0.8
*Mar 1 00:52:38.323: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
peerQ un/rely 0/0
R7#
R7#
*Mar 1 00:52:40.531: EIGRP: Sending HELLO on FastEthernet2/0
*Mar 1 00:52:40.531: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
R7#

Ou via wireshark :

Le voisinage monte :

R7#sh ip eigrp neighbors
IP-EIGRP neighbors for process 100
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 10.78.0.8 Fa2/0 14 00:01:56 1023 5000 0 4

La route est bien annoncée :

R7#sh ip route eigrp
8.0.0.0/32 is subnetted, 1 subnets
D 8.8.8.8 [90/156160] via 10.78.0.8, 00:02:07, FastEthernet2/0

Voila ! J’espère que cet article vous a plu et vous a été utile 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *