[wiki:Projet/Entreprise2 Entreprise2] : [wiki:Projet/ListeTutoriaux ListeTutoriaux] : [wiki:Projet/IpsecImplementation IpsecImplementation] ---- = '''''Configuration d'un flux IPSec en mode Transport sous FreeBSD''''' = == Configuration d'IPSec == Cet exemple a été écrit pour la création d'un flux IPSec en mode Transport entre [wiki:Projet/Entreprise2/Client1 CLIENT1.ENT2](10.40.0.13) et [wiki:Projet/Entreprise2/Serveur1 SERVEUR1.ENT2] (10.40.0.9). [[BR]] === Vérifiez les options === Les options {{{ options IPSEC options IPSEC_ESP options IPSEC_DEBUG (optionnel mais fortement recommandé) }}} doivent être installées sur le noyau que vous exécutez, sinon [http://www.freebsdebutant.org/index.php?page=configuration_noyau recompilez votre noyau]. * Installez IPSec-tools et Racoon ( votre bonheur se trouve dans les /usr/ports/security) === Configurez IPSec pour FreeBSD === [[BR]] * Créer le fichier /etc/ipsec.conf : {{{ $ cat > /etc/ipsec.conf << EOF # Definition des SA + Cles # Rappel : # 3des-cbc,cle de 192 bits (24o) # hmac-md5,cle de 128 bits(16o) flush; ## de client1 vers serveur1 add 10.40.0.13 10.40.0.9 ah 1000 -m transport -A hmac-md5 "1234567890123456"; add 10.40.0.13 10.40.0.9 esp 1001 -m transport -E 3des-cbc "123456789012345678901234"; ## de serveur1 vers client1 add 10.40.0.9 10.40.0.13 ah 2000 -m transport -A hmac-md5 "1234567890123456"; add 10.40.0.9 10.40.0.13 esp 2001 -m transport -E 3des-cbc "123456789012345678901234"; # Definition des SPD spdflush; spdadd 10.40.0.13 10.40.0.9 any -P out ipsec esp/transport/10.40.0.13-10.40.0.9/use ah/transport/10.40.0.13-10.40.0.9/use; # politique en entree spdadd 10.40.0.9 10.40.0.13 any -P in ipsec ah/transport/10.40.0.9-10.40.0.13/use esp/transport/10.40.0.9-10.40.0.13/use; EOF }}} * Puis entrez {{{ $ setkey -v -f /etc/ipsec.conf }}} * Maintenant, si vous entrez {{{ $ setkey -D -P }}} la création des SA et SP devraient vous produire un affichage à peu près similaire à {{{ [root@SERVEUR1 ~]# setkey -P -D 10.40.0.13[any] 10.40.0.9[any] any in ipsec ah/transport/10.40.0.13-10.40.0.9/use esp/transport/10.40.0.13-10.40.0.9/use created: Apr 20 18:10:44 2007 lastused: Apr 20 18:10:44 2007 lifetime: 0(s) validtime: 0(s) spid=16393 seq=1 pid=7761 refcnt=1 10.40.0.9[any] 10.40.0.13[any] any out ipsec ah/transport/10.40.0.9-10.40.0.13/use esp/transport/10.40.0.9-10.40.0.13/use created: Apr 20 18:10:44 2007 lastused: Apr 20 18:10:44 2007 lifetime: 0(s) validtime: 0(s) spid=16392 seq=0 pid=7761 refcnt=1 }}} * Pour automatiser cette procédure au démarrage de la machine, éditez dans /etc/rc.conf en ajoutant : {{{ ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" }}} * '''Votre démon IPSec sera actif avec les bons paramètres dès le prochain démarrage''' [[BR]] === Configurer Racoon === [[BR]] * Créer psk.txt initiant l'échange de clé partagé {{{ $ cat > psk.txt << EOF 10.40.0.9 mot_de_passe_t3$T EOF }}} L'adresse IP est celle de la cible (ici Serveur1), suivi du mot de passe. * Créer racoon.conf. Vous pouvez vous inspirer de l'exemple fourni par défaut avec Racoon, ou bien utiliser (en le modifiant) celui-ci: {{{ $ cat > racoon.conf << EOF # $File: /home/chris/PRes/Postes_Rackables/ipsec_client1/racoon.conf $ # $MD5: 2922df40b60a8f1eb7116f90a485f84a $ # $By Christophe Alladoum $ # $Last-Modified: Fri Apr 20 18:28:11 2007$ # # Configuration de RACOON cote client # path include "/chemin/absolu/vers/ce/repertoire" ; path pre_shared_key "/chemin/absolu/vers/psk.txt" ; # path pre_shared_key "/root/ipsec_client1/psk.txt" ; # path certificate "/usr/local/etc/cert" ; # "log" indique le niveau de debug # choix : notify, debug, debug2 # log debug; padding { maximum_length 20; # maximum padding length. randomize off; # enable randomize length. strict_check off; # enable strict check. exclusive_tail off; # extract last one octet. } # Interfaces a ecouter (IPv4 et/ou v6) # Si aucune, ecoute sur toutes les interfaces de la machine listen { # pour le client IPv4 isakmp 10.40.0.13 [500]; # pour le client IPv6 # isakmp ::1 [7000]; } # Temporisateurs d echange de cle timer { counter 5; # maximum trying count to send. interval 20 sec; # maximum interval to resend. persend 1; # the number of packets per a send. # Temps max. pour chaque phase phase1 2 min; phase2 4 min; } # Cas du client1 remote 10.40.0.9 { exchange_mode aggressive,main; doi ipsec_doi; situation identity_only; nonce_size 16; lifetime time 60 min; # sec,min,hour initial_contact on; support_proxy on; proposal_check obey; # obey, strict or claim proposal { encryption_algorithm blowfish; hash_algorithm sha1; authentication_method pre_shared_key ; dh_group 5 ; } } # Cas du client1 sainfo anonymous { pfs_group 5; lifetime time 48 hour; encryption_algorithm 3des, cast128, blowfish 448, des; authentication_algorithm hmac_md5, hmac_sha1; compression_algorithm deflate ; } EOF }}} * A présent, lancez: {{{ $ /usr/local/sbin/racoon -l /var/log/racoon.log -f /chemin/vers/racoon.conf }}} Un fichier de log (utile pour le debug) sera crée à l'adresse /var/log/racoon.log * ''' Votre Racoon est lancé !! ''' === Vérifier le fonctionnement === Via le monitoring, vous devriez observer des échanges similaires aux suivants. {{{ Capturing on dc3 [...] Echange de cle avec ISAKMP 904.714799 10.40.0.9 -> 10.40.0.13 ISAKMP Aggressive 904.715327 10.40.0.9 -> 10.40.0.13 ISAKMP Aggressive 904.715883 10.40.0.9 -> 10.40.0.13 ISAKMP Aggressive [...] Communication Securisee via IPSec/ESP 1 0.000000 10.40.0.9 10.40.0.13 ESP ESP (SPI=0x000007d1) 2 0.000588 10.40.0.9 10.40.0.13 ESP ESP (SPI=0x000007d1) 3 0.000711 10.40.0.13 10.40.0.9 TCP 61738 > 10987 [ACK] Seq=0 Ack=0 Win=17879 Len=1424 TSV=2005181 TSER=751670683 4 0.001238 10.40.0.13 10.40.0.9 TCP [TCP Out-Of-Order] 61738 > 10987 [ACK] Seq=0 Ack=0 Win=17879 Len=1424 TSV=2005181 TSER=751670683 5 0.001792 10.40.0.13 10.40.0.9 TCP [TCP Out-Of-Order] 61738 > 10987 [ACK] Seq=0 Ack=0 Win=17879 Len=1424 TSV=2005181 TSER=751670683 6 0.002747 10.40.0.13 10.40.0.9 TCP 61738 > 10987 [ACK] Seq=1424 Ack=1399 Win=17691 Len=1424 TSV=2005183 TSER=751670687 7 0.002864 10.40.0.9 10.40.0.13 ESP ESP (SPI=0x000007d1) 8 0.003315 10.40.0.13 10.40.0.9 TCP [TCP Out-Of-Order] 61738 > 10987 [ACK] Seq=1424 Ack=1399 Win=17691 Len=1424 TSV=2005183 TSER=751670687 Authentication Header Data (1424 bytes) 0000 01 56 07 d2 b2 50 99 a6 fc 4c 1d bb 2a 88 d9 09 .V...P...L..*... 0010 e5 05 ad fa c1 4b 62 a5 7b c6 dd d2 ee 4e d7 c7 .....Kb.{....N.. 0020 a8 95 6b da b3 ec 28 5c f4 5a 99 08 0a dd 39 20 ..k...(\.Z....9 0030 c0 ef 9c 7c 6b dc 66 e1 b0 c0 a5 bb 9f bc 4e 99 ...|k.f.......N. 0040 bc f3 38 70 d4 8f 1c f8 fe 8d 4c 8a 94 97 b4 b6 ..8p......L..... 0050 12 1f a1 1b 57 ac 28 97 1a 67 0e e7 aa b8 3a 1b ....W.(..g....:. 0060 4e 8b 19 6c 80 48 77 aa 80 c5 05 46 74 37 2d 5a N..l.Hw....Ft7-Z 0070 b3 94 73 9a 13 b7 bf 81 65 11 d8 16 e8 88 e2 5f ..s.....e......_ 0080 6f dc c6 7d fc a7 77 e7 f4 39 12 b3 e9 17 52 b6 o..}..w..9....R. [...] }}} [[BR]] Vous pouvez télécharger un exemple de trames échangées entre les stations [wiki:Entreprise2Client1 CLIENT1.ENT2] et [wiki:Entreprise2Serveur1 SERVEUR1.ENT2] via ce [http://projet.reseau.free.fr/data/AS65004/trace_ipsec lien]. A noter que la trace pèse env. 14Mo (10 000 paquets capturés). Pour voir les échanges, vous devrez ouvrir cette trace avec un outil, comme Wireshark. ---- Pour plus d'infos, se référer aux '''man de Setkey , Racoon , IPSec''' [[BR]] Références: * http://www.onlamp.com/pub/a/bsd/2001/12/10/ipsec.html * http://www.onlamp.com/pub/a/bsd/2002/12/26/FreeBSD_Basics.html ----