Cisco – Implémenter un VPN IPSEC en mode Remote access

Avec l’accroissement du potentiel de mobilité offert de nos jours par différents modèles d’interconnexions (internet via les telcos filaires, telcos mobile ‘Edge, 3G, UMTS etc …), l’accès distant au système d’information en mode nomadisme représente un moyen facile et économique d’accéder au SI d’une entreprise. Cependant, l’accès distant n’est pas toujours synonyme de respect des contraintes de sécurité devant être imposées de nos jours en raison de l’accroissement des problématiques de sécurité.

Les enjeux dépassant le cadre même de l’utilisateur souhaitant accéder à son espace de travail à distance, de là est venue la nécessité de mettre en place des moyens d’interconnexions pouvant répondre au besoin d’un utilisateur nomade tout en respectant les contraintes de sécurité imposées (dans notre contexte la confidentialité, l’intégrité, voir la non répudiation). L’une des réponses à ce besoin a été la conception du protocole IPSEC (évolution sécurisé du protocole IP), protocole répondant à la problématique des échanges sécurisés.

Ce tutoriel a pour objectif de présenter comment mettre en place un système d’accès sécurisé au système d’information d’une entité par le biais d’un tunnel IPSEC en mode accès distant (remote user). Ce mode de connexion est très rependu pour les utilisateurs nomades.

Introduction IPSEC:

IPsec se base sur ISAKMP qui est un protocole permettant la négociation sécurisée d’un tunnel (IPSec) entre deux personnes. La négociation ISAKMP est divisée en deux phases appelées phase 1 et phase 2.

La phase 1 est dédiée à la mise en œuvre d’un tunnel permettant de sécuriser les échanges de messages ISAKMP. La phase 2 est mise en œuvre afin de protéger les données via une sécurisation chiffrée des flux en transit.

Pour réaliser la négociation ISAKMP, il est nécessaire de créer une règle ISAKMP. Cela inclut les points suivants :

  •        Une méthode d’authentification pour garantir l’identité des pairs.
  •        Mise en œuvre d’une méthode de chiffrement des données.
  •        Un algorithme de hachage est spécifié afin de permettre de garantir l’identité de la personne et le contrôle d’intégrité des données.
  •        Configuration du groupe Diffie-Hellman afin de spécifier la taille de la clé de chiffrement. .

 

La mise en oeuvre d’un VPN IPSEC RA comprend plusieurs étapes :

  1. Créer une ou plusieurs règles ISAKMP
  2. Créer un pool d’adresse pour les clients distants
  3. Configurer une méthode d’authentification
  4. Créer un tunnel group
  5. Configurer les paramètres ipsec
  6. Configurer une crypto map dynamique
  7. Créer une entrée pour la crypto map et l’associer à la dynamic map
  8. Associer la crypo map à une interface
  9. Activer isakmp sur une interface

 

Schéma de principe du mode remote-access (accès distant):

 

Configuration d’un VPN IPSEC en mode accès distant

 

Configuration du collecteur IPSEC RA (serveur IPSEC)

 

Configuration d’ISAKMP au niveau de l’interface outside :

On spécifie le type d’authentification de la phase 1. L’exemple suivant est base sur une clé partagée.

hostname(config)# isakmp policy 1

ciscoasa(config-isakmp-policy)# authentication pre-share

Spécifier la méthode de chiffrement. Pour l’exemple suivant, la méthode de chiffrement est l’aes 128, mais il est également possible de spécifier un chiffrement basé sur de l’AES (préconisé).

ciscoasa(config-isakmp-policy)# encryption aes-128

On spécifie la method HMAC (méthode de hachage). L’exemple suivant permet indiqué la mise en œuvre du contrôle d’intégrité basé sur SHA-1.

ciscoasa(config-isakmp-policy)# hash sha

On spécifie le groupe diffie-hellman. Dans l’exemple ci-dessous la valeur est 5. Le groupe diffie-hellman permet de sécuriser l’échange de clé via l’utilisation d’un média non sécurisé (internet par exemple).

hostname(config)# group 5

Indiquer la durée de vie du chiffrement de la clé. L’exemple suivant spécifie 43,200 seconds (soit 12 heures).

