Cisco : IPSec

De Wiki info-lab.fr
Aller à : Navigation, rechercher

Sommaire

Présentation

Cet article montre comment créer un canal sécurisé IPSec entre 2 sites distants aux moyens de routeurs Cisco en utilisant ESP en mode transport. Le gain obtenu sera la confidentialité des échanges, le contrôle d'intégrité et l'anti-rejeu. IPSec permettra de sécuriser l'intégralité (ou pas) du trafic entre ces 2 sites : Les protocoles sans sécurité intrinsèque bénéficieront de la sécurité fournie par IPSec de manière transparente, les protocoles déjà sécurisés (SSH, HTTPS) auront droit à une seconde couche de protection.
Pour mettre en place IPSec, un équipement Cisco se doit d'exécuter un IOS contenant des éléments de cryptographie. Ces éléments (générateur pseudo-aléatoire, générateur de clés, algorithmes de chiffrement) permettent aussi la mise en oeuvre de SSH. L'IOS doit comporter la mention k8 (crypto faible) ou mieux k9 (crypto forte) dans son nom pour utiliser pleinement IPSec ou SSH. Par exemple l'IOS c2800nm-advsecurityk9-mz.123-8.t8.bin en sera capable.
La commande show version affiche dans ce cas les avertissements légaux liés à l'utilisation de la cryptographie : Limitation de son utilisation dans certains pays (se renseigner avant sur les lois locales), interdiction d'exportation par le gouvernement US vers certains pays.

Rappels sur IPSec

IPsec est un ensemble de mécanismes et de standards définissant la manière de créer et de gérer dans le temps une communication sécurisée au niveau de la couche 3 entre 2 machines ou plus. Prévu à la base pour IPv6, IPSec a été adapté à IPv4.
IPSec peut être mis suivant 2 protocoles différents IPsec AH (Authentication Header) et IPsec ESP (Encapsulation Security Payload), chacun pouvant travailler suivant 2 modes : Le mode transport ou le mode tunnel. En voici les principales caractéristiques :

  • IPsec AH : Pour chaque paquet IP transmis, possibilité de mettre en œuvre authentification, vérification d'intégrité et anti-rejeu.
  • IPsec ESP : Pour chaque paquet IP transmis, possibilité de mettre en œuvre authentification, vérification d'intégrité, chiffrement et anti-rejeu.
  • En mode transport l'en tête IP des paquets est conservé, et IPSec y ajoute ses propres en-têtes.
  • En mode tunnel l'en tête IP initial des paquets est encapsulé dans la partie protégée, le tunnel recréant un nouvel en-tête IP ; Quand IPSec ESP avec chiffrement est mis en oeuvre en mode tunnel, les adresses IP source et destination sont illisibles (car situées dans la partie chiffrée), ce qui est un gage de confidentialité absolu, puisque seules les adresses des équipements mettant en oeuvre IPSec sont visibles.
  • Les mécanismes d' authentification et de vérification d'intégrité sont réalisés à partir d'algorithmes tels que MD5, SHA1, seuls disponibles sur un équipement Cisco. Privilégier SHA1.
  • Les mécanismes de chiffrement sont réalisés à partir d'algorithmes tels que 3DES ou AES. Eviter 3DES et lui préférer AES. Camelia, Twofish ou d'autres ne sont pas disponibles sur un équipement Cisco.

IKE (Internet Key Exchange) est le protocole qui va négocier en 2 phases la mise en place d'IPsec :

  • Phase 1 IKE : Association de Sécurité (SA) d' ISAKMP :
    • comment va se dérouler l'échange de clés Diffie-Hellman ?
    • comment s'authentifier entre pairs (Pre shared Key, certificats ...) ?
    • quel algorithme de contrôle d'intégrité sera utilisé ?
    • comment chiffrer ?
    • quelle sera la durée de vie de cette association de sécurité ISAKMP ?
    • Grâce à ISAKMP, les 2 pairs négocient ces paramètres, sélectionnent un groupe Diffie-Hellman et réalisent un échange de clés permettant de monter un canal bidirectionnel sécurisé à l'intérieur duquel il négocieront la 2ème phase :
  • Phase 2 IPSec : A l'intérieur de l'association de sécurité crée par ISAKMP, on peut maintenant :
    • Négocier les paramètres IPsec (connus en tant que tranform set) : AH ou ESP, tunnel ou transport, quel chiffrement, quel hash, quelle durée de vie...
    • établir l'association de sécurité (SA) IPsec en fonction du transform set sélectionné si plusieurs transform set sont proposés.
    • Renégocier régulièrement les clés en fonction des durées de vies établies.
    • éventuellement réaliser un nouvel échange de clés Diffie-Hellman (en mode PFS).
    • A la fin de la phase 2, 2 canaux unidirectionnels indépendants IPSec sont établis, chacun identifié par un numéro de SPI.

