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