| 1 | [wiki:Groupe1Entreprise2 Entreprise2] : ListeTutoriaux : IpsecImplementation |
| 2 | ---- |
| 3 | = '''''Configuration d'un flux IPSec en mode Transport sous FreeBSD''''' = |
| 4 | |
| 5 | == Configuration d'IPSec == |
| 6 | Cet exemple a été écrit pour la création d'un flux IPSec en mode Transport entre [wiki:Entreprise2Client1 CLIENT1.ENT2](10.40.0.13) et [wiki:Entreprise2Serveur1 SERVEUR1.ENT2] (10.40.0.9). [[BR]] |
| 7 | |
| 8 | === Vérifiez les options === |
| 9 | Les options |
| 10 | {{{ |
| 11 | options IPSEC |
| 12 | options IPSEC_ESP |
| 13 | options IPSEC_DEBUG (optionnel mais fortement recommandé) |
| 14 | }}} |
| 15 | doivent être installées sur le noyau que vous exécutez, sinon [http://www.freebsdebutant.org/index.php?page=configuration_noyau recompilez votre noyau]. |
| 16 | * Installez IPSec-tools et Racoon ( votre bonheur se trouve dans les /usr/ports/security) |
| 17 | === Configurez IPSec pour FreeBSD === |
| 18 | [[BR]] |
| 19 | * Créer le fichier /etc/ipsec.conf : |
| 20 | {{{ |
| 21 | $ cat > /etc/ipsec.conf << EOF |
| 22 | # Definition des SA + Cles |
| 23 | # Rappel : |
| 24 | # 3des-cbc,cle de 192 bits (24o) |
| 25 | # hmac-md5,cle de 128 bits(16o) |
| 26 | flush; |
| 27 | |
| 28 | ## de client1 vers serveur1 |
| 29 | add 10.40.0.13 10.40.0.9 ah 1000 -m transport -A hmac-md5 "1234567890123456"; |
| 30 | add 10.40.0.13 10.40.0.9 esp 1001 -m transport -E 3des-cbc "123456789012345678901234"; |
| 31 | |
| 32 | ## de serveur1 vers client1 |
| 33 | add 10.40.0.9 10.40.0.13 ah 2000 -m transport -A hmac-md5 "1234567890123456"; |
| 34 | add 10.40.0.9 10.40.0.13 esp 2001 -m transport -E 3des-cbc "123456789012345678901234"; |
| 35 | |
| 36 | # Definition des SPD |
| 37 | spdflush; |
| 38 | spdadd 10.40.0.13 10.40.0.9 any -P out ipsec |
| 39 | esp/transport/10.40.0.13-10.40.0.9/use |
| 40 | ah/transport/10.40.0.13-10.40.0.9/use; |
| 41 | # politique en entree |
| 42 | spdadd 10.40.0.9 10.40.0.13 any -P in ipsec |
| 43 | ah/transport/10.40.0.9-10.40.0.13/use |
| 44 | esp/transport/10.40.0.9-10.40.0.13/use; |
| 45 | EOF |
| 46 | }}} |
| 47 | * Puis entrez |
| 48 | {{{ |
| 49 | $ setkey -v -f /etc/ipsec.conf |
| 50 | }}} |
| 51 | * Maintenant, si vous entrez |
| 52 | {{{ |
| 53 | $ setkey -D -P |
| 54 | }}} |
| 55 | la création des SA et SP devraient vous produire un affichage à peu près similaire à |
| 56 | {{{ |
| 57 | [root@SERVEUR1 ~]# setkey -P -D |
| 58 | 10.40.0.13[any] 10.40.0.9[any] any |
| 59 | in ipsec |
| 60 | ah/transport/10.40.0.13-10.40.0.9/use |
| 61 | esp/transport/10.40.0.13-10.40.0.9/use |
| 62 | created: Apr 20 18:10:44 2007 lastused: Apr 20 18:10:44 2007 |
| 63 | lifetime: 0(s) validtime: 0(s) |
| 64 | spid=16393 seq=1 pid=7761 |
| 65 | refcnt=1 |
| 66 | 10.40.0.9[any] 10.40.0.13[any] any |
| 67 | out ipsec |
| 68 | ah/transport/10.40.0.9-10.40.0.13/use |
| 69 | esp/transport/10.40.0.9-10.40.0.13/use |
| 70 | created: Apr 20 18:10:44 2007 lastused: Apr 20 18:10:44 2007 |
| 71 | lifetime: 0(s) validtime: 0(s) |
| 72 | spid=16392 seq=0 pid=7761 |
| 73 | refcnt=1 |
| 74 | }}} |
| 75 | * Pour automatiser cette procédure au démarrage de la machine, éditez dans /etc/rc.conf en ajoutant : |
| 76 | {{{ |
| 77 | ipsec_enable="YES" |
| 78 | ipsec_file="/etc/ipsec.conf" |
| 79 | }}} |
| 80 | * '''Votre démon IPSec sera actif avec les bons paramètres dès le prochain démarrage''' |
| 81 | [[BR]] |
| 82 | |
| 83 | === Configurer Racoon === |
| 84 | [[BR]] |
| 85 | |
| 86 | * Créer psk.txt initiant l'échange de clé partagé |
| 87 | {{{ |
| 88 | $ cat > psk.txt << EOF |
| 89 | 10.40.0.9 mot_de_passe_t3$T |
| 90 | EOF |
| 91 | }}} |
| 92 | L'adresse IP est celle de la cible (ici Serveur1), suivi du mot de passe. |
| 93 | * 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: |
| 94 | {{{ |
| 95 | $ cat > racoon.conf << EOF |
| 96 | # $File: /home/chris/PRes/Postes_Rackables/ipsec_client1/racoon.conf $ |
| 97 | # $MD5: 2922df40b60a8f1eb7116f90a485f84a $ |
| 98 | # $By Christophe Alladoum <christophe[dot]alladoum[at]gmail[dot]com>$ |
| 99 | # $Last-Modified: Fri Apr 20 18:28:11 2007$ |
| 100 | |
| 101 | # |
| 102 | # Configuration de RACOON cote client |
| 103 | # |
| 104 | |
| 105 | path include "/chemin/absolu/vers/ce/repertoire" ; |
| 106 | |
| 107 | path pre_shared_key "/chemin/absolu/vers/psk.txt" ; |
| 108 | # path pre_shared_key "/root/ipsec_client1/psk.txt" ; |
| 109 | # path certificate "/usr/local/etc/cert" ; |
| 110 | |
| 111 | # "log" indique le niveau de debug |
| 112 | # choix : notify, debug, debug2 |
| 113 | # log debug; |
| 114 | |
| 115 | padding |
| 116 | { |
| 117 | maximum_length 20; # maximum padding length. |
| 118 | randomize off; # enable randomize length. |
| 119 | strict_check off; # enable strict check. |
| 120 | exclusive_tail off; # extract last one octet. |
| 121 | } |
| 122 | |
| 123 | # Interfaces a ecouter (IPv4 et/ou v6) |
| 124 | # Si aucune, ecoute sur toutes les interfaces de la machine |
| 125 | listen |
| 126 | { |
| 127 | # pour le client IPv4 |
| 128 | isakmp 10.40.0.13 [500]; |
| 129 | # pour le client IPv6 |
| 130 | # isakmp ::1 [7000]; |
| 131 | } |
| 132 | |
| 133 | # Temporisateurs d echange de cle |
| 134 | timer |
| 135 | { |
| 136 | counter 5; # maximum trying count to send. |
| 137 | interval 20 sec; # maximum interval to resend. |
| 138 | persend 1; # the number of packets per a send. |
| 139 | |
| 140 | # Temps max. pour chaque phase |
| 141 | phase1 2 min; |
| 142 | phase2 4 min; |
| 143 | } |
| 144 | |
| 145 | # Cas du client1 |
| 146 | remote 10.40.0.9 |
| 147 | { |
| 148 | exchange_mode aggressive,main; |
| 149 | doi ipsec_doi; |
| 150 | situation identity_only; |
| 151 | |
| 152 | nonce_size 16; |
| 153 | lifetime time 60 min; # sec,min,hour |
| 154 | initial_contact on; |
| 155 | support_proxy on; |
| 156 | proposal_check obey; # obey, strict or claim |
| 157 | |
| 158 | proposal { |
| 159 | encryption_algorithm blowfish; |
| 160 | hash_algorithm sha1; |
| 161 | authentication_method pre_shared_key ; |
| 162 | dh_group 5 ; |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | # Cas du client1 |
| 167 | sainfo anonymous |
| 168 | { |
| 169 | pfs_group 5; |
| 170 | lifetime time 48 hour; |
| 171 | encryption_algorithm 3des, cast128, blowfish 448, des; |
| 172 | authentication_algorithm hmac_md5, hmac_sha1; |
| 173 | compression_algorithm deflate ; |
| 174 | } |
| 175 | EOF |
| 176 | }}} |
| 177 | * A présent, lancez: |
| 178 | {{{ |
| 179 | $ /usr/local/sbin/racoon -l /var/log/racoon.log -f /chemin/vers/racoon.conf |
| 180 | }}} |
| 181 | Un fichier de log (utile pour le debug) sera crée à l'adresse /var/log/racoon.log |
| 182 | * ''' Votre Racoon est lancé !! ''' |
| 183 | === Vérifier le fonctionnement === |
| 184 | Via le monitoring, vous devriez observer des échanges similaires aux suivants. |
| 185 | {{{ |
| 186 | Capturing on dc3 |
| 187 | [...] |
| 188 | Echange de cle avec ISAKMP |
| 189 | 904.714799 10.40.0.9 -> 10.40.0.13 ISAKMP Aggressive |
| 190 | 904.715327 10.40.0.9 -> 10.40.0.13 ISAKMP Aggressive |
| 191 | 904.715883 10.40.0.9 -> 10.40.0.13 ISAKMP Aggressive |
| 192 | [...] |
| 193 | Communication Securisee via IPSec/ESP |
| 194 | 1 0.000000 10.40.0.9 10.40.0.13 ESP ESP (SPI=0x000007d1) |
| 195 | 2 0.000588 10.40.0.9 10.40.0.13 ESP ESP (SPI=0x000007d1) |
| 196 | 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 |
| 197 | 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 |
| 198 | 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 |
| 199 | 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 |
| 200 | 7 0.002864 10.40.0.9 10.40.0.13 ESP ESP (SPI=0x000007d1) |
| 201 | 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 |
| 202 | |
| 203 | Authentication Header |
| 204 | |
| 205 | Data (1424 bytes) |
| 206 | |
| 207 | 0000 01 56 07 d2 b2 50 99 a6 fc 4c 1d bb 2a 88 d9 09 .V...P...L..*... |
| 208 | 0010 e5 05 ad fa c1 4b 62 a5 7b c6 dd d2 ee 4e d7 c7 .....Kb.{....N.. |
| 209 | 0020 a8 95 6b da b3 ec 28 5c f4 5a 99 08 0a dd 39 20 ..k...(\.Z....9 |
| 210 | 0030 c0 ef 9c 7c 6b dc 66 e1 b0 c0 a5 bb 9f bc 4e 99 ...|k.f.......N. |
| 211 | 0040 bc f3 38 70 d4 8f 1c f8 fe 8d 4c 8a 94 97 b4 b6 ..8p......L..... |
| 212 | 0050 12 1f a1 1b 57 ac 28 97 1a 67 0e e7 aa b8 3a 1b ....W.(..g....:. |
| 213 | 0060 4e 8b 19 6c 80 48 77 aa 80 c5 05 46 74 37 2d 5a N..l.Hw....Ft7-Z |
| 214 | 0070 b3 94 73 9a 13 b7 bf 81 65 11 d8 16 e8 88 e2 5f ..s.....e......_ |
| 215 | 0080 6f dc c6 7d fc a7 77 e7 f4 39 12 b3 e9 17 52 b6 o..}..w..9....R. |
| 216 | [...] |
| 217 | }}} |
| 218 | [[BR]] |
| 219 | 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 |
| 220 | [http://projet.reseau.free.fr/data/AS65004/trace_ipsec lien]. A noter que la trace pèse env. 14Mo (10 000 paquets capturés). |
| 221 | Pour voir les échanges, vous devrez ouvrir cette trace avec un outil, comme Wireshark. |
| 222 | ---- |
| 223 | Pour plus d'infos, se référer aux '''man de Setkey , Racoon , IPSec''' |
| 224 | [[BR]] |
| 225 | Références: |
| 226 | * http://www.onlamp.com/pub/a/bsd/2001/12/10/ipsec.html |
| 227 | * http://www.onlamp.com/pub/a/bsd/2002/12/26/FreeBSD_Basics.html |
| 228 | ---- |