Conseils sur l'utilisation d'IPSEec

  • Avec IPSec il est possible d'encapsuler une partie seulement du trafic entre 2 sites distants : une ACL fera la ségrégation entre le trafic à protéger et celui qui ne sera pas être traité par IPSec. Néanmoins il est plus prudent d'encapsuler dans IPSec l'intégralité du trafic entre 2 sites distants.
  • Le protocole AH n'est plus vraiment utile puisque ESP sait faire de l'authentification/intégrité sans chiffrement, tout comme AH : Mais contrairement à AH, ESP ne contrôle pas certains champs de l'en-tête IP ce qui le rend moins sensible aux problèmes de modifications de l'en-tête IP en cours de route. Moins sensible ne veut pas dire insensible.
  • Mettre en oeuvre ESP avec confidentialité (chiffrement) sans activer le contrôle d'intégrité/authentification est à proscrire.
  • IPSec fonctionne de manière asymétrique : A vers B et B vers A sont 2 associations différentes pouvant potentiellement avoir des paramètres distincts (2 méthodes de chiffrement différentes par exemple) : Néanmoins différencier ainsi les 2 sens d'un même trafic est la plupart du temps inutile et déconseillé.
  • Il ne faut pas négliger la prise en compte de "l'usure des clés" (paramètre lifetime en secondes).
  • Bien qu'étant cités dans les RFC initiales, DES, 3DES, et MD5 sont à bannir définitivement. Ils ont très bien servi dans le passé, merci pour eux et paix à leur âme.
  • Idem pour les groupe Diffie-Hellman 1 (768 bits) et 2 (1024 bits) qui ne sont plus de taille acceptable : En 2013, pas d'utilisation de clés asymétriques inférieures à 1536 voire 2048 bits. Méfiance avec certains petits appareils nomades utilisant des groupes "exotiques" non standardisés à clés de 512 bits...
  • La clé secrète servant de secret partagé (Pre-shared Key) doit être d'une entropie supérieure à 100 bits, soit à minima 16 ou 17 éléments de type chiffres, lettres majuscules, lettres minuscules et caractères spéciaux.
  • Des clés RSA de 2048 bits ou plus sont préférables à l'utilisation d'une Pre-shared Key. Si les équipements sont tous maîtrisés et que leur nombre est restreint, il est possible de propager manuellement les clés publiques RSA vers tous les pairs ; au-delà d'une certain nombre d'équipements, la gestion et certification des clés ne peut se faire raisonnablement qu'au travers d'une IGC.
  • IPSec ajoute quelques dizaines d'octets de données spécifiques aux en-têtes IP de chaque paquet. La détection du MTU sur l'intégralité d'un Wan forcement non maîtrisé étant impossible, il conviendra d'abaisser le MTU des paquets soumis à l'encapsulation IPSec de la valeur nécessaire, pour ne pas risquer de voir ses paquets détruits en cours de route. En règle générale, les paquets encapsulés par IPSec ne devant pas dépasser 1500 octets, si l'en-tête ESP fait par exemple 70 octets, le MTU des paquets avant encapsulation IP doit être bloqué à 1430. En cas de double encapsulation IPSec dans IPSec, le MTU devra être bridé à 1360 octets (1500-70-70).
  • ISAKMP négociant via le port UDP 500, les ACL et parefeu traversés doivent laisser passer ce port.
  • Pour information, dans un paquet IP le champ protocole identifie le protocole supérieur IPsec AH par 51(0x33), et IPsec ESP par 50(0x32). Pour rappel ICMP = 1, TCP = 6, UDP = 17...
  • IPsec est sensible au NAT : Le NAT-T (NAT Traversal ou Traversée de NAT) permet de contourner ce problème : Les paquets IPsec sont encapsulés dans des paquets UDP qui seuls seront modifiés par le NAT. Le port par défaut pour le NAT-T est UDP 4500, attention au filtrage de ce port par des ACL ou des Pare-feux. Pour information L2TP utilise le port 1701, PPTP utilise le port 1723.

Configuration de base des 2 routeurs

Cette configuration ne présente que le strict minimum permettant aux 2 routeurs de se joindre et occulte complètement tous les autres aspects liés au routage dynamique, à la sécurité des routeurs eux-mêmes...

  • ROUTEUR-A
