easy-rezo
  • Accueil
  • Réseau

Application

Introduction

Avec tous ce que nous avons appris, nous allons tenté de faire une mise en application.

Voici le contexte. Faute d’avoir un équipement spécialisé (UTM, concentrateur etc …) ni d’un pc avec deux cartes réseaux nous allons devoir bluffé un peu. Voici le matériel :

utilisé

  • 2 Mac
  • 2 serveurs Isakmp Racoon (Open source)
  • 2 outils setkey
Nous allons tenté construire un tunnel ipsec du type client (road-warrior) vers un serveurs IPsec. L’authentification sera par clef-prépartagé (PSK). Le but est donner au client au réseau 10.0.1.0/24.
Le test est éffectué dans un même réseau local. Il est également valable sur Internet, il faut simplement configurer sa box en zone DMZ (directement exposé sur Internet).

Voici un schéma équivalent.

Principe de configuration

La configuration de ISAKMP repose sur le daemon racoon. La configuration racoon permettra la configuration des deux phases, de l’authentification ainsi que de la clef prépartagé.
“racoon” créera les SA.
La SAD et la SPD seront gérées par l’outil “setkey”.


Configuration du serveur IPSEC

  • Racoon
#/etc/racoon/racoon.conf
#repertoire des clés RSA 

path pre_shared_key "/private/etc/racoon/psk.txt";

listen {
        isakmp 10.0.1.99[500] ;
        isakmp_natt 10.0.1.99[4500] ;
}

remote anonymous {
        exchange_mode main ;
my_identifier address "10.0.1.99";
        proposal {
                authentication_method pre_shared_key ;
                encryption_algorithm 3des ;
                hash_algorithm md5 ;
                dh_group 2 ;
                lifetime time 3600 sec ;
 }
}

sainfo anonymous {
                pfs_group 1;
                encryption_algorithm 3des ;
                authentication_algorithm hmac_md5 ;
                lifetime time 120 sec ;
                compression_algorithm deflate ;
}

Petite Explication de texte … Etant donné que nous sur le serveur, il faut définir les couples adresses IPs/ports qui seront en écoute. Nous utilisons les ports standards ISAKMP (500 et 4500 pour le NATT).

  • remote
Ici nous allons définir les personnes susceptibles de se connecter avec IPSEC ainsi que le type d’identification.
anonymous : Permit de définir que n’importe qui peut se connecter. Habituellement, nous mettons ici l’adresse IP publique du serveur IPSEC.
exchange_mode main : Utilisation du mode principal (authentification protégé) pour la phase 1.
my_identifier : Identifieur à utiliser pour vérifier l’authentification. Ici on utilisera le type adresse IP. Le secret partagé est stocké dans le fichier psk.txt
  • proposal : définit les paramètres de phase 1.
authentication_method : Méthode d’authentification. Ici, clef-prépartagé
encryptation_algorithm : algorithme de chiffrement
hash_algorithm : Algorithme d’intégrité
dh_group 2 : Groupe diffie-Hellman pour obtenir la clef symétrique de chiffrement de phase 1.
lifetime : Durée de vie de la phase 1 (1 heures).
  • sainfo