ciscoasa(config-isakmp-policy)# lifetime 43200

 

Création d’un pool d’adresse :

Le boîtier nécessite une méthode d’attribution d’adresse IP aux utilisateurs. La méthode la plus souvent utilisée consiste à mettre en œuvre un pool d’adresse spécifique, il est également possible d’utiliser une attribution basée sur le service DHCP. Dans notre cas de figure, nous avons choisis l’attribution d’adresse par pool IP.

Pour configurer un pool d’adresse, il suffit de saisir la commande ip local pool.

La syntaxe de base:

ip local pool {poolname} {adresse de débutadresse de fin}.

Exemple de configuration:

hostname(config)# ip local pool vpnra-users 192.168.0.10-192.168.0.15

Ajout d’un utilisateur :

Afin d’identifier le client il est nécessaire de spécifier un compte et un mot de passe.

La commande username permet d’ajouter un utilisateur.

La syntaxe de base:

username {username} password {password}.

Dans l’exemple suivant le compte est aghiles et le mot de passe motdepasse.

hostname(config)# username aghiles password   &2″4(6è8ç0B=

(attention aux mots de passe peu complexe, les attaques par brute force ou dictionnaires sont là pour ça)

 

Création du Transform Set:

Le transform set est l’association d’une méthode de chiffrement et d’authentification. Cette phase va permettre durant l’association basée sur ISAKMP de se mettre d’accord durant les échanges afin de fixer la méthode de sécurisation des données. Les paramètres du transform set devrons être les mêmes des deux côtés.

Le transforme set va permettre de sécuriser les flux détermine à partir d’une access-list associé à une crypto map. Il est possible de spécifier des transform set et d’appliquer 11 crypto map et dynamic map.

La syntaxe de base:

crypto ipsec {transform-set} {transform-set-name} {encryption-method } { authentication-method }

Dans l’exemple suivant un transform set nommé FirstSet a été créé, un chiffrement basé sur une encapsulation esp-aes-128, et une authentification basée sur sha1 esp-sha1-hmac:

hostname(config)# crypto ipsec transform set FirstSet esp-aes esp-sha-hmac

hostname(config)#

 

Définir un Tunnel Group

Il existe par défaut deux types de tunnel group au sein des appliances ASA & PIX, le groupe DefaultRAGroup mis en œuvre dans le cadre des tunnels en mode accès distant et le Tunnel Group de type DefaultL2Lgroup correspondant par défaut à la mise en œuvre de tunnels IPSec LAN-to-LAN.

Afin d’établir une connexion d’accès à distance, il est nécessaire d’attribuer 3 attributs à un Tunnel Group:

  • Spécifier que le type de connexion est en mode accès distant (remote access).
  • Spécifier le mode d’attribution des adresses IP, dans notre cas la méthode par groupe d’adresse.
  • Spécifier une méthode d’authentification, dans notre cas de figure, la mise en œuvre d’une clé partagée.

Afin de configurer le Tunnel Group il suffit de saisir la commande suivante

La syntaxe de base:

Tunnel-group {nom} type {type}, on affecte un nom au Tunnel group et le type.

  • ipsec-ra (IPSec remote access)
  • ipsec-l2l (IPSec LAN to LAN)

Dans l’exemple suivant le nom du Tunnel group utilisé est testgroup.

hostname(config)# tunnel-group testgroup type ipsec-ra

hostname(config)#

Afin de configurer l’attribution des addresse IP il faut pour cela affecter le pool d’adresse aux attributs généraux du Tunnel Group testgroup.

Ci-dessous les commandes à saisir :

hostname(config)# tunnel-group testgroup general-attributes

hostname(config-general)# address-pool vpnra-users

L’étape suivante consiste à affecter la valeur de la clé partagée au Tunnel Group testgroup qui devra être connue des deux personnes, afin valider l’authentification lors de la mise en œuvre du tunnel IPSec. Pour cela il faut insérer cette information dans le mode ipsec-attributes du Tunnel group.

La clé partagée doit posséder une valeur alphanumérique comprise entre 1 et 128 caractères. Dans l’exemple suivant la clé a pour valeur @Bc5*+-op.