(conf)# interface FastEthernet 0/0
(conf-if)# ip address 140.20.20.1 255.255.255.240
(conf-if)# description IPSec vers ROUTEUR-B
(conf-if)# no shutdown
(conf-if)# interface FastEthernet 0/1
(conf-if)# ip address 192.168.20.1 255.255.255.0
(conf-if)# description vers Reseau local A
(conf-if)# no shutdown
(conf-if)# exit
(conf)# ip route 0.0.0.0 0.0.0.0 140.20.20.2

2 interfaces WAN et Lan paramétrées, 1 route unique par défaut.

  • ROUTEUR-B
(conf)# interface FastEthernet 0/0
(conf-if)# ip address 82.55.170.1 255.255.255.240
(conf-if)# description IPSec vers ROUTEUR-A
(conf-if)# no shutdown
(conf-if)# interface FastEthernet 0/1
(conf-if)# ip address 192.168.170.1 255.255.255.0
(conf-if)# description vers Reseau local B
(conf-if)# no shutdown
(conf-if)# exit
(conf)# ip route 0.0.0.0 0.0.0.0 82.55.170.6

2 interfaces WAN et Lan paramétrées, 1 route unique par défaut.
A ce niveau le réseau local A et le réseau local B doivent pouvoir se joindre.

Configuration spécifique IPSec

  • ROUTEUR-A
(conf)# crypto isakmp key 0 maCléSecrète address 82.55.170.6
(conf)# crypto isakmp policy 1
(conf-crypto)# authentication pre-share
(conf-crypto)# encryption aes
(conf-crypto)# group 5
(conf-crypto)# hash sha
(conf-crypto)# lifetime 3600
(conf-crypto)# exit
(conf)# crypto ipsec transform-set alpha
(conf)# esp-aes esp-sha-hmac
(conf)# mode transport
(conf)# exit
(conf)# access-list 100 permit ip 192.168.20.0 0.0.0.255 192.168.170.0 0.0.0.255
(conf)# crypto map ipsecA-B 1 ipsec-isakmp
(conf)# description IPSec ESP-transport vers réseau B
(conf)# set peer 82.55.170.6
(conf)# set transform-set alpha
(conf)# match address 100
(conf)# exit
(conf)# interface FastEthernet 0/0
(conf-if)# crypto map ipsecA-B
  • ROUTEUR-B
(conf)# crypto isakmp key 0 maCléSecrète address 140.20.20.1
(conf)# crypto isakmp policy 1
(conf-crypto)# authentication pre-share
(conf-crypto)# encryption aes
(conf-crypto)# group 5
(conf-crypto)# hash sha
(conf-crypto)# lifetime 3600
(conf-crypto)# exit
(conf)# crypto ipsec transform-set alpha
(conf)# esp-aes esp-sha-hmac
(conf)# mode transport
(conf)# exit
(conf)# access-list 100 permit ip 192.168.170.0 0.0.0.255 192.168.20.0 0.0.0.255 
(conf)# crypto map ipsecA-B 1 ipsec-isakmp
(conf)# description IPSec ESP-transport vers réseau A
(conf)# set peer 140.20.20.1
(conf)# set transform-set alpha
(conf)# match address 100
(conf)# exit
(conf)# interface FastEthernet 0/0
(conf-if)# crypto map ipsecA-B

SchemaIPSec.png

NOTA : maCléSecrète est à remplacer par votre secret partagé : C'est la fameuse Pre-shared Key (voir plus haut les conseils sur la mise en place d'IPSec)
ALPHA (transform-set alpha) est un nom arbitrairement choisi pour cet exemple, mais vous pouvez choisir le votre.
Idem pour le numéro (100) de l'ACL qui a été choisi arbitrairement ; il est sans doute mieux de mettre en place une ACL étendue nommée et pas une simple ACL standard.
Le mode transport est choisi ici à titre d'exemple, mais si l'on tient à masquer les adresses source et destination il vaut mieux choisir le mode tunnel.

Vérifier le fonctionnement d'IPSec

Un tunnel IPSec n'étant pas actif en permanence, il faut créer un peu de trafic entre les sites distants de manière à provoquer une négociation entre les routeurs pairs, sinon certaines des commandes suivantes n'afficheront pas d'informations.

# show crypto session
# show crypto isakmp policy
# show crypto isakmp sa
# show crypto ipsec sa
# show crypto ipsec transform-set
# show crypto map
Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils