Dernière mise à jour : 02/05/2002
Je vais tenter de décrire dans cet article la méthode pour faire une connection VPN des plus efficaces entre deux plateformes linux. L'une d'entre elle est votre Gateway (au travail) et l'autre peut etre toute machine ayant une connection à internet. La première partie de cet article décrit la méthode dite du 'shared-secret', il s'agit d'une phrase qui vous permet de reconnaître deux machines entre elles. Voyons tout d'abord les liens avec le code nécessaire :
- Freeswan - Le site officiel sur le VPN sous linux, vous permet de patcher votre kernel pour ajouter les fonctionalités VPN 1.92
- Strongsec - Second site, utilisant Freeswan, fournit un patch pour les certificats X509.
Pour installer correctement Freeswan, vous allez devoir recompiler le kernel. Si vous utilisez un kernel que vous avez déjà compilé, c'est parfait, passez directement à la seconde partie. Si vous utilisez un nouveau kernel, assurez-vous qu'il compile avec toutes vos optimisations, c'est primordial avant même d'installer Freeswan. Nous allons commencer par le serveur.
Freeswan utilise IPSec. Tout ce que vous avez besoin de faire est de décompacter quelque part le patch dont le lien est en début de cette page et taper : make menugo. Freeswan lance alors le make menu du kernel, sauvez et le script commence la compilation du kernel. Recopiez alors le kernel une fois terminé en utilisant lilo ou grub et faîtes un make install toujours à partir du répertoire Freeswan, celui-ci va créer les binaires ipsec et les script init nécessaires au démarrage d'IPSec. Redémarrez ensuite votre linux avec le nouveau kernel.
Pour vous assurer que tout s'est bien passé, après redémarrage, tapez : dmesg |grep -i ipsec. S'il ne retourne rien, vous avez fait une erreur quelque part, mauvais kernel ou compilation ratée, recommencez. Sinon, le code Freeswan 1.92 devrait s'afficher, indiquant que la machine est prête.
Editez ensuite votre /etc/ipsec.conf et rajoutez ceci :
-
conn shared-1 # Nom de la connection
left=%any
leftid=
authby=secret # Utilisation de la methode shared-secret
right=198.66.66.99 # Adresse internet de la Gateway (le serveur ou vous installez VPN)
rightsubnet=192.168.0.0/16 # Subnet du réseau accessible derrière la passerelle (votre réseau d'entreprise)
rightnexthop=198.66.66.1 # Passerelle faisant la route des paquets IP pour l'internet
auto=add
-
: PSK "CeciEstMaPhraseSecretePartagee"
Freeswan - Client
Pour le client, reprenez l'étape du serveur pour la compilation du serveur et l'installation du patch. Une fois cette étape finie, il ne vous reste qu'à rajouter ceci dans votre /etc/ipsec.conf :
-
# Nom de la connection
left=%defaultroute # ou ppp0 pour prendre votre modem
leftid=
authby=secret # Utilisation de la methode shared-secret
right=198.66.66.99 # Adresse internet de la Gateway (le serveur ou vous installez VPN)
rightsubnet=192.168.0.0/16 # Subnet du réseau accessible derrière la passerelle (votre réseau d'entreprise)
rightnexthop=198.66.66.1 # Passerelle faisant la route des paquets IP pour l'internet
auto=add
Il est temps de connecter votre client, pour se faire, démarrez votre connection internet et redémarrez ensuite le script init ipsec. Vérifiez que tout va bien par la commande : ipsec whack --statusw. S'il ne retourne aucune erreur, il est temps d'activer le tunnel : ipsec --auto up shared-1. Comme vous le remarquez, la ligne de commande prends en paramètre le nom de la connection définie dans votre ipsec.conf
Essayez de faire un ping vers une machine à l'intérieur du réseau et si elle répond c'est gagné ! Mettez à jour votre /etc/hosts pour rentrer les noms intranet dont vous avez besoin et bon surf !
Freeswan avec Windows, Linux et X509
Je tiens à remercier Sylvain Boily pour l'envoi de ce document que je colle tel quel dans cette section car je n'ai toujours pas eu le temps de compléter cet article.
Avant toute chose, il faut vérifier que vous avez bien tout les utilitaires suivants :
- Windows 2000 Service Pack 2
- Windows 2000 ipesecpol.exe
- Freeswan pour Linux
- X.509 Patch pour freeswan 1.97
- OpenSSL 0.9.6c
- Tools VPN pour windows
- Code source des VPN tools pour windows.
Installation de Freeswan sous linux
Il faut décompresser les deux packages récupérés, le patch X509 et freeswan-1.97, puis copier le freeswan.diff dans le répertoire freeswan-1.97.
-
cd freeswan-1.97
patch -p1 < freeswan.diff
Puis un make menugo, on configure le kernel on fait un exit. Puis une fois la compilation fini, un make kinstall, par précaution je copie mon nouveau kernel dans /boot puis lilo et redemarrage du PC. Dans le dmesg on doit avoir freeswan 1.97. Une fois freeswan installé on va faire le certificat.
Génération Certificat ROOT :
Première chose à faire est de créer un certificat root, avec la commande suivante : ( sous debian ). Avant toute chose nous allons changer quelques valeurs. Dans le /etc/ssl/openssl.cnf on va changer le 1024 en 2048 et le 365 en 3650, de 1 an à 10 ans.
-
$ /usr/lib/ssl/misc/CA.sh -newca
$ /usr/lib/ssl/misc/CA.sh -newreq
$ /usr/lib/ssl/misc/CA.sh -sign
Après cette partie, vous avez généré les certificats, il ne reste plus qu'à faire quelques manipulations :
-
$ mv newcert.pem serveur.pem
$ mv newreq.pem serveur.key
$ vi serveur.key
Assurez vous de bien enlever les lignes de -----BEGIN CERTIFICATE REQUEST----- jusqu'à la fin. Il faut maintenant créer les répertoires :
-
$ mkdir /etc/ipsec.d
$ mkdir /etc/ipsec.d/private
$ mkdir /etc/ipsec.d/cacerts
$ mkdir /etc/ipsec.d/crls
Copie des fichiers au bon endroit :
-
$ cp serveur.key /etc/ipsec.d/private
$ cp serveur.pem /etc/ipsec.d
$ openssl x509 -in demoCA/cacert.pem -outform der -out rootca.der
$ cp rootca.der /etc/ipsec.d/cacerts/RootCA.der
$ openssl x509 -in serveur.pem -outform der -out /etc/x509cert.der
$ openssl ca -gencrl -out crl.pem
$ cp crl.pem /etc/ipsec.d/crls
Une fois toutes les clefs mise en place on va éditer le fichier de config ipsec.secrets, mettre :
-
: RSA host.pem "lapassephrase"
Changez ensuite les permissions sur le fichier par la commande : chmod 600 /etc/ipsec.secrets. Editez par la suite le fichier ipsec.conf et entrez les paramètres suivants :
-
config setup
-
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=no ( Si on le met à yes on ne pourra pas se connecter à plusieurs. )
conn %default
-
keyingtries=2
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
left=%defaultroute
leftcert=host.pem ( ou autre selon le nom que l'on a mis )
auto=add
pfs=yes
conn roadwarrior
-
right=%any
conn roadwarrior-net
-
leftsubnet=192.168.0.0/255.255.255.0 ( Selon ce que l'on veut )
right=%any
Il ne reste plus qu'à vérifier la configuration que l'on a mis en place par les commandes suivantes :
-
$ ipsec setup start
$ ipsec look
$ ipsec whack --status
Pour configurer un client, vous n'avez pas besoin de générer un certificat ROOT, tout le reste est par contre à reproduire. Vous replacer ensuite sur la machine serveur et faire les commandes suivantes :
-
$ /usr/lib/ssl/misc/CA.sh -newreq
$ /usr/lib/ssl/misc/CA.sh -sign
$ mv newcert.pem nuxclient.pem
$ mv newreq.pem nuxclient.key
$ vi nuxclient.key $ openssl x509 -in demoCA/cacert.pem -noout -subject
Ne pas oublier d'enlever les lignes suivantes : -----BEGIN CERTIFICATE REQUEST-----. Vous devez ensuite éditez le fichier de configuration du client (/etc/ipsec.conf) et copier plus ou moins ce qui suit :
-
config setup
-
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=no
conn %default
-
keyingtries=0
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
right=%defaultroute
rightcert=nuxclient.pem
auto=add
pfs=yes
conn roadwarrior
-
left=
leftcert=host.pem
conn roadwarrior-net
-
left=
leftcert=host.pem
leftsubnet=192.168.0.0/255.255.255.0
Une fois le fichier de configuration mis en place faire :
-
$ ipsec auto --up roadwarrior
$ ipsec auto --up roadwarrior-net
$ ipsec look
Et là vous êtes connecté normalement ;-) Faire un ping afin de vérifier.
Clients sous Windows
-
$ /usr/lib/ssl/misc/CA.sh -newreq
$ /usr/lib/ssl/misc/CA.sh -sign
$ mv newcert.pem winclient.pem
$ mv newreq.pem winclient.key
$ vi winclient.key
N'oubliez pas d'enlever les lignes -----BEGIN CERTIFICATE REQUEST----- jusqu'à la fin. Afin de pouvoir mettre le certificat sous windows il faut faire un p12, grâce aux commandes suivantes :
-
$ openssl pkcs12 -export -in winclient.pem -inkey winclient.key -certfile demoCA/cacert.pem -out winclient.p12
$ openssl x509 -in demoCA/cacert.pem -noout -subject
La syntaxe du ipsec.conf de windows :
-
conn %default
-
dial=Speed Touch USB ( Nom de la connection internet )
conn roadwarrior
-
left=%any
right=
rightca="C=FR,ST=France,L=Paris...." ( mettre la sortie du openssl x509 -in demoCA/cacert.pem -noout -subject ) !!!! ATTENTION mettre des virugles
network=auto
auto=start
pfs=yes
conn roadwarrior-net
-
left=%any
right=
rightsubnet=192.168.0.0/24
rightca="C=FR,ST=France,L=Paris...." ( mettre la sortie du openssl x509 -in demoCA/cacert.pem -noout -subject ) !!!! ATTENTION mettre des virugles pas des /
network=auto
auto=start
pfs=yes
Enfin, voici quelques sources qui ont servies à faire ce document :
- http://www.freeswan.org
- http://www.natecarlson.com/include/showpage.php?cat=linux&page=ipsec-x509
- http://vpn.ebootis.de/
C'est fini ?
Comme promis, j'ai rajouté la section sur la génération de certificats X.509 bien que je sois pas l'auteur de la procédure, je remercie donc encore une fois Sylvain pour avoir partagé son expérience et m'avoir permis de publier l'article.