Site-to-Site IPsec VPN
Qu’il s’agisse de sécuriser une connexion ou encore de créer une liaison entre deux sites au travers d’un réseau non sécurisé tel qu’Internet, le passage par un tunnel VPN se révèle être une arme redoutable.Cet article présente un exemple de configuration Site-à-Site. Chaque site étant une image d’un petit réseau disposat d’un accès à internet au travers d’un NAT overload…
La topologie
Configuration de base de SITE1
Configuration de l’interface WANinterface Serial0/0 ip address 80.1.0.2 255.255.255.252 ip nat outside clock rate 2000000Configuration de l’interface LAN
interface Loopback0 ip address 192.168.0.1 255.255.255.0 ip nat insideConfiguration du NAT
access-list 100 deny ip 192.168.0.0 0.0.0.255 172.16.0.0 0.0.0.255 access-list 100 permit ip 192.168.0.0 0.0.0.255 any
ip nat inside source list 100 interface Serial0/0 overloadNote: l’access-list est déjà préparée pour la création du VPN, c’est-à-dire qu’on exclut les communications entre les deux LANs de la règle NAT.
Configuration de la route par défaut
ip route 0.0.0.0 0.0.0.0 80.1.0.1
Configuration de base de SITE2
Configuration de l’interface WANinterface Serial0/0 ip address 80.2.0.2 255.255.255.252 ip nat outside clock rate 2000000Configuration de l’interface LAN
interface Loopback0 ip address 172.16.0.1 255.255.255.0 ip nat insideConfiguration du NAT
access-list 100 deny ip 172.16.0.0 0.0.0.255 192.168.0.0 0.0.0.255 access-list 100 permit ip 172.16.0.0 0.0.0.255 any
ip nat inside source list 100 interface Serial0/0 overloadNote: l’access-list est déjà préparée pour la création du VPN, c’est-à-dire qu’on exclut les communications entre les deux LANs de la règle NAT.
Configuration de la route par défaut
ip route 0.0.0.0 0.0.0.0 80.2.0.1
Principe de mise en place du tunnel VPN
La mise en place du tunnel VPN peut paraître complexe, mais il s’agit plutôt d’une tâche qui demande beaucoup de rigueur. En effet, il va falloir s’assurer qu’aux deux bouts du tunnel la configuration des différents paramètres soit identique.Voici le détail de la configuration sur SITE1:
Activation de ISAKMP (le protocole qui gère l’échange des clés, etc.)
SITE1(config)# crypto isakmp enableCréation d’une stratégie de négocation des clés et d’établissement de la laison VPN
SITE1(config)# crypto isakmp policy 10 SITE1(config-isakmp)# encryption aes SITE1(config-isakmp)# authentication pre-share SITE1(config-isakmp)# hash sha SITE1(config-isakmp)# group 2 SITE1(config-isakmp)# lifetime 86400On crée donc ici une stratégie avec un numéro de séquence 10. Ce numéro indique la priorité de l’utilisation de la stratégie. Plus petit est ce nombre plus la priorité est grande. On défini ensuite les paramètres:
- Encryptage AES
- Authentification par clé pré-partagées
- Algorithme de hachage SHA (valeur par défaut)
- Méthode de distribution des clés partagées DH-2 (Algoritme de clé asymétriques Diffie-Hellman 1024bits)
- Durée de vie 86400 secondes (valeur par défaut)
SITE1(config)# crypto isakmp identity addressOn crée ensuite la clé pré-partagée, ici « CiscoLab » qu’on associe avec l’adresse de l’autre bout du tunnel donc 80.2.0.2
SITE1(config)# crypto isakmp key 0 CiscoLab address 80.2.0.2Le 0 indique qu’on défini la clé en texte clair, en opposition avec un clé déjà cryptée si on la copie d’un « show run » d’un routeur ou l’encryptage des mots de passe est activé.
On a maintenant terminé la configuration de la partie qui gère la négociation des clés etc. La deuxième partie consite à définir comment les données seront cryptées.
Tout d’abord on crée la méthode de cryptage (transform-set) que l’on nomme VPNSET.
SITE1(config)# crypto ipsec transform-set VPNSET esp-aes esp-sha-hmacEsp-aes est la méthode de cryptage, esp-sha-hmac est la méthode d’authentification.
On défini ensuite la durée de vie de la clé de cryptage
SITE1(config)# crypto ipsec security-association lifetime kilobytes 4096La durée de vie est ici limitée par un volume en kilobytes (4096), on peut également définir une durée de vie en secondes (ex:crypto ipsec security-association lifetime seconds 3600).
Il faut maintenant créer une accès-list qui servira à identifier le traffic à traiter par le tunnel VPN. Pour SITE1, ce sera le traffic originaire de 192.168.0.0/24 à destination de 172.16.0.0/24. (Ce sera l’inverse pour SITE2). On crée donc une access-list étendue:
SITE1(config)# ip access-list extended VPN SITE1(config-ext-nacl)# permit ip 192.168.0.0 0.0.0.255 172.16.0.0 0.0.0.255Reste maintenant à créer une Crypto-map dont le but est de rassembler les différents éléments configurés pour pouvoir les appliquer enfin à une interface.
SITE1(config)# crypto map VPNMAP 10 ipsec-isakmp SITE1(config-crypto-map)# match address VPN SITE1(config-crypto-map)# set peer 80.2.0.2 SITE1(config-crypto-map)# set transform-set VPNSETOn a donc créé ici une Crypto-map nommée VPNMAP dans laquelle on intègre une séquence 10 (une seule crypto-map par interface, mais on peut ajouter plusieurs maps en leur indiquant des numéros de séquence différents), avec les paramètres suivants:
- Activée pour le trafic correspondant à l’access-list VPN
- Destination du tunnel 80.2.0.2
- Cryptage selon le transform-set VPNSET
SITE1(config)# interface serial 0/0 SITE1(config-if)# crypto map VPNMAPEt voilà. SITE est prêt. Reste à faire l’équivalent sur SITE2.
Configuration sur SITE2:
Parmi les points important, SITE2 soit avoir une stratégie isakmp identique à celle de SITE1 et l’access-list qui identifie le trafic à traiter par le tunnel VPN est inversée d’un point de vue de la source et de la destination.
SITE2(config)# crypto isakmp enable
SITE2(config)# crypto isakmp policy 10 SITE2(config-isakmp)# encryption aes SITE2(config-isakmp)# authentication pre-share SITE2(config-isakmp)# hash sha SITE2(config-isakmp)# group 2 SITE2(config-isakmp)# lifetime 86400
SITE2(config)# crypto isakmp identity address
SITE2(config)# crypto isakmp key 0 CiscoLab address 80.1.0.2
SITE2(config)# crypto ipsec transform-set VPNSET esp-aes esp-sha-hmac
SITE2(config)# crypto ipsec security-association lifetime kilobytes 4096
SITE2(config)# ip access-list extended VPN SITE2(config-ext-nacl)# permit ip 172.16.0.0 0.0.0.255 192.168.0.0 0.0.0.255
SITE2(config)# crypto map VPNMAP 10 ipsec-isakmp SITE2(config-crypto-map)# match address VPN SITE2(config-crypto-map)# set peer 80.1.0.2 SITE2(config-crypto-map)# set transform-set VPNSET
SITE2(config)# interface serial 0/0 SITE2(config-if)# crypto map VPNMAP
Vérification du tunnel VPN
Une fois le tunnel configuré, deux commandes permettent de vérifier si le tunnel fonctionne:- # show crypto isakmp sa
- # show crypto ipsec sa
SITE1#ping Protocol [ip]: Target IP address: 172.16.0.1 Repeat count [5]: Datagram size [100]: Timeout in seconds [2]: Extended commands [n]: y Source address or interface: 192.168.0.1 Type of service [0]: Validate reply data? [no]: Data pattern [0xABCD]: Sending 5, 100-byte ICMP Echos to 172.16.0.1, timeout is 2 seconds: Packet sent with a source address of 192.168.0.1 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 144/156/176 ms SITE1#On peut maintenant vérifier si le tunnel à bien fonctionné
SITE1#sh crypto isakmp sa IPv4 Crypto ISAKMP SA dst src state conn-id slot status 80.2.0.2 80.1.0.2 QM_IDLE 1001 0 ACTIVE IPv6 Crypto ISAKMP SA SITE1#
SITE1#sh crypto ipsec sa interface: Serial0/0 Crypto map tag: VPNMAP, local addr 80.1.0.2 protected vrf: (none) local ident (addr/mask/prot/port): (192.168.0.0/255.255.255.0/0/0) remote ident (addr/mask/prot/port): (172.16.0.0/255.255.255.0/0/0) current_peer 80.2.0.2 port 500 PERMIT, flags={origin_is_acl,} #pkts encaps: 19, #pkts encrypt: 19, #pkts digest: 19 #pkts decaps: 19, #pkts decrypt: 19, #pkts verify: 19 #pkts compressed: 0, #pkts decompressed: 0 #pkts not compressed: 0, #pkts compr. failed: 0 #pkts not decompressed: 0, #pkts decompress failed: 0 #send errors 1, #recv errors 0 local crypto endpt.: 80.1.0.2, remote crypto endpt.: 80.2.0.2 path mtu 1500, ip mtu 1500, ip mtu idb Serial0/0 current outbound spi: 0xE912A86D(3910314093) ...Les deux lignes en bleu indiquent les paquets reçus et envoyés par le tunnel VPN
Pour conclure voici une capture réalisée par WireShark sur la liaison entre SITE1 et VPN lors de l’envoi de requêtes ICP de 192.168.0.1 à 172.16.0.1:
Il est ici impossible de voir qu’il s’agit de paquets ICMP, la seule chose visible c’est qu’il y a un trafic crypté d’un bout à l’autre du tunnel.