Config d’un VPN de type GRE Tunnel + IPSEC entre deux Sites à travers Internet
Notions Techniques Importantes
IPSEC :
L’IPSec est un protocole réseaux qui permet de fournir plusieurs services de sécurité pour les paquets IP tels que le cryptage des données, l’authentification, l’intégrité et la confidentialité.
Cela a pour objectif de fournir une communication cryptée sécurisée entre deux noeuds dans un réseau. Il est utilisé souvent dans les réseaux privés virtuels (VPN).
IKE : Internet Key Exchange (IKEv1, IKEv2)
C’est un Protocole IPSEC utilisé pour configurer une Security Association (SA). IKE s'appuie sur ISAKMP, ainsi que des certificats pour l'authentification et les échanges de clés. De plus, une Security Policy est configurée manuellement pour chaque paire de nœuds communicante.
ISAKMP : Internet Security Association and Key Management Protocol.
C’est le protocole qui livre aux deux neouds communicants les manières et les paramètres de sécurité à configurer afin d’établir un Canal complètement sécurisé entre eux (Authentification, Cryptage, échange des clés, …).
ISAKMP utilise souvent IKE pour l'échange de clés et fonctionne sur le port UDP 500.
SA : Security association
Une SA (ISAKMP SA ou IKE SA) est une politique unidirectionnelle (dans un seul sens) qui définit la manière de chiffrement des Flux (Algorithmes et Clés de Cryptage). Donc, chaque Tunnel fonctionnant avec IPSEC aura 2 SAs, une pour chaque direction.
Il y a plusieurs étapes dans la Politique de SA : Choisir l'algorithme de chiffrement à utiliser (Exp : 3DES), choisir l’algorithme de Cryptage/Intégrité (Exp : MD5), choisir le mode d’authentification des sessions (Exp : Certificat de clé publique), Utilisation de Protocole AH (Authentication Header) ou ESP (Encapsulated Security Payload) avec leurs paramètres correspondants.
Phase 1 et Phase 2 :
Il existe deux phases de négociation pour un Tunnel IPSEC : Phase 1 et Phase 2.
Au cours de la phase 1, les deux extrémités d'un tunnel établissent un Canal sécurisé et procèdent à la négociation des paramètres SA (Autentification, Intégrité, …) et échangent les clés / certificats (IKE).
Une fois la phase 1 terminée, les deux extrémités pourront échanger les données (Data) en toute sécurité, elles doivent donc décider quel trafic traversera le tunnel avec quel cryptage à appliquer. C’est la Phase 2.
Au cours de la phase 2, les deux extrémités de Tunnel négocient la manière de chiffrement et d’envoie des données en fonction des politiques de sécurité implémentées. Si les politiques de deux côtés sont d’accord, le tunnel sera opérationnel et prêt à être utilisé : Les données sont envoyées à travers le canal sécurisé établi lors de la Phase 1.
AH (Authentication Header) vs ESP (Encapsulating Security Payload)
AH et ESP sont deux protocoles différents utilisés dans la suite IPSec. L'en-tête d'authentification (AH) assure l'intégrité ainsi que l’authentification des origines de données.
L’entête ESP assure la confidentialité, l'intégrité des données, l'authentification de l'origine des données ainsi qu’un service anti-relecture.
En ce qui concerne AH, les informations d'en-tête d'authentification sont ajoutées au paquet généré par l'expéditeur, juste entre la couche 3 Network et la couche 4 Transport.
AH permet de signer numériquement l'intégralité du contenu de chaque paquet envoyé par l’expéditeur. Les algorithmes de chiffrement et de hachage souvent utilisés sont DES, MD5, SHA-1, …Cela permet de bien lutter contre la fraude et la modification de données. Mais n’empechera personne de les consulter et voir. Pour cela, IPSec utilise un cryptage avancé que fournit l'ESP. Ce dernier est utilisé pour chiffrer l'intégralité les données de la couche applicative supérieure. Il y parvient en ajoutant 3 composants différents : un en-tête ESP, une bande-annonce ESP et un bloc d'authentification ESP.
Il est à noter que dans un Paquet, l’ID du protocole IP de AH est 51 et de ESP est 50.
IPSec Modes : Tunnel Mode & Transport Mode
IPSec peut être configuré pour fonctionner selon deux modes différents : Tunnel et Transport.
Le mode tunnel est le mode par défaut. Avec ce mode, l'intégralité de paquet IP d'origine est protégée par IPSec : IPSec encapsule donc tout le paquet d'origine dans un nouveau paquet IP avec un nouveau Header (en-tête AH ou ESP), le crypte en totalité et l'envoie de l'autre côté du tunnel VPN.
Le mode transport assure la protection de données, et se compose d'un Header Classique TCP/UDP (Inchangé, celui du Paquet initial) + Données. Ces dernières sont encapsulées avec une en-tête AH ou ESP. Le mode de transport IPSec est généralement utilisé lorsqu'un autre protocole de tunneling (comme GRE) est utilisé pour encapsuler tout d'abord le paquet de données IP, puis IPSec est utilisé pour protéger les paquets du tunnel GRE.
GRE : Generic Routing Encapsulation
GRE est un protocole Cisco de création de Tunnel qui permet l'encapsulation (l’enveloppe) d'un Paquet IP Classique dans un nouveau Paquet contentant son propre Header GRE.
Il est à noter que GRE ne fait pas de cryptage, il encapsule juste la Data dans un Paquet avec un Header GRE. Si la protection des données est requise, IPSec doit être ajouté pour assurer la confidentialité et l’Intégrité des données.
Le tunnel GRE est souvent utilisé quand les Données doivent être envoyés d'un réseau Local à un autre via Internet ou un réseau non sécurisé. Et contrairement aux implémentations des Site-to-Site VPN qui n’acceptent pas les flux Multicast, GRE le fait. Du coup, il est adapté au Routage Dynamique OSPF ou autres et il est plus utilisé !
Présentation du Lab
L'Infra suivante permet de simuler deux Sites distants qui veulent communiquer à travers un Nuage Internet.
Le premier Site (A Gauche) contient deux Vlans : Vlan 10 (10.10.10.0/24) et Vlan 20 (10.10.20.0/24). Le Routage InterVlan s'effectue au Niveau du Routeur R1 en utilisant les sous-interfaces (Voir Confs dans la suite).
Le deuxième Site (A Droite) est un Réseau natif par défaut (Vlan 1) : 10.10.30.0/24.
On note que l’adressage utilisé pour le Nuage Internet Publique. Celui des LANs est Privé.
L'Objectif de ce Lab est de permettre tout d'abord aux Laptops de différents Vlans d'accéder à Internet (Nuage entre R1, R2, R3 et R4). Cela se fait à travers le NAT à implémenter au niveau R1 et R2. Puis, de permettre aussi aux deux Sites Distants de communiquer entre eux à travers Internet en implémentant un Tunnel GRE + IPSEC entre R1 et R2.
Le Lab peut être réalisé sur Gns3 :
Aux Confs : )
Confs à Implémenter
Routage Inter-Vlans entre les Networks 10 et 20 :
Pour que le PC1 (Vlan 10) communique avec le PC2 (Vlan 20), il suffit d’implémenter au niveau de l’interface physique LAN du R1 (Gi1/0) les sous interfaces et les encapsulations dot1q correspondantes. La conf est la suivante :
R1(config)#int Gi1/0
R1(config)#no shut
R1(config-if)#int Gi1/0.10
R1(config-subif)#encapsulation dot1q 10
R1(config-subif)#ip adress 10.10.10.254 255.255.255.0
R1(config-if)#int Gi1/0.20
R1(config-subif)#encapsulation dot1q 20
R1(config-subif)#ip adress 10.10.20.254 255.255.255.0
Conf du Routage et du NAT pour accéder à Internet :
Le Routage à implémenter au niveau R1 et R2 est la Route par défaut vers Internet.
(Le Nuage Internet est déjà préconfiguré, pour plus de simplicité, il peut être préparé en Statique).
Le type de NAT à utiliser par suite est le PAT (Port Address Translation) : Tout - à part les flux VPN à voir ultérieurement - sera Natté sur l’interface WAN Publique de sortie.
Les confs sont les suivantes :
R1(config)#ip route 0.0.0.0 0.0.0.0 1.1.1.3
R1(config)#
R1(config)#int Gi1/0.10
R1(config-subif)#ip nat inside
R1(config-subif)#int Gi1/0.20
R1(config-subif)# ip nat inside
R1(config-subif)#exit
R1(config)#int Gi2/0
R1(config-if)# ip nat outside
R1(config-if)#exit
R1(config)#
R1(config)# access-list 120 deny ip 10.10.10.0 0.0.0.255 10.10.30.0 0.0.0.255
R1(config)# access-list 120 deny ip 10.10.20.0 0.0.0.255 10.10.30.0 0.0.0.255
R1(config)# access-list 120 permit ip 10.10.10.0 0.0.0.255 any
R1(config)# access-list 120 permit ip 10.10.20.0 0.0.0.255 any
R1(config)#
R1(config)# ip nat inside source list 120 interface Gi2/0 overload
R1(config)#
R2(config)#ip route 0.0.0.0 0.0.0.0 3.3.3.4
R2(config)#
R2(config)#int Gi1/0
R2(config-if)#ip nat inside
R2(config-if)#exit
R2(config)#int Gi2/0
R2(config-if)# ip nat outside
R2(config-if)#exit
R2(config)#
R2(config)# access-list 120 deny ip 10.10.30.0 0.0.0.255 10.10.10.0 0.0.0.255
R2(config)# access-list 120 deny ip 10.10.30.0 0.0.0.255 10.10.20.0 0.0.0.255
R2(config)# access-list 120 permit ip 10.10.30.0 0.0.0.255 any
R2(config)#
R2(config)# ip nat inside source list 120 interface Gi2/0 overload
R2(config)#
Les résultats des Tests sont les suivantes (Access Internet OK, Access Privé Site Distant KO) :
Conf d’un Tunnel GRE entre R1 et R2 :
Dans ce qui suit, on va détailler étape par étape les Confs à Implémenter.
Tout d’abord, il suffit de configurer l’interface Logique du Tunnel à créer avec un plan d’adressage unique qui n’existe pas. On a besoin de l’IP Publique WAN de sortie de Routeur Local ainsi que l’IP Publique (WAN) du Site distant. La conf est la suivante (R1 et R2) :
R1(config)# interface Tunnel0
R1(config-if)# ip address 172.16.100.1 255.255.255.252
R1(config-if)# ip mtu 1400
R1(config-if)# ip tcp adjust-mss 1360
R1(config-if)# tunnel source 1.1.1.1
R1(config-if)# tunnel destination 3.3.3.2
R2(config)# interface Tunnel0
R2(config-if)# ip address 172.16.100.2 255.255.255.252
R2(config-if)# ip mtu 1400
R2(config-if)# ip tcp adjust-mss 1360
R2(config-if)# tunnel source 3.3.3.2
R2(config-if)# tunnel destination 1.1.1.1
Les deux extrémités crées du Tunnel se voient :
La deuxième étape est de Router le LAN des Vlans 10 et 20 ainsi que le LAN 30 et les forcer à circuler à travers le Tunnel0 et pas la route par défaut de l’interface WAN Publique :
R1(config)# ip route 10.10.30.0 255.255.255.0 172.16.100.2
R2(config)# ip route 10.10.10.0 255.255.255.0 172.16.100.1
R2(config)# ip route 10.10.20.0 255.255.255.0 172.16.100.1
Voilà, c’est Simple, et c’est largement suffisant pour faire communiquer les deux Sites distants : )
Le PC1 arrive maintenant à Pinger le PC3 du Site distant (en gardant son Access Internet) :
A ce niveau-là, les flux ne sont pas cryptés et circulent en clair encapsulés dans des trames GRE. Il faut ajouter la couche Sécurité (cryptage) : L’IPSec.
Les étapes de Conf sont deux : Phase 1 (ISAKMP) et Phase 2 (IPSec).
Concernant la Phase1, les paramètres choisis de ISAKMP SA sont :
3DES pour le Cryptage, MD5 comme algorithme de Hachage, Pre-shared key comme méthode d’authentification et Group 2 est le Diffie-Hellman groupe à utiliser pour l’échange de clés.
La conf est la suivante :
R1(config)# crypto isakmp policy 1
R1(config-isakmp)# encryption 3des
R1(config-isakmp)# hash md5
R1(config-isakmp)# authentication pre-share
R1(config-isakmp)# group 2
R1(config-isakmp)# lifetime 86400
R1(config-isakmp)#exit
R1(config)# crypto isakmp key Cisco address 3.3.3.2
R2(config)# crypto isakmp policy 1
R2(config-isakmp)# encryption 3des
R2(config-isakmp)# hash md5
R2(config-isakmp)# authentication pre-share
R2(config-isakmp)# group 2
R2(config-isakmp)# lifetime 86400
R2(config-isakmp)#exit
R2(config)# crypto isakmp key Cisco address 1.1.1.1
On passe par suite à la Phase 2 :
On crée le Transform Set avec les paramètres choisis suivants : ESP-3DES (méthode de cryptage), MD5 (Algorithme de hachage) et le mode utilisé est “Transport mode”.
R1(config)# crypto ipsec transform-set SET esp-3des esp-md5-hmac
R1(cfg-crypto-trans)# mode transport
R2(config)# crypto ipsec transform-set SET esp-3des esp-md5-hmac
R2(cfg-crypto-trans)# mode transport
Finalement on crée le IPSec Profile afin de collecter et appliquer les deux Phase 1 (ISAKMP) et 2 (Transform SET) ensemble.
R1(config)# crypto ipsec profile GRE
R1(ipsec-profile)# set security-association lifetime seconds 86400
R1(ipsec-profile)# set transform-set SET
R2(config)# crypto ipsec profile GRE
R2(ipsec-profile)# set security-association lifetime seconds 86400
R2(ipsec-profile)# set transform-set SET
La Conf de IPSec Profile est appliquée sous l’Interface tunnel crée ! Voilà !
R1(config)# interface Tunnel 0
R1(config-if)# tunnel protection ipsec profile GRE
R2(config)# interface Tunnel 0
R2(config-if)# tunnel protection ipsec profile GRE
La vérification de Cryptage des Flux s’effectue avec les deux commandes suivantes :
“show crypto isakmp sa” et “show crypto session detail”