Mise en place d'une paire de SA IPsec

From Livre IPv6

Revision as of 11:19, 14 February 2006 by Bruno Deniaud (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Architectures classiques de mise en oeuvre des IPsec Table des matières Critique des IPsec

Deux machines A et B utilisent le système d'exploitation FreeBSD et on souhaite configurer une paire de SA IPsec entre ces deux machines. Afin d'utiliser IPsec, il est nécessaire que l'option IPSEC soit compilée dans le noyau41. Dans un premier temps une paire de SA IPsec sera mise en place en utilisant le protocole ESP. Pour cela, il faut configurer d'une part la base de données de politique de sécurité IPsec (SPD) et d'autre part la base de données des associations de sécurité (SAD).

Configuration de la SPD sur A et B

Imaginons que la politique de sécurité consiste à protéger tous les échanges entre A et B par le protocole ESP en mode transport.

Sur A, la SPD peut alors être configurée à l'aide du script présent à le Script de configuration de la SPD sur A. La commande setkey permet de manipuler les bases de données SPD et SAD (cf. man setkey). En particulier, l'option « -FP » permet de nettoyer la SPD et l'option « -F » de nettoyer la SAD.

L'une des opérations de setkey est spdadd. Cette opération permet d'ajouter une politique de sécurité dans la SPD. Elle prend les paramètres suivants :

  • « any » signifie que n'importe quel trafic doit être protégé par ESP
  • « -P out » indique que le trafic sortant est pris en considération
  • « -P in » indique que le trafic entrant est pris en considéréation
  • "require" indique que si la politique ne peut pas être appliquée (pas de SA correspondante), alors on ne doit ni envoyer ni accepter des paquets IP de B.

Dans le script, la première règle indique que tout le trafic (any) ayant pour source A et pour destination B ($A $B), qui sort de A (-P out), doit être traité par IPsec (ipsec). Ce trafic doit être protégé par ESP en mode transport.

Script de configuration de la SPD sur A

#!/bin/csh
set A = 2001:0660:3203:1020:210:b5ff:feab:4cc4
set B = 2001:0660:3203:1010:210:b5ff:feab:2dc2
#nettoie la SPD
setkey -FP
#nettoie la SAD
setkey -F
#exécute les opérations indiquées jusqu'à EOF
setkey -c << EOF
# policy to use between A and B
spdadd $A $B any -P out ipsec esp/transport//require;
spdadd $B $A any -P in ipsec esp/transport//require;
EOF
Script de configuration de la SPD sur B

#!/bin/csh
set A = 2001:0660:3203:1020:210:b5ff:feab:4cc4
set B = 2001:0660:3203:1010:210:b5ff:feab:2dc2
 
setkey -FP
setkey -F
setkey -c << EOF
 
# policy to use between A and B
 
spdadd $A $B any -P in ipsec esp/transport//require;
spdadd $B $A any -P out ipsec esp/transport//require;
 
EOF

Pour rendre ce script exécutable, il faut utiliser la commande chmod +x nom_du_script.

Pour définir la SPD sur la machine B, un script similaire (voir Script de configuration de la SPD sur B) doit être considéré. Noter que seule la direction de la politique change.

Afin de vérifier que les politiques de sécurité ont été correctement installées sur les deux machines, on peut utiliser la commande setkey -DP qui nous renseigne de plus sur la date de création ainsi que la date de dernière utilisation.

$(sur B) setkey -DP
2001:660:3203:1020:210:b5ff:feab:4cc4[any] 2001:660:3203:1010:210:b5ff:feab:2dc2[any] any
in ipsec
esp/transport//require
created: Jan 12 14:46:07 2005 lastused: Jan 14 16:05:48 2005
lifetime: 0(s) validtime: 0(s)
spid=16408 seq=1 pid=21781
refcnt=1
2001:660:3203:1010:210:b5ff:feab:2dc2[any] 2001:660:3203:1020:210:b5ff:feab:4cc4[any] any
out ipsec
ah/transport//require
created: Jan 12 14:46:07 2005 lastused: Jan 15 03:01:06 2005
lifetime: 0(s) validtime: 0(s)
spid=16409 seq=0 pid=21781
refcnt=1

Variantes possibles de la SPD

Nous proposons de donner d'autres exemples de configuration possibles. Pour ne protéger que le trafic ICMPv6 entre A et B (dans le sens A vers B) avec le protocole AH, on utilisera l'opération suivante :

spdadd $A $B icmp6 -P out ipsec ah/transport//require;

Pour protéger le trafic UDP entre A et B (de A vers B) avec ESP :

spdadd $A $B udp -P out ipsec esp/transport//require;

Pour protéger tout le trafic entre A et B (de B vers A) avec AH :

spdadd $B $A any -P out ipsec ah/transport//require;

On peut aussi vouloir utiliser le mode tunnel. Par exemple, on peut dire à A que ses paquets à destination d'une machine C doivent utiliser un tunnel entre A et B. B est alors chargé de transmettre les paquets non protégés à C. On utilisera pour cela la commande suivante :

spdadd $A $C any -P out ipsec esp/tunnel/$A-$B/require;

Configuration manuelle de la SAD

Pour que le trafic soit effectivement protégé par IPsec, il faut que les machines A et B partagent une ou des associations de sécurité IPsec. Dans notre exemple, A et B doivent partager deux SAs : une de A vers B et une de B vers A. Ces associations de sécurité peuvent être configurées soit manuellement soit dynamiquement en utilisant le protocole IKE. Dans cette partie, nous allons configurer ces deux SAs manuellement à l'aide du script de la See Script de configuration de la SAD sur A et B.

La commande add permet d'ajouter un SA dans la SAD. La première règle add permet de créer la SA utilisée entre A et B et de A vers B et la seconde crée la SA utilisée entre A et B mais de B vers A. Les paramètres utilisés ici sont :

  • le SPI, qui vaut pour la première règle "0x20001",
  • l'algorithme de chiffrement "-E rijndael-cbc",
  • la clef utilisée pour le chiffrement "GISELEGISELEGISELEGISELE",
  • l'algorithme d'authentification "-A hmac-sha1"
  • la clef correspondante "KAMEKAMEKAMEKAMEKAME".

Vous pouvez vérifier que cette configuration fonctionne correctement à l'aide des commandes tcpdump et ping6 par exemple, tcpdump permettant de voir le trafic arrivant et sortant d'une interface et ping6 d'envoyer des paquets ICMPv6 ECHO_REQUEST vers une adresse IPv6.

Script de configuration de la SAD sur A et B

#!/bin/csh
set A = 2001:0660:3203:1020:210:b5ff:feab:4cc4
set B = 2001:0660:3203:1010:210:b5ff:feab:2dc2
setkey -F
setkey -c << EOF
 
 
#set SAD between A and B
 
add $A $B esp 0x20001 -E rijndael-cbc "GISELEGISELEGISELEGISELE" -A hmac-sha1 "KAMEKAMEKAMEKAMEKAME";
add $B $A esp 0x20002 -E rijndael-cbc "GISELEGISELEGISELEGISELE" -A hmac-sha1 "MEKAMEKAMEKAMEKAMEKA";

EOF

Configuration dynamique de la SAD

L'utilisation du protocole IKE permet la mise en place automatique des associations de sécurité. Il consulte la SPD afin de configurer les SAs correspondantes. Le logiciel racoon est une implémentation de ce protocole. C'est ce logiciel que nous allons utiliser pour automatiser la configuration de la SAD. Si le mode d'authentification choisi repose sur un secret pré-partagé, alors il est nécessaire d'éditer deux fichiers de configuration pour racoon. Ces deux fichiers se trouvent (après installation du logiciel) dans le répertoire /usr/local/etc/racoon. Le fichier racoon.conf est le fichier de configuration de racoon. Un exemple de configuration utilisée sur A et B est donné dans l'encadré suivant. Voici quelques éléments clés du fichier permettant de mieux en comprendre le contenu (le lecteur intéressé pourra obtenir des informations plus précises en tapant man racoon.conf) :

Fichier racoon.conf 

# "path" must be placed before it should be used.
# You can overwrite which you defined, but it should not use due to confusing.
path include "/usr/local/etc/racoon" ;
 
# search this file for pre_shared_key with various ID key.
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
 
# "padding" defines some parameter of padding. You should not touch these.
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.
}
 
# if no listen directive is specified, racoon will listen to all
# available interface addresses.
listen
{
   isakmp 2001:0660:3203:1020:210:b5ff:feab:4cc4 [500];
}
 
# Specification of default various timer.
timer
{
   # These value can be changed per remote node.
   counter 5; # maximum trying count to send.
   interval 20 sec; # maximum interval to resend.
   persend 1; # the number of packets per a send.
 
   # timer for waiting to complete each phase.
   phase1 30 sec;
   phase2 15 sec; 
}

remote anonymous
{
   exchange_mode aggressive,main;
   doi ipsec_doi;
   situation identity_only;
 
   my_identifier address;
  
   nonce_size 16;
   lifetime time 1 min; # sec,min,hour
   initial_contact on;
   proposal_check obey; # obey, strict or claim 
 
   proposal {
      encryption_algorithm 3des;
      hash_algorithm sha1;
      authentication_method pre_shared_key ;
      dh_group 2 ;
   }
}

sainfo anonymous
{
   pfs_group 1;
   lifetime time 30 sec;
   encryption_algorithm 3des ;
   authentication_algorithm hmac_sha1;
   compression_algorithm deflate ;
}
 

  • my_identifier précise le type de l'identifiant des machines A et B. Ici, les machines sont identifiées par leurs adresses IPv6, donc le fichier contient :
    • my_identifier address;
  • authentication_method précise la méthode d'authentification de la phase I. Il s'agit ici du mode pre_shared_key dans la partie remote anonymous
  • path pre_shared_key indique le fichier (/usr/local/etc/racoon/psk.txt) contenant la clé

Le fichier psk.txt contient le secret pré-partagé (cf. Fichier psk.txt<tt>), c'est-à-dire, il précise l'adresse de la machine distante suivie du secret partagé à savoir ici : 123456789abcde.

Fichier psk.txt sur A :

2001:660:3203:1010:210:b5ff:feab:2dc2 123456789abcde
Fichier psk.txt sur B :

2001:660:3203:1020:210:b5ff:feab:4cc4 123456789abcde

Une fois les fichiers correctement configurés, nous pouvons lancer le démon IKE à l'aide de la commande <tt>racoon sur les machines A et B (cf. man racoon pour plus d'informations sur cette commande) :

#racoon -f /usr/local/etc/racoon/racoon.conf

Pour tester que la configuration fonctionne correctement, on peut utiliser la commande ping6 entre A et B.

Architectures classiques de mise en oeuvre des IPsec Table des matières Critique des IPsec
Personal tools