Avec la généralisation du dégroupage et de l’Adsl 2+, il est possibles d’accéder à très bas coût à des connexions internet proposant des débits montants relativement honnêtes (1mb/s). Grâce à ces débits il devient tout a fait envisageable à de petites PME/PMI possédant plusieurs sites, d’inter connecter les réseaux via un VPN. Cette solution est d’ailleurs de plus en plus plébiscité par les entreprises, principalement grâce à son coût très faibles, et les débits « élevés », surtout vis à vis des solutions vieillissantes tels que RNIS(Numéris).
Présentation du réseau utilisé
Pour la suite de l’article, nous utiliserons le le réseau WAN ci-dessous, constitué de 2 sites distants, possédant chacun :
- un routeur Cisco, avec un IOS supportant les fonctions de cryptage (avec de préférence les module d’accélération de cryptage matériel pour les « anciennes » séries)
- une connexion Internet (avec ip fixe)
- Interface/Ip locale du routeur : FastEthernet 0 /172.16.1.254
- Interface/Ip internet du routeur : Ethernet 0 / 82.1.1.1
Site 2 : 172.16.2.0/24
- Interface/Ip locale du routeur : Ethernet 0 / 172.16.2.254
- Interface/Ip internet du routeur : Ethernet 1 / 82.2.2.2
Schéma Idéalisé
Le but du VPN est de faire en sorte que les 2 sites communiquent exactement comme s’ils étaient directement reliés entre eux, et que les 2 réseaux
soient routés (pas de NAT).
La liaison direct entre les 2 routeurs (172.16.254.0/30)
symbolise le lien que l’on souhaite créer avec le VPN.
1.3 Schéma réel – Principe de mise en place
Dans la réalité il est évidement hors de question de connecter directement les 2 routeurs, puisque le but premier du VPN est justement de se passer d’une Ligne Spécialisée. Ce lien sera donc créé grâce à un tunnel crypté, qui permettra au 2 sites de communiquer entre eux de manière sécurisée. Pour cela, on créera des interfaces virtuelles, permettant de symboliser les 2 extrémités de ce tunnel.
La mise en place du VPN vas se fera donc en 3 phases :
- Mise en place d’un Tunnel (GRE) entre les 2 sites (définition des interfaces virtuelles)
- Cryptage de ce tunnel
- Mise en place du routage entre les 2 Réseaux locaux.
2 Configuration du premier routeur
Soit la configuration standard suivante, permettant l’accès à internet (web) pour le Site 1 :
ip subnet-zero ! interface FastEthernet0 ip address 172.16.1.254 255.255.255.0 ip nat inside ! interface Ethernet0 ip address 82.1.1.1 255.255.255.0 ip access-group netin in ip access-group netout out ip nat outside ! ip classless ip route 0.0.0.0 0.0.0.0 Ethernet0 82.1.1.254 ! ip nat inside source list natlist interface Ethernet0 overload ! ip access-list extended netin permit tcp any host 82.1.1.1 established permit udp any eq domain host 82.1.1.1 permit tcp any eq www host 82.1.1.1 permit tcp any eq 443 host 82.1.1.1 ! ip access-list extended netout permit udp host 82.1.1.1 any eq domain permit tcp host 82.1.1.1 any eq www permit tcp host 82.1.1.1 any eq 443 ! ip access-list extended natlist permit ip 172.16.1.0 0.0.0.255 any
2.1 Mise en place du Tunnel
Pour mettre en place le tunnel, créez l’interface virtuelle , puis
configurez la en spécifiant :
- son adresse ip (ici 10.16.254.1)
- à quelle interface physique elle est rattachée
- vers quelle ip (internet) pointe l’autre bout du tunnel
Note : toutes commandes suivantes se font en mode de configuration global.
site1(config)#interface tunnel 2 site1(config-if)# ip address 10.16.254.1 255.255.255.252 site1(config-if)# tunnel source Ethernet0 site1(config-if)# tunnel destination 82.2.2.2
2.2 Cryptage du tunnel
Nous allons tout d’abord spécifier la manière d’authentification. Dans notre cas, nous utiliserons une clef pré partagé:
note(1): nous numéroterons cette méthode « 2 » , puisque qu’il s’agira de la méthode utilisée pour authentifier le site 2.
note(2): l’option « lifetime » indique la durée de vie de l’authentification (en secondes).
site1(config)# crypto isakmp policy 2 site1(config-isakmp)# authentication pre-share site1(config-isakmp)# lifetime 3600
Définition de la clef pré-partagée (en spécifiant l’ip de l’hôte avec qui celle sera utilisée, c’est à dire l’ip internet du second routeur)
site1(config)# crypto isakmp key ###MaClef### address 82.2.2.2
Sélection de l’algorithme de cryptage (DES, 56bits). Nous appellerons cette méthode de cryptage « transfdes ».
note : selon la puissance et les possibilités du routeur il est préférable de prendre des algorithmes de cryptage plus conséquents, tels de
3DES (esp-3des, 168bits) ou AES (esp-aes).
site1(config)# crypto ipsec transform-set transfdes esp-des
Nous allons maintenant créer une Access List qui vas sélectionner le trafic à crypter. Le tunnel IP encapsulant déjà tout le trafic dans des trames GRE, il suffit juste de sélectionner le trafic GRE entre les 2 routeurs. Nous appellerons cette Access List « cryptolist »:
site1(config)# ip access-list extended cryptolist site1(config-ext-nacl)# permit gre host 82.1.1.1 host 82.2.2.2
Nous allons maintenant regrouper toutes ces informations dans une « carte de cryptage », que nous appellerons « cryptvpn ».
note : les lignes « set security-association lifetime » définissent la durée de vie d’une session crypté.
site1(config)# crypto map cryptvpn 2 ipsec-isakmp site1(config-crypto-map)# set peer 82.2.2.2 site1(config-crypto-map)# set security-association lifetime kilobytes 102400 site1(config-crypto-map)# set security-association lifetime seconds 600 site1(config-crypto-map)# set transform-set transfdes site1(config-crypto-map)# match address cryptolist
Il ne reste plus qu’a appliquer cette « carte » sur l’interface internet du routeur :
site1(config)# interface Ethernet0 site1(config-if)# crypto map cryptvpn
Routage entre les 2 sites
ATTENTION !!!
NAT et routage peuvent ne pas faire bon ménage lorsqu’ils sont tout deux appliqué sur le même routeur, si l’on y prends pas garde. Il est donc impératif de REJETER le trafic destiné au VPN dans les règles du NAT. Nous devrons donc insérer une règle rejetant ce trafic AVANT celle déjà existence, nous l’insérerons donc en 5° position (les autres règles commençant en standard à 10)
site1(config)# ip access-list extended natlist site1(config-ext-nacl)# 5 deny ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255
Au final, l’Access List ressemblera à :
site1#sh access-lists natlist Extended IP access list natlist 5 deny ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255 (5790 matches) 10 permit ip 172.16.1.0 0.0.0.255 any (97034 matches)
Afin que le routage puisse être effectué correctement, il est essentiel de rajouter une route statique vers le réseau distant.
On notera au passage que l’on indique bien l’ip virtuelle du tunnel pour le second routeur, et non l’ip internet.
site1(config)# ip route 172.16.2.0 255.255.255.0 Tunnel2 10.16.254.2
2.4 Sécurité du routeur
Si comme dans cet exemple, vous filtrez le trafic sur votre interface internet (ce qui est vivement recommandé), il est essentiel de laisser passer les paquets d’authentification et le tunnel lui même. On notera au passage qu’à ce stade, on ne permet pas du tout le protocole Gre, puisqu’à ce stade (lors de la vérification de l’ACL par le routeur), il est déjà encapsulé dans les trames cryptées (ESP).
site1(config)# ip access-list extended netin site1(config-ext-nacl)# permit udp host 82.2.2.2 eq isakmp host 82.1.1.1 eq isakmp site1(config-ext-nacl)# permit esp host 82.2.2.2 host 82.1.1.1 site1(config)# ip access-list extended netout site1(config-ext-nacl)# permit udp host 82.1.1.1 eq isakmp host 82.2.2.2 eq isakmp site1(config-ext-nacl)# permit esp host 82.1.1.1 host 82.2.2.2
3 Configuration du deuxième routeur
La configuration étant strictement la même sur le deuxième routeur (sauf bien sur les adresses sources et de destination),
voici donc la configuration complète pour le deuxième routeur :
ip subnet-zero ! crypto isakmp policy 1 authentication pre-share lifetime 3600 crypto isakmp key ###MaClef### address 82.1.1.1 ! crypto ipsec transform-set transfdes esp-des ! crypto map cryptvpn 1 ipsec-isakmp set peer 82.1.1.1 set security-association lifetime kilobytes 102400 set security-association lifetime seconds 600 set transform-set transfdes match address cryptolist ! interface Tunnel1 ip address 10.16.254.2 255.255.255.252 tunnel source Ethernet1 tunnel destination 82.1.1.1 ! interface Ethernet0 ip address 172.16.2.254 255.255.255.0 ip nat inside ! interface Ethernet1 ip address 82.2.2.2 255.255.255.0 ip access-group netin in ip access-group netout out ip nat outside crypto map cryptvpn ! ip default-gateway 82.2.2.254 ip classless ip route 0.0.0.0 0.0.0.0 Ethernet1 82.2.2.254 ip route 172.16.1.0 255.255.255.0 Tunnel1 10.16.254.1 ! ip nat inside source list listnat interface Ethernet1 overload ! ip access-list extended cryptolist permit gre host 82.2.2.2 host 82.1.1.1 ! ip access-list extended netin permit tcp any host 82.2.2.2 established permit udp any eq domain host 82.2.2.2 permit tcp any eq www host 82.2.2.2 permit tcp any eq 443 host 82.2.2.2 permit udp host 82.1.1.1 eq isakmp host 82.2.2.2 eq isakmp permit esp host 82.1.1.1 host 82.2.2.2 ! ip access-list extended netout permit udp host 82.2.2.2 any eq domain permit tcp host 82.2.2.2 any eq www permit tcp host 82.2.2.2 any eq 443 permit udp host 82.2.2.2 eq isakmp host 82.1.1.1 eq isakmp permit esp host 82.2.2.2 host 82.1.1.1 ! ip access-list extended listnat deny ip 172.16.2.0 0.0.0.255 172.16.1.0 0.0.0.255 permit ip 172.16.2.0 0.0.0.255 any
4 Vérifier le bon fonctionnement du VPN
Afin de vérifier le bon fonctionnement du VPN, plusieurs commandes sont à votre disposition :
En mode privilégié :
show crypto engine connections active : vous permet de voir les connexions cryptées actives :
site1#sh crypto engine connections active ID Interface IP-Address State Algorithm Encrypt Decrypt 2002 Ethernet0 82.1.1.1 set DES 527 0 2005 Ethernet0 82.1.1.1 set DES 0 490
show crypto ipsec transform-set : vous permet de voir les différents types d’encodage actifs.
site1#sh crypto ipsec transform-set Transform set transfdes: { esp-des } will negotiate = { Tunnel, },
show crypto ipsec transform-set : fourni une version plus détaillé que les 2 commandes citées plus haut.
site1#sh crypto ipsec sa interface: Ethernet0 (...) inbound esp sas: spi: 0x4A65829E(1248166558) transform: esp-des , in use settings ={Tunnel, } conn id: 2005, flow_id: C1700_EM:5, crypto map: cryptvpn sa timing: remaining key lifetime (k/sec): (99130/563) IV size: 8 bytes replay detection support: N Status: ACTIVE outbound esp sas: spi: 0x3481731A(880898842) transform: esp-des , in use settings ={Tunnel, } conn id: 2002, flow_id: C1700_EM:2, crypto map: cryptvpn sa timing: remaining key lifetime (k/sec): (99129/556) IV size: 8 bytes replay detection support: N Status: ACTIVE
show ip route : vous permet de vérifier les routes.
site1#sh ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is 82.1.1.254 to network 0.0.0.0 172.16.0.0/24 is subnetted, 3 subnets S 172.16.2.0 [1/0] via 10.16.254.2, Tunnel2 C 172.16.1.0 is directly connected, FastEthernet0 82.0.0.0/24 is subnetted, 1 subnets C 82.1.1.0 is directly connected, Ethernet0 10.0.0.0/30 is subnetted, 1 subnets C 10.16.2.0 is directly connected, Tunnel2 S* 0.0.0.0/0 [1/0] via 82.1.1.254, Ethernet0
show ip access-lists : vous permet de vérifier le fonctionnement des différents Access Lists.
site1#sh ip access-lists Extended IP access list cryptolist 10 permit gre host 82.1.1.1 host 82.2.2.2 Extended IP access list netin 10 permit tcp any host 82.1.1.1 established 20 permit udp any eq domain host 82.1.1.1 (xxx matches) 30 permit tcp any eq www host 82.1.1.1 (xxx matches) 40 permit tcp any eq 443 host 82.1.1.1 (xxx matches) 50 permit udp host 82.2.2.2 eq isakmp host 82.1.1.1 eq isakmp (18 matches) 60 permit esp host 82.2.2.2 host 82.1.1.1 (573 matches) Extended IP access list netout 10 permit udp host 82.1.1.1 any eq domain (xxx matches) 20 permit tcp host 82.1.1.1 any eq www (xxx matches) 30 permit tcp host 82.1.1.1 any eq 443 (xxx matches) 40 permit udp host 82.1.1.1 eq isakmp host 82.2.2.2 eq isakmp (16 matches) 50 permit esp host 82.1.1.1 host 82.2.2.2 (461 matches) Extended IP access list natlist 5 deny ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255 (461 matches) 10 permit ip 172.16.1.0 0.0.0.255 any (xxx matches)
Le mot de la fin
Grâce au connexion internet d’aujourd’hui, la solution VPN est plus que viable, et permet à des entreprise de taille relativement petites d’accéder à des fonctionnalités avancées.
Néanmoins, la mise ne place du VPN demande de la rigueur, car il s’agit en fait de la combinaison de 3 technologies (cryptage, routage, firewalling), et si l’on y prête pas attention, on peut rapidement laisser de grosse failles de sécurités.