hostname(config)# tunnel-group testgroup ipsec-attributes

hostname(configipsec)# pre-shared-key @Bc5*+-op

 

Configuration d’une crypto map dynamique :

L’asa utilise les crypto maps dynamique afin de permettre la mise en oeuvre de modèles de stratégies, ces modèles de stratégie sont utile pour les clients initiant des connexions ne possédant pas de paramètres de configuré (ce qui est le cas d’un client distant).

Spécifier le nom de l’entrée de la crypto map dynamique via la commande suivante, crypto dynamic-map set transform-set .

La syntaxe est crypto dynamic-map nom_map_dynamique seq-num set transform-set nom_du_transformset

voir l’exemple ci-dessous.

hostname(config)# crypto dynamic-map dyn1 1 set transform-set FirstSet

hostname(config)#

 

Création d’une Crypto Map afin d’y associer la Crypto Map dynamique :

Créer la Crypto Map qui va être associée à la crypto map dynamique afin d’y affecter les paramètres de l’association de sécurité d’IPSec.

Dans l’exemple suivant, le nom de la crypto map est mymap, le numéro de séquence 1 et enfin on spécifie le nom de la crypto map dynamique précédemment créée.

On crée la crypto map associée à une crypto map dynamique en utilisant la commande crypto map.

La syntaxe de base:

crypto map map-name seq-num ipsec-isakmp dynamic dynamic-map-name.

Exemple :

hostname(config)# crypto map mymap 1 ipsec-isakmp dynamic dyn1

hostname(config)#

 

Activer la crypto désirée sur l’interface concernée (dans notre cas mymap sur l’interface outside):

On applique la crypto map à l’interface outside, sachant que l’interface outside (dans mon exemple) est l’interface par laquelle la connexion distante IPSec sera réalisée

La syntaxe de base:

crypto map map-name interface interface-name

Exemple:

hostname(config)# crypto map mymap interface outside

hostname(config)#

 

Activer ISAKMP sur l’interface concernée (dans notre cas outside).

hostname(config)# isakmp enable outside

hostname(config)#

 

Mise en œuvre du split tunneling :

 

Qu’est ce que c’est ?

Le split tunneling est un mécanisme qui va agir sur la décision de routage sur le poste client si celui-ci est activé depuis le serveur IPSEC.

Par défaut, un client sans split-tunneling ne pourra pas accéder à un autre réseau que ceux définis dans sa table de routage. Parmi ces réseaux définis, en priorité sera inscrit le réseau correspondant au pool VPN, route qui sera définie comme route par défaut. Le problème est que ce mode de fonctionnement ne permet pas d’accéder à des réseaux autres que celui fourni par la politique IPSEC.

Afin de palier à ce problème, il suffit d’activer ce mécanisme afin de laisser la route par défaut effectuer le routage vers les destinations autres que celles descendues par la politique de sécurité du VPN via le client Cisco VPN.

 

Exemple concret ci-dessous:

  • La table de routage descendu sans le split-tunneling:

Comme vous pouvez le constater, le système indique l’existence de deux route par défaut. La route allant ver la passerelle de mon PC conserve sa metrique de 10, tandis que la métrique de la passerelle correspondant à l’interface virtuel du tunnel est de 1. Ceci explique le fais que je ne puisse pas pinguer free.fr, mon collecteur IPSEC n’étant pas configurer pour véhiculer mon flux par défaut vers internet ou autres destinations inconnues.

IPv4 Table de routage
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
   0.0.0.0          0.0.0.0    192.168.1.254    192.168.1.100     10
          0.0.0.0          0.0.0.0    192.168.100.2    192.168.100.1     11
127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
…………..
……………..
……………………
===========================================================================
Itinéraires persistants :
Adresse réseau    Masque réseau  Adresse passerelle Métrique
          0.0.0.0          0.0.0.0    192.168.1.254  Par défaut
          0.0.0.0          0.0.0.0    192.168.100.2       1
===========================================================================

 

 

  • La table de routage descendu avec le split-tunneling:

Le résultat avec l’activation du split-tunneling est simple, plus de route par défaut forçant le trafic à transiter à travers le tunnel à destination du concentrateur IPSEC.

IPv4 Table de routage
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métriqu
         0.0.0.0          0.0.0.0    192.168.1.254    192.168.1.100     10
192.168.1.0    255.255.255.0         On-link     192.168.1.100    266
      192.168.1.0    255.255.255.0    192.168.100.2    192.168.100.1    100 –> route spécifique au LAN IPSEC
      192.168.1.1  255.255.255.255         On-link     192.168.1.100    100
192.168.1.100  255.255.255.255         On-link     192.168.1.100    266
192.168.1.100  255.255.255.255    192.168.100.2    192.168.100.1    266
192.168.1.254  255.255.255.255         On-link     192.168.1.100    100
192.168.1.255  255.255.255.255         On-link     192.168.1.100    266
192.168.1.255  255.255.255.255    192.168.100.2    192.168.100.1    266
192.168.100.0    255.255.255.0         On-link     192.168.100.1    266
192.168.100.1  255.255.255.255         On-link     192.168.100.1    266
192.168.100.255  255.255.255.255         On-link     192.168.100.1    266

===========================================================================
Itinéraires persistants :
Adresse réseau    Masque réseau  Adresse passerelle Métrique
          0.0.0.0          0.0.0.0    192.168.1.254  Par défaut –> Maintien de la route par défaut du LAN client.
===========================================================================

 

  • Configuration du service:

Il faut dans un premier temps créer une ACL permettant d’identifier le traffic.

ciscoasa(config)#access-list Split_Tunnel_List remark Split tunneling.

ciscoasa(config)#access-list Split_Tunnel_List standard permit 192.168.1.0 255.255.255.0

Entrer dans le mode de configuration du Group Policy (nous créons dans notre cas un group policy masternaut).

ciscoasa(config)#group-policy vpnra attributes

ciscoasa(config-group-policy)#

On indique la stratégie de splittunneling. Il s’agit par défaut de la commande ci-dessous.

ciscoasa(config-group-policy)#split-tunnel-policy tunnelspecified

On applique l’access-list identifiant le flux. Dans notre cas il s’agit de l’access-list Split_Tunnel_List.

ciscoasa(config-group-policy)#split-tunnel-network-list value Split_Tunnel_List

Enfin il faut affecter dans les attributs généraux du tunnel-group la stratégie de split tunneling:

ciscoasa(config)#tunnel-group vpnra general-attributes

Associer le group policy au Tunnel Group

ciscoasa(config-tunnel-ipsec)# default-group-policy vpnra

 

 

Configuration du  client IPSEC (Cisco VPN Client):

Cisco VPN Client est un client VPN propriétaire permettant de se connecter aux concentrateurs VPN Cisco. Il est utilisé dans le cadre d’infrastructures gérant des milliers de connexions, on le retrouve donc le plus souvent dans les grandes entreprises et de nombreuses universités.  » Source des commentaires : wikipedia »

Versions 5.x

  • Cisco VPN Client 5.0
    La version 5.0 est une version exclusivement réservée à Windows, qui introduit le support de Windows Vista. Le support de Windows Vista comporte toutefois de nombreuses limitations, comme l’absence du Integrated Client Firewall, lequel peut être nécessaire à la connexion, dépendamment de la configuration du concentrateur. En effet, les fonctionnalités suivantes ne sont plus disponibles avec la version 5.0:
  • Installation sur des systèmes mis à jour de Windows XP vers Windows Vista (une installation propre de Vista est requise)
  • Démarrage du client avant l’ouverture de session (du fait de la disparition avec Vista de GINA au profit de SSO)
  • Authentification par carte à puce (réapparu avec la version Beta 5.0.03.0300)
  • Pare-feu intégré (le SDK Check Point Integrity Agent n’est pas disponible pour Vista)
  • InstallShield (seul les packages MSI sont dorénavant supportés)
  • Mise à jour automatique du client
  • Aide en ligne traduite. L’aide en ligne est fournie uniquement en anglais.

 » Source : wikipedia »