Ici encore, nous devoir déclarer les réseaux source et destination de fin de trafic. habituellement, nous mettons les réseaux locaux. Pour plus de faciliter, “anonymous” va nous permettre de déclarer “de tous le monde vers tous le monde”.
pfs 1 : Groupe Perfect Forward Secrecy. Permet d’obtenir la clef de chiffrement de phase 2.
encryptation_algorithm : Algorithme de chiffrement de phase 2
authentication_algorithm : Algorithme de signature digitable (authentication des paquets AH/ESP
Compression_algorithm : Pour la compression.
  • psk.txt
10.0.1.99 ceciestuntest1

Ici rien à dire sur la syntaxe.
<identifieur> <psk>

  • ipsec-tools.conf (fichier de configuration de setkey)
#!/usr/sbin/setkey -f
#ipsec-tools.conf
# Script pour les configs IPsec
## flush
flush ;
spdflush ;
# Création des politiques
spdadd 0.0.0.0/0 0.0.0.0/0 any -P in ipsec
      esp/transport//require ;

Ici nous configurons la SPD … Si rappelez-vous, c’est notre filtre de paquet. Nous devons donc dire au serveur qu’il faut accepter le trafic entrant “in” de n’importe qui “0.0.0.0/0 0.0.0.0/0 any” (nous ne pouvons pas prévoir la configuration réseau du client nomade) avec comme protocole “esp” en mode “transport“.

  • Exécution du serveur racoon
setkey -f ./ipsec-tools.conf
racoon -vvv -d -F -f ./racoon.conf
Configuration du client IPSEC
Avec notre serveur lancé, il ne nous reste plus qu’a paramètre notre client.
  • Racoon

#/etc/racoon/racoon.conf
#repertoire des clés RSA 

path pre_shared_key "/private/etc/racoon/psk.txt";

remote 10.0.1.99 {
        exchange_mode main ;
        my_identifier address "10.0.1.200";

        proposal {
                authentication_method pre_shared_key ;
                encryption_algorithm 3des ;
                hash_algorithm md5 ;
                dh_group 2 ;
                lifetime time 3600 sec ;
        }
}

sainfo anonymous {
                pfs_group 1;
                encryption_algorithm 3des ;
                authentication_algorithm hmac_md5 ;
                lifetime time 120 sec ;
                compression_algorithm deflate ;
}

Ici la configuration est pratiquement identique au serveur à la différence de deux points :

Remote 10.0.1.99 : Cela correspond à l’adresse IP publique (routable sur Internet) du serveur IPSEC.
my_identifier adress “10.0.1.200 : Qui correspond à l’identifieur de la clef partagé du client.

  • psk.txt

10.0.1.200 ceciestuntest1
  • ipsec-tools.conf
#/usr/sbin/setkey -f
# Script pour les configs IPsec
## flush
flush ;
spdflush ;
# Création des politiques
# Il faut utiliser le tunnel qui va de 5.6.7.8 vers 1.2.3.4
 spdadd 0.0.0.0/0 10.0.1.0/0[0] any -P out ipsec
         esp/transport//require ;

a Pour la configuration de notre “filtre”, nous allons tous le trafic vers le réseau 10.0.1.0/24 et pour n’importe quel protocole, il faudra l’envoyer le module de chiffrement (Action de référence à une SA).

  • Lancement de la connexion ipsec du client
setkey -f ./ipsec-tools.conf
racoon -vvv -d -F -f ./racoon.conf
Comme IPsec fonctionne le principe de connexion à la demande, il faut générer du trafic “intéressant” pour que la SPD crée demande une création de SA à racoon.
Nous allons faire un :
ping 10.0.1.99

 

Fichier de configuration pour le mode agressif.

  • Configuration du serveur
#/etc/racoon/racoon.conf
#repertoire des clés RSA 

path pre_shared_key "/private/etc/racoon/psk.txt";

listen {
        isakmp 10.0.1.99[500] ;
        isakmp_natt 10.0.1.99[4500] ;
}

remote anonymous {
        exchange_mode aggressive;
my_identifier address "10.0.1.99";
        proposal {
                authentication_method pre_shared_key ;
                encryption_algorithm 3des ;
                hash_algorithm md5 ;
                dh_group 2 ;
                lifetime time 3600 sec ;
 }
}

sainfo anonymous {
                pfs_group 1;
                encryption_algorithm 3des ;
                authentication_algorithm hmac_md5 ;
                lifetime time 120 sec ;
                compression_algorithm deflate ;
}
  • Configuration du client
#/etc/racoon/racoon.conf
#repertoire des clés RSA 

path pre_shared_key "/private/etc/racoon/psk.txt";

remote 10.0.1.99 {
        exchange_mode aggressive ;
        my_identifier address "10.0.1.200";

        proposal {
                authentication_method pre_shared_key ;
                encryption_algorithm 3des ;
                hash_algorithm md5 ;
                dh_group 2 ;
                lifetime time 3600 sec ;
        }
}

sainfo anonymous {
                pfs_group 1;
                encryption_algorithm 3des ;
                authentication_algorithm hmac_md5 ;
                lifetime time 120 sec ;
                compression_algorithm deflate ;
}

Interprétation des résultats

Ouraaaahh ça fonctionne … enfin je vous le souhaite.

Configurer c’est bien beau, mais ça n’explique pas tout. Nous allons tenté de recouper les traces avec ce que nous avons appris.

Dans un premier temps, nous allons étudier notre phase 1 avec des traces réseaux relevées avec Wireshark (tcpdump sous Mac et Linux).

Nous allons voir la différence entre le mode principal et agressif, la SAD ainsi que la SPD.

Je vous épargnerais quand même la sortie de racoon qui peut-être très bavard (surtout avec la commande que nous avons exécuté).

 

 

  • Traces réseaux
Avant toute choses, vous trouverez les traces à l’adresse suivante (http://easy-rezo.com/traceIpsec). Ces traces sont au format pcap et son lisibles avec tcpdump, tshark, Ethereal et Wireshark.
  •  
    • Pour le mode agressif. 
Les images ci-dessous présente les négociation de phase 1. Ici seul la phase est intéressante puisqu’elle passe en “claire”. 
Voici comme prévu, nous avons nos 3 échanges (trois premières lignes client (200)-> serveur (199).
Allons voir dans le détail chaque trame
Trame 1 (client -> serveur)
Security Association Payload. le Proposal est la proposition des politiques de sécurités de phase 1 (voir la seconde image).
Key Exchange pour Diffie Hellmann
Identification Payload qui définit le type d’identité (ATTENTION : dans cet exemple c’est l’adresse mail et pas l’adresse IP)
La proposition (3DES, MD5, authentification par PSK et le groupe diffie-Hellman)
Trame 2 (serveur -> client)
Comme prévu nous avons :
Security Association Payload. le Proposal est la proposition des politiques de sécurités de phase 1 (voir la seconde image).
Key Exchange pour Diffie Hellmann
Identification Payload qui définit le type d’identité ainsi que le hash payload qui correspond à la signature digitale (signé avec la PSK)
Trame 3 (client serveur). 
Cette trame à pour seul intérêt de finir l’authentification (Hash Payload)
  •  
    • Mode Principal
Ici, rien de surprenant, nous avons nos 6 échanges pour la phase 1 comme le montre l’image suivante
Les deux premières trames sont pour l’échanges des politiques de sécurités
La troisième et la quatrième sont l’échange des clefs
La cinquième et la sixième pour l’authentification. On remarquera que contrairement au mode agressif, cette dernière est chiffrée (Encrypted Payload).
  • Côtés serveurs
La commande setkey permet d’afficher les différentes.
Atant ce répéter mais une connexion IPSEC se traduit par deux tunnels (SA de phase 2) pour le trafic ALLER et RETOUR ce qui explique le résultat suivant.
Voici le résultat côté serveur
setkey -D
10.0.1.99 10.0.1.200
esp mode=transport spi=148970807(0x08e11d37) reqid=0(0x00000000)
E: 3des-cbc  8ff45e66 fffedfb9 f659ed4a 62d65f35 91c1f0e7 d9ec94cd
A: hmac-md5  129fefdd d18b65bb c1183ea1 547ab7e5
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Nov 16 18:42:19 2008	current: Nov 16 18:42:28 2008
diff: 9(s)	hard: 120(s)	soft: 96(s)
last:                     	hard: 0(s)	soft: 0(s)
current: 0(bytes)	hard: 0(bytes)	soft: 0(bytes)
allocated: 0	hard: 0	soft: 0
sadb_seq=1 pid=510 refcnt=2
10.0.1.200 10.0.1.99
esp mode=transport spi=63804857(0x03cd95b9) reqid=0(0x00000000)
E: 3des-cbc  ea842273 452b130e b51a5575 a1e434b0 3bf0ddd1 910e2a16
A: hmac-md5  09372c38 7a80d4f9 68b6d8e3 92de316b
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Nov 16 18:42:19 2008	current: Nov 16 18:42:28 2008
diff: 9(s)	hard: 120(s)	soft: 96(s)
last:                     	hard: 0(s)	soft: 0(s)
current: 0(bytes)	hard: 0(bytes)	soft: 0(bytes)
allocated: 0	hard: 0	soft: 0
sadb_seq=0 pid=510 refcnt=2

 -SPI : ALLER (148970807) / RETOUR (63804857)
-Protocole IPSEC : ESPD mode transport
-Algorithme de chiffrement ESP : 3DES (ainsi que la clef)
-Algorithme d’authentification d’ESP : HMAC-MD5 (ainsi que la clef)
-Adresse IP source et destination en mode Tunnel : ALLER ( source : .99 / destination : .200) Retour ( source : .200 / destination : .99)

  • Côtés clients

 

sudo setkey -D
10.0.1.200 10.0.1.99
	esp mode=transport spi=63804857(0x03cd95b9) reqid=0(0x00000000)
	E: 3des-cbc  ea842273 452b130e b51a5575 a1e434b0 3bf0ddd1 910e2a16
	A: hmac-md5  09372c38 7a80d4f9 68b6d8e3 92de316b
	seq=0x00001342 replay=4 flags=0x00000000 state=mature
	created: Nov 16 18:42:19 2008	current: Nov 16 18:42:50 2008
	diff: 31(s)	hard: 120(s)	soft: 96(s)
	last: Nov 16 18:42:42 2008	hard: 0(s)	soft: 0(s)
	current: 20587680(bytes)	hard: 0(bytes)	soft: 0(bytes)
	allocated: 4930	hard: 0	soft: 0
	sadb_seq=1 pid=2966 refcnt=2
10.0.1.99 10.0.1.200
	esp mode=transport spi=148970807(0x08e11d37) reqid=0(0x00000000)
	E: 3des-cbc  8ff45e66 fffedfb9 f659ed4a 62d65f35 91c1f0e7 d9ec94cd
	A: hmac-md5  129fefdd d18b65bb c1183ea1 547ab7e5
	seq=0x00000000 replay=4 flags=0x00000000 state=mature
	created: Nov 16 18:42:19 2008	current: Nov 16 18:42:50 2008
	diff: 31(s)	hard: 120(s)	soft: 96(s)
	last:                     	hard: 0(s)	soft: 0(s)
	current: 0(bytes)	hard: 0(bytes)	soft: 0(bytes)
	allocated: 0	hard: 0	soft: 0
	sadb_seq=0 pid=2966 refcnt=2
 

-SPI : ALLER (63804857) / RETOUR (148970807)

-Protocole IPSEC : ESPD mode transport
-Algorithme de chiffrement ESP : 3DES (ainsi que la clef)
-Algorithme d’authentification d’ESP : HMAC-MD5 (ainsi que la clef)
-Adresse IP source et destination en mode Tunnel : ALLER ( source : .200 / destination : .99) Retour ( source : .99 / destination : .200)

 

 

  • Remarque
Concernant les SA clients et serveurs, on constate que les SPI sont symétriques, ce qui est est logique.
Pour rappel le SPI est un index qui permet à l’équipement de savoir à quel SA appartient le paquet IPSEC.
Si le client envoi une donnée, elle aura comme SPI (63804857), le serveur verra cet index et le dans sa SA “retour”. 
Rien de plus logique.

 

Problèmes rencontrés

Mode main :

Typiquement, le mode principal peut poser certaines problèmes. Le plus récurrent, c’est le type d’identité. Dans notre exemple, nous nous sommes permis d’utiliser ce mode mais en réalité, il n’est pas envisageable de l’utiliser en mode client-serveur.

Pourquoi ? tout simplement car il nécessite d’utiliser l’adresse IP comme identité. L’adresse IP correspond à l’adresse réel du client.

Dans un contexte client-serveur, il n’est pas possible de prédire l’adresse IP du client. Il faut donc utiliser d’autres identités comme l’adresse e-mail.

Plus de connexion Internet.

Après avoir lancé la commande setkey, vous constatez que vous n’avez de connexion Internet. Don’t panic … Comme je vous l’avais expliqué avant, setkey manipule la SPD qui est un filtrage par paquet.

Nous définissons par exemples d’accepter uniquement les paquets IPSEC (pour le serveur) ou d’envoyer tous le trafic dans le module de chiffrement (pour le client). Cela à pour consséquence d’obliger l’utilisation d’IPSEC (et donc de ne plus avoir internet).

Les seuls paquets non chiffrés envoyés seront ISAKMP.

Pour remédier à cela , il faut “simplement” utiliser un script de rollback “./remove.conf” pour supprimer les SPD.

#/usr/sbin/setkey -f ./remove.conf
## flush
flush ;
spdflush ;
  • Pages

    • Réseau
      • Introduction à IPsec
        • Protocole
        • Négociation
        • Application
      • Introduction à SSL/TLS et HTTPS
        • Fonctionnalité de HTTPS
        • Mécanisme de SSL
        • Chiffrement
        • Certificat
        • Condensé (hache)
        • Application
      • Introduction au WI-FI
        • Mode de fonctionnement
        • Mode Infrastructure
        • Couche Liaison de données
        • Recettage de wifi pré N selon Apple
  • Blogoliste

    • http://thomasgallinari.e3b.org
Copyright © 2010 easy-rezo All Rights Reserved
RSS XHTML CSS Connexion
Wp Theme by n Graphic Design
Powered by Wordpress