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
Voici un schéma équivalent.
Principe de configuration
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
- proposal : définit les paramètres de phase 1.
- sainfo
- 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
- 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
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
-
- Pour le mode agressif.
-
- Mode Principal
- Côtés serveurs
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
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 ;