Ci-dessous des captures d’écran permetant d’identifier l’interface du programme:

  • Afin de créer une nouvelle connexion, il suffit de cliquer sur le bouton new, puis passer au screenshot suivant:

 

  • Afin de paramétrer l’accès au concentrateur VPN, il suffit de remplir les champ suivants:
  • connection entry: Permet d’identifier le profil par le biais de l’assignation d’un nom, exemple « astreinte »
  • Description: Permet d’identifier par un commentaire le rôle du profil (facultatif)
  • Host: permet d’identifier par un nom (dns) ou une IP le concentrateur en charge de la collecte VPN.

 

  • Ensuite indiquer les derniers paramètres dans l’onglet « authentication« :
  • Name: Permet d’identifier le profil d’accès distant configuré sur le concentrateur.
  • Password & confirm password: permet de définir le mot de passe associé à la phase 1 du profil d’accès distant.

 

  • Enfin cliquez sur « save« :

 

  • Après avoir sauvegardé le profil, il suffit de lancer la session sur le profil désiré:

 

  •  Enfin insérer les informations d’authentifications attendues par le concentrateur:

 

Commandes de diagnostique du service:

 

  •  Visualiser l’état d’une session de type remote access via la commande show vpn-sessiondb detail remote :

ciscoasa# show vpn-sessiondb detail remote filter ?

a-ipaddress   Assigned IP Address specific session
encryption    Encryption Algorithm
name          Username specific sessions
p-ipaddress   Public IP Address specific sessions
protocol      Protocol
tunnel-group  Tunnel-group sessions

ciscoasa# show vpn-sessiondb detail remote

Session Type: IPsec Detailed
Username     : aghiles                Index        : 7
Assigned IP  : 192.168.100.1          Public IP    : 192.168.1.100
Protocol     : IKE IPsec
Encryption   : AES128                 Hashing      : SHA1
Bytes Tx     : 0                      Bytes Rx     : 0
Pkts Tx      : 0                      Pkts Rx      : 0
Pkts Tx Drop : 0                      Pkts Rx Drop : 0
Group Policy : astreinte              Tunnel Group : astreinte
Login Time   : 01:16:37 UTC Tue Nov 30 1999
Duration     : 0h:05m:30s
NAC Result   : Unknown
VLAN Mapping : N/A                    VLAN         : none

IKE Tunnels: 1
IPsec Tunnels: 1

IKE:
Tunnel ID    : 7.1
UDP Src Port : 62114                  UDP Dst Port : 500
IKE Neg Mode : Aggressive             Auth Mode    : preSharedKeys
Encryption   : AES128                 Hashing      : SHA1
Rekey Int (T): 86400 Seconds          Rekey Left(T): 86073 Seconds
D/H Group    : 2
Filter Name  :

IPsec:
Tunnel ID    : 7.2
Local Addr   : 0.0.0.0/0.0.0.0/0/0
Remote Addr  : 192.168.100.1/255.255.255.255/0/0
Encryption   : AES128                 Hashing      : SHA1
Encapsulation: Tunnel
Rekey Int (T): 28800 Seconds          Rekey Left(T): 28472 Seconds
Idle Time Out: 30 Minutes             Idle TO Left : 24 Minutes
Bytes Tx     : 0                      Bytes Rx     : 0
Pkts Tx      : 0                      Pkts Rx      : 0

NAC:
Reval Int (T): 0 Seconds              Reval Left(T): 0 Seconds
SQ Int (T)   : 0 Seconds              EoU Age(T)   : 328 Seconds
Hold Left (T): 0 Seconds              Posture Token:
Redirect URL :

 

  •  Visualiser la connexion IPSec :

