Sie sind auf Seite 1von 8

BE 3 : Mise en place de tunnels securises avec IPSec

1 Organisation du BE
Le BE sera effectu en groupes composes de 2 ou 3 machines. Le BE est constitue de 2 manips. La premire se ralise avec 3 machines, la seconde en collaboration entre 2 groupes de 2 machines.

Configuration de la salle au dbut du BE


Pour la premire partie de la manip, aucune configuration particulire n'est requise. Chaque machine possde simplement une carte Ethernet. Pour la seconde partie, quatre machines possderont 2 cartes Ethernet et feront office de routeurs d'entreprise. Ces machines possderont une version particulire du systme opratoire incluant le support d'IPsec. Les autres machines seront des machines quelconques a l'intrieur de chacun des rseaux d'entreprise. Pour les 2 manips, l'Internet sera simul par une connexion au Switch de la salle de TP

3 Description des manipulations


3.1 Utilisation basique d'IPSes
Sur les serveurs Linux, on souhaite parfois disposer d'changes scuriss sans devoir se soucier des protocoles mis en uvre. On peut souvent utiliser des sur-couches telles que smtps ou smtptls, ftp-tls, scp, rsync over ssh, ... mais cela peut s'avrer compliqu. Lorsque l'on souhaite surtout scuriser les transferts entre 2 ou 3 stations Linux, on peut aujourd'hui utiliser trs facilement IPSec. Cette norme, qui dfinit des extensions au protocole IP qui se charge du transfert d'informations entre 2 machines, permet d'authentifier les machines, et de chiffrer tout contenu chang entre ces dernires. IPSec est cependant une norme trs complexe : la RFC 2401 (version franaise disponible http://abcdrfc.free.fr/rfc-vf/rfc2401.html) prsente les diffrents protocoles mis en jeux : AH pour l'authentification, ESP pour le chiffrement des contenus, mais aussi IKE pour l'change de cl. Notre but tant de faire simple, nous n'allons pas utiliser IKE ici. Il vous suffira en effet d'changer manuellement les cls entre les 2 ou 3 machines, et ce de manire statique, quitte renouveler ces dernires rgulirement ... On utilisera pour cela le package debian ipsec-tools, qui contient tout le ncessaire. On configure le package ipsec-tools en crant un fichier /etc/ipsec-tools.conf comme suit : Cet exemple configure AH et ESP entre 192.168.0.10 et 192.168.0.6. Avant la configuration de /etc/ipsec-tools.conf, il faut bien videmment gnrer vos propres cls, savoir les zones commenant pas 0x dans /etc/ipsec-tools.conf. Dans notre exemple, les 2 premires cls utiliser pour AH tant des cls de 128 bits, il faut y mettre 32 octets hexadcimaux ; et 48 pour les cls 3des-cbc.

Le plus simple pour obtenir ces cls alatoirement est de se baser sur le priphrique /dev/urandom de votre machine, en procdant ainsi : # Affiche 32 caractres hexadcimaux alatoires : hexdump -e '8/2 "%04x" ' /dev/urandom -n 16; echo # Affiche 48 caractres hexadcimaux alatoires : hexdump -e '8/2 "%04x" ' /dev/urandom -n 24; echo Une fois vos cls AH et ESP sont gnres pour chaque paire de machines (ip source / ip destination), nous pouvons passer la configuration de /etc/ipsec-tools.conf. Dans notre exemple, commenons par la configuration de ce fichier sur 192.168.0.6. #!/usr/sbin/setkey -f # netoyage des SA et de la SPD flush; spdflush; # AH SAs cle de 128 bits : add 192.168.0.6 192.168.0.10 0xc0291ff014dccdd03874d9e8e4cdf3e6; add 192.168.0.10 192.168.0.6 0x96358c90783bbfa3d7b196ceabe0536b;

ah

0x200

-A

hmac-md5

ah

0x300

-A

hmac-md5

# ESP SAs cle de 192 bits (168 + 24 de parite) : add 192.168.0.6 192.168.0.10 esp 0x201 0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831; add 192.168.0.10 192.168.0.6 esp 0x301 0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df; # Normes de securite imposees : spdadd 192.168.0.6 192.168.0.10 any esp/transport//require ah/transport//require; spdadd 192.168.0.10 192.168.0.6 any esp/transport//require ah/transport//require;

-E

3des-cbc

-E

3des-cbc

-P

out

ipsec

-P

in

ipsec

Puis celle sur 192.168.0.10 (on recopie gnralement le fichier ipsec-tools.conf via scp d'une machine l'autre) :

#!/usr/sbin/setkey -f flush; spdflush;


# Si on ne souhaite utiliser IKE, on ne configure aucune SA (on omet donc la partie suivante)

# AH SAs cle de 128 bits : add 192.168.0.6 192.168.0.10 ah 0x200 -A 0xc0291ff014dccdd03874d9e8e4cdf3e6; add 192.168.0.10 192.168.0.6 ah 0x300 -A 0x96358c90783bbfa3d7b196ceabe0536b; # ESP SAs cle de 192 bits (168 + 24 de parite) : add 192.168.0.6 192.168.0.10 esp 0x201 -E 0x7aeaca3f87d060a12f4a4487d5a5c3355920fae69a96c831; add 192.168.0.10 192.168.0.6 esp 0x301 -E 0xf6ddb555acfd9d77b03ea3843f2653255afe8eb5573965df; # # Cration des politiques (simplistes) : spdadd 192.168.0.6 192.168.0.10 any esp/transport//require ah/transport//require; spdadd 192.168.0.10 192.168.0.6 any esp/transport//require ah/transport//require;

hmac-md5 hmac-md5

3des-cbc 3des-cbc

-P -P

in out

ipsec ipsec

Notez la seule diffrence entre ces fichiers : l'ordre IN / OUT dans les 2 lignes SPDADD ... Rappelons que : setkey : cette commande sert paramtrer les SA et les SP dans le noyau Linux. On peut l'utiliser en "ligne de commande" ou lui passer un fichier de configuration en argument. racoon : c'est le dmon IKE qui tablira les SA la demande. Lancez l'utilisation d' IPSec en invoquant setkey /etc/init.d/setkey start Ensuite, vous pourrez vrifier que le dialogue entre 2 machines utilisant IPSec est bien chiffr / authentifi grce tcpdump ou en utilisant wiresharke: avec Tcpdump # tcpdump -n "host 192.168.0.6"
01:23:27.996891 IP 192.168.0.10 > 192.168.0.6: AH(spi=0x00000302,seq=0x1): ESP(spi=0x00000303,seq=0x1), length 88 01:23:27.998282 IP 192.168.0.6 > 192.168.0.10: AH(spi=0x00000202,seq=0x277ac2): ESP(spi=0x00000203,seq=0x277ac2), length 88 15653 packets received by filter 0 packets dropped by kernel

3.2 Utilisation avance d'IPsec en mode tunnel


Le principe de cette manipulation est de crer des rseaux prives virtuels (VPN) avec chiffrement des donnes sur ce rseau virtuel. Dans ce cadre, chaque entreprise est constitue de 2 machines, une jouant le rle de routeur et l'autre simulant une machine du rseau interne. Le routeur est la seule machine de l'entreprise a avoir une adresse routable. Il va s'agir ici de faire communiquer les 2 machines non-routeurs des entreprises de faon a ce qu'elles changent des donnes de faon scurise. Nous allons pour cela mettre en place un tunnel IPsec entre les diffrents routeurs. L'outil que nous allons utiliser ici est racoon, implmentation gratuite d'IPsec sous Linux. Ainsi que vous le prsente la figure ci-dessous, le chiffrement des donnes sera effectu dans le tunnel uniquement. Il ne l'est pas a l'intrieur de l'entreprise. racoon (on peut galement utiliser Freeswan) est installs sur le routeur de chaque entreprise. Chaque routeur dispose donc d'une paire de cls prive/publique (qui se trouvent dans certaines distributions dans le fichier /etc/ipsec.secrets) et d'un certificat numrique. Pour pouvoir vrifier la validit des certificats, il est ncessaire que chaque routeur connaisse le certificat de l'autorit de certification (voir de la chaine de certification).

3.2.1. Mise en place et configuration avec Racoon Installation du rseau A. Mettez en place la configuration IP de chaque rseau d'entreprise B. Vrifiez que chaque routeur de l'entreprise peut se connecter aux autres routeurs d'entreprise mais que les machines internes ne peuvent pas dialoguer. Gnration des certificats Les cls et certificats numriques des diffrentes parties (autorits de certification et les 2 routeurs) vont tre sur un des 2 routeurs dans le cadre de ce TP. Ils seront gnrs dans le rpertoire /etc/racoon/certs. Sur le routeur que nous appellerons routeur 1, effectuer les commandes: 1. Crz le rpertoire etc/racoon/certs s'il n'xiste pas 2. gnrez le certificat de l'AC l'aide de la commande /usr/lib/ssl/CA.pl -newca (qui gnre notamment le fichier demoCA/cacert.pem). Il se peut que CA.pl se trouve

dans /usr/lib/ssl/misc/CA.pl 3. gnrez le certificat du routeur 1 l'aide des commandes : 1. gnration d'une requte de certification : /usr/lib/ssl/CA.pl -newreq (qui gnre notamment le fichier newreq.pem (certificat temporaire non sencore sign) et et la cl prive chiffre dans newkey.pem) puis 2. signature du certificat temporaire (cr dans l'tape prcdente) avec la cl prive de l'autorit racine (CA) et gnration du certificat du routeur : /usr/lib/ssl/CA.pl -sign. 3. Le certificat gnr s'appelle newcert.pem. Renommez le par ex. en certRzo1.pem 4. Vous devez galement gnrer un fichier de cl prive en clair. Pour cela, excutez la commande openssl rsa -in newkey.pem -out keyRzo1.pem. Le fichier contenant la cl est donc keyRzo1.pem. 5. Dans le rpertoire certs, recopiez demoCA/cacert.pem et renomez le CAfile.pem. Excutez ensuite la commande ln -s CAfile.pem `openssl x509 -noout -hash < CAfile.pem`.0 A quoi sert cette commande ? Vrifier que vous avez les droits ncessaires (# chmod go-rwx host.key). Dans notre cas, # chmod go-rwx keyRzO1.pem. Maintenant sur le routeur 2 : 6. gnrez le certificat du routeur 2 l'aide des la mme manip et nommez le certRzo2.pem. De mme gnrez la cl prive dans le fichier keyRzO2.pem. 7. Dans le rpertoire certs, recopiez demoCA/cacert.pem et renomez le CAfile.pem. Excutez ensuite la commande ln -s CAfile.pem `openssl x509 -noout -hash < CAfile.pem`.0 A quoi sert cette commande ? Vrifier que vous avez les droits ncessaires (# chmod go-rwx host.key). Dans notre cas, # chmod go-rwx keyRzO2.pem. 8. Sur le routeur 1 dans /etc/racoon/certs, vous devez donc avoir certRezo1.pem, keyRezo1.pem, CAfile.pem, ainsi que le lien symbolique gnr par la commande cidessus. De mme, sur le routeur 2, vous devez donc avoir certRezo2.pem, keyRezo2.pem, CAfile.pem, ET LE lien. Il vous faut donc recopier depuis le routeur 1 sur le routeur 2, les 3 premiers fichiers et gnrer le lien directement sur le routeur 2. Prparation du tunnel Il est tout d'abord ncessaire de dcrire tous les lments ncessaires l'tablissement du tunnel Ipsec. Pour cela, il vous fat complter les fichiers de configurations. Ceux-ci diffrent d'une distribution une autre. Dans ce BE, on va vous donner deux exemples. Distribution 1 : fichiers config : /etc/racoon/racooncert.conf et /etc/racoon/tunnel.conf. /etc/racoon/racooncert.conf identifie l'extrmit oppose du tunnel (@IP) et prcise les mthodes d'authentification choisies ainsi que les emplacements des cls et certificats locaux. Il dcrit galement quels sont les rseaux (@IP) qui seront relis par le tunnel et quels sont les mcanismes de chiffrement ventuellement mis en palce pour ce rseaux. Le fichier /etc/racoon/tunnel.conf dcrit quant lui la politique de scurit mise en place pour ce tunnel. Il prcise pour chaque sens de communication si le mode ESP ou AH doit tre utilis. 1. Compltez le fichier racooncert.conf en ce qui concerne les @IP et les cls 2. Compltez tunnel.conf en ce qui concerne les @IP des 2 rseaux pour lesquels on

dsire raliser un tunnel. Mise en place du tennuel Ipsec 1. Chargez manuellement les modules ah4, esp4 et ipcom, ncessaire au bon fonctionnement des mcanismes crypto de IPsec. 2. Chargez le fichier de configuration du tunnel avec la commande setkey -f /etc/racoon/tunnel.conf 3. Lancez ensuite le dmon racoon avec la commande racoon -F -d /etc/racoon/racooncert.conf 4. Vrifiez l'tablissement du tunnel en essayant de faire communiquer les 2 rsaeaux d'entreprises. Vrifiez notamment que les donnes sont bien chiffres dans le tunnel. Distribution 2 : fichiers config : /etc/racoon/certs/ et /etc/racoon/racoon-tool.conf . Mettre les cls et certificats dans /etc/racoon/certs/

Dans cet exemple de configuration de racoon-tool.conf j'ai une configuration d'IPsec entre : - un hte nomm "host.example.org" avec une adresse IP 333.333.333.333 et "guest.example.org" ayant comme @IP 444.444.444.444.

Le fichier contient quelques valeurs par dfaut son dbut ainsi que plusieurs exemples comments. Laissez ces paramtres et ajouter les lignes suivantes la fin.
peer(%default): certificate_type: x509 host.crt host.key my_identifier: fqdn host.example.org verify_identifier: on authentication_method[0]: rsasig connection(%default): src_ip: 333.333.333.333 # Guest peer(444.444.444.444): peers_identifier: fqdn guest.example.org connection(guest): dst_ip: 444.444.444.444 admin_status: enabled #

Avec cette configuration, on n'accepte pas les paquets non IPSec provenant de guest.example.org, et on n'envoie que des paquets IPSec ce hte. Vous rptez cette dernire section (dlimite par #) pour tous les htes avec qui vous souhaitez communiquer de manire scurise.
Le lancement de racoon peut se faire avec la commande: /etc/init.d/racoon start

Pre-Shared Keys Supprimer "authentication_method[0]", "certificate_type", et "my_identifier" pour utiliser les valeurs par dfaut qui utilisent PSKs. Changer "peers_identifier" mettre dans "address" (et seulement la chaine "address" ) aux sections de chaque hte. Editer /etc/racoon/psk.txt pour contenir les cls de chaque hte (qui doit tre diffrent pour des raisons de scurit). Le format ressemble au fichier /etc/hosts, mais la seconde colonne est la cls et non pas le nom du hte. Les cls peuvent tre n'importe quel format; les cls hexadcimales, commencent bien videment par "0x".

Faite attention, il y a une limite d'environ 1022 caractres par ligne.


Le fichier de secret pr-partag /etc/ipsec/psk.txt se prsente ainsi : # fichier contenant le secret. # le format est le suivant : # identit de la partie distante | secret pr-partag MonAdressIP mon_secret

3.2.1. Avec Freeswan


Pour ffecuter une connexion en mode tunnel avec Freeswan, il faut configurer ce tunnel dans le fichier /etc/ipsec.conf. La configuration consiste a indiquer les deux cles publiques des 2 extremites du tunnel, ainsi que les adresses IP concernees. Voici un exemple d'une description de tunnel : conn montunnel type=tunnel authby=rsasig left=... leftsubnet=.... leftrsasigkey=0s... leftnexthop=... right=... rightsubnet=.... rightrsasigkey=0s... rightnexthop=... Cette description doit bien sur tre presente sur les 2 machines formant les extremites du tunnel !!. Par ailleurs, la cle publique RSA d'une machine peut tre obtenue grce la commande : ipsec showhostkey. Le chargement d'un module dans le noyau ainsi que le dmarrage d'un certain nombre de processus est necessaire au bon fonctionnement d'IPsec. Le script /etc/init.d/ipsec vous permet de raliser ces oprations. Vous pouvez le lancer avec les options start ou stop ainsi : /etc/init.d/ipsec start. Pour ensuite mettre en place vritablement ce tunnel, il faut utiliser de chaque ct du tunnel les commandes suivantes : ipsec auto --add <nom du tunnel> ipsec auto --up <nom du tunnel> Le fichier /var/log/auth.log enregistre alors des informations vous permettant de suivre en direct la negociation de connexion. On peut de la mme facon arrter un tunnel ainsi : ipsec auto --down <nom du tunnel> ipsec auto --delete <nom du tunnel> Nous allons a present mettre d'abord en place la configuration IP de nos entreprises. 1. Mettez en place la configuration IP de chaque reseau d'entreprise a l'aide des informations que vous fournira l'enseignant. 2. Verifiez que chaque routeur de l'entreprise peut se connecter aux autres routeurs d'entreprise mais que les machines internes ne peuvent dialoguer. Nous allons maintenant proceder a la mise en place du tunnel IPsec. 1. Compltez votre fichier /etc/ipsec.conf avec les informations necessaires pour etablir un tunnel avec une autre entreprise (si vous voulez etablir un tunnel avec les 2 autres entreprises, il faut donc creer 2 configurations). 2. Utilisez les commandes ipsec donnes ci-dessus pour mettre en place au moins un tunnel. Verifiez que tout se passe bien en observant les informations de log. 3. changez a prsent des informations entre les machines internes des entreprises. Verifiez que le passage sur Internet des informations s'effectue de faon scurise grce au tunnel. 4. Question : Une des machines de la salle de TP est configure comme tant une machine banale de l'Internet. Sans dsactiver les tunnels IPsec, comment faire pour que les machines a l'intrieur des entreprises (machines

ayant des adresses non routables donc) puissent se connecter a cette machine quelconque de l'Internet?