Tunnel IPSec sous FreeBSD
Date: 9/01/2007 | Catégories: Uncategorized | Tags: freebsd,vpn
Nous allons dans ce post décrire le moyen de créer un tunnel IPSec entre deux réseaux distants et ainsi former un réseau privée virtuel (ou VPN pour les intimes).
Un VPN ou Virtual Private Network, est un tunnel logique (par opposition au réseau privé) établi entre deux entités et dans lequel les données circulant ne sont pas « visibles » de l'extérieur. Cette « invisibilité » peut être due par exemple à un chiffrement des données ou à un protocole particulier des échanges de données. Dans le cas des VPN IPSEC, on aurait tendance à dire qu'un VPN assure que les données circulent de façon sécurisée : les deux entités sont authentifiées, l'intégrité des données est vérifiée, et les données peuvent circuler chiffrées sur le réseau IP.
IPSEC est un protocole réseau de niveau 3, comme le protocole IP, mais auquel ont été rajoutées des fonctions de sécurité, comme le chiffrement des données par exemple. Le protocole IPSEC est prévu en natif dans la nouvelle version du protocole IP : IPV6.
Le protocole IPSEC permet deux traitements des données dans le tunnel :
- L'authentification des extrémités et la vérification de l'intégrité des données ;
- L'authentification, l'intégrité et le chiffrement des données.
Le premier traitement correspond au protocole AH1 (Authentication Header). Ce protocole permet de s'assurer de l'identité des deux extrémités du tunnel et de l'intégrité des données (les données reçues sont bien les données envoyées, elles n'ont pas été modifiées au passage).
Mais il est important de savoir que les données circulent en clair. En fait, techniquement, le protocole AH consiste à rajouter une entête à la trame IP, mais la partie « data » de la trame IP n'est pas changée.
Le deuxième traitement correspond au protocole ESP2 (Encapsulation Security Payload) et assure en plus de l'authentification, le chiffrement des données. Techniquement, la trame IP originelle est chiffrée et réencapsulée dans une autre trame IP.
Enfin, on peut encore dire sur le protocole IPSEC que celui-ci est particulièrement souple et n'impose aucun algorithme de chiffrement ou de hachage. Les deux extrémités du tunnel se mettent d'accord entre elles sur les modalités avant l'établissement du VPN.
Le mode Tunnel remplace les en-têtes IP originaux et encapsule la totalité du paquet IP. Par exemple, l'adresse IPA externe pourra être celle de la passerelle de sécurité implémentant IPSec, et l'adresse IPB interne sera celle de la machine finale, sur le réseau derrière la passerelle.
La configuration suivante est donnée sur un système FreeBSD (4.x).
Il faut d'abord configurer sur les deux routeurs VPN les fichiers /etc/racoon.conf et /etc/psk.txt de la manière suivante:
Racoon.conf (commun)
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
remote anonymous
{
exchange_mode aggressive,main,base;
lifetime time 24 hour; # sec,min,hourproposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 2 ;
}
}
sainfo anonymous
{
pfs_group 2;
lifetime time 12 hour;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1 ;
compression_algorithm deflate ;
}
psk.conf (sur routeur A)
psk.conf (sur routeur B)
Ensuite il faut monter le tunnel IPSec au demarrage de la machine (ou à la demande). Pour cela j'utilise un script que je met dans le répertoire /usr/local/etc/rc.d:
000.ipsec.sh (sur le routeur A)
#!/bin/shcase "$1" in
start)
setkey -F
setkey -FP
setkey -c / / any -P out ipsec esp/tunnel/-/require ;
spdadd / / any -P out ipsec esp/tunnel/-/require ;
EOF
route add -net /
;;
stop)
route -n delete -net /
setkey -F
setkey -FP
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esacexit 0
Faire de même sur le routeur B en inversant les adresses IP.
Pour lancer le tunnel IPSec:
# /usr/local/etc/rc.d/000.ipsec.sh start
Pour detruire le tunnel IPSec:
# /usr/local/etc/rc.d/000.ipsec.sh stop
Voili A+