ciscoasa# show crypto ipsec sa
interface: outside
Crypto map tag: dynmapastreinte, seq num: 1, local addr: 192.168.1.1local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port): (192.168.100.1/255.255.255.255/0/0)
current_peer: 192.168.1.100, username: aghiles
dynamic allocated peer ip: 192.168.100.1#pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0
#pkts decaps: 0, #pkts decrypt: 0, #pkts verify: 0
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts comp failed: 0, #pkts decomp failed: 0
#pre-frag successes: 0, #pre-frag failures: 0, #fragments created: 0
#PMTUs sent: 0, #PMTUs rcvd: 0, #decapsulated frgs needing reassembly: 0
#send errors: 0, #recv errors: 0local crypto endpt.: 192.168.1.1, remote crypto endpt.: 192.168.1.100path mtu 1500, ipsec overhead 74, media mtu 1500
current outbound spi: 7F8FEDE4inbound esp sas:
spi: 0x2226AE74 (572960372)
transform: esp-aes esp-sha-hmac none
in use settings ={RA, Tunnel, }
slot: 0, conn_id: 16384, crypto-map: dynmapastreinte
sa timing: remaining key lifetime (sec): 28792
IV size: 16 bytes
replay detection support: Y
outbound esp sas:
spi: 0x7F8FEDE4 (2140138980)
transform: esp-aes esp-sha-hmac none
in use settings ={RA, Tunnel, }
slot: 0, conn_id: 16384, crypto-map: dynmapastreinte
sa timing: remaining key lifetime (sec): 28792
IV size: 16 bytes
replay detection support: Y
  •  Visualiser l’état de la connexion ISAKMP :

ciscoasa# show crypto isakmp

Active SA: 1
Rekey SA: 0 (A tunnel will report 1 Active and 1 Rekey SA during rekey)
Total IKE SA: 1

1   IKE Peer: 192.168.1.100
Type    : user            Role    : responder
Rekey   : no              State   : AM_ACTIVE

Global IKE Statistics
Active Tunnels: 1
Previous Tunnels: 2
In Octets: 24888
In Packets: 215
In Drop Packets: 0
In Notifys: 196
In P2 Exchanges: 2
In P2 Exchange Invalids: 0
In P2 Exchange Rejects: 0
In P2 Sa Delete Requests: 0
Out Octets: 20572
Out Packets: 209
Out Drop Packets: 0
Out Notifys: 376
Out P2 Exchanges: 0
Out P2 Exchange Invalids: 0
Out P2 Exchange Rejects: 0
Out P2 Sa Delete Requests: 1
Initiator Tunnels: 0
Initiator Fails: 0
Responder Fails: 1
System Capacity Fails: 0
Auth Fails: 0
Decrypt Fails: 0
Hash Valid Fails: 0
No Sa Fails: 0

Global IPSec over TCP Statistics
——————————–
Embryonic connections: 0
Active connections: 0
Previous connections: 0
Inbound packets: 0
Inbound dropped packets: 0
Outbound packets: 0
Outbound dropped packets: 0
RST packets: 0
Recevied ACK heart-beat packets: 0
Bad headers: 0
Bad trailers: 0
Timer failures: 0
Checksum errors: 0
Internal errors: 0

 

   Commande debug

La commande debug permet de réaliser un diagnostic en cas de panne d’un service mis en œuvre sur l’équipement. Attention à l’utilisation de cette commande, celle-ci peut être très gourmande en ressource pour l’équipement.

  • La commande show crypto debug-condition permet de visualiser l’état d’activation des différents mode de debug du module crypto.

ciscoasa# show crypto debug-condition

Crypto conditional debug is turned OFF
IKE debug context unmatched flag:  OFF
IPSec debug context unmatched flag:  OFF
IKE debug context error flag:  OFF
IPSec debug context error flag:  OFF

  • La commande debug crypto {argument} permet de réaliser un diagnostic au sujet du service IPSec

ciscoasa# debug crypto ?
ca                Set PKI debug levels
condition      Set IPSec/ISAKMP debug filters
engine          Set crypto engine debug levels
ipsec           Set IPSec debug levels
isakmp         Set ISAKMP debug levels
vpnclient       Set EasyVPN client debug levels

 

 

 

One thought on “Cisco – Implémenter un VPN IPSEC en mode Remote access

  1. marc

    bonjour!
    je vous remercie pour ce coup de pouce c’est vraiment cool.
    Mais j’ai un petit problème:
    la commande tunnel-group n’est pas reconnue (invalid output).

    routeur C7200
    ce serait vraiment gentil si qelqu’un pouvait m’aider. merci

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *