Installation d’un serveur VPN STRONGSWAN et d’un client THE GREENBOW
Pré requis :
Serveur :
Une machine comportant deux cartes réseau compatibles avec Linux.
Linux Redhat 8 installé et mis à jour avec GRUB comme chargeur de démarrage.
Cette machine accède bien à Internet et route la trafic du réseau local
(1).
Une adresse IP fixe sur la connexion Internet de cette passerelle.
Les RPMS de STRONGSWAN téléchargés sur le site http ://www.lamerzklan.de/~eldoc/strongswan/
On
a besoin du paquet RPM du kernel correspondant au processeur de la machine,
ici, j’ai utilisé le RPM kernel-2.4.26-4.ipsec.i386.rpm et des commandes
de STRONGSWAN strongswan-userland-2.0.2-rh8.i386.rpm.
Client :
Un
PC en Windows.
Le client VPN THE GREENBOW ( http ://www.thegreenbow.fr/vpn_down.html )
v2.50 et l’outil appelé « certificate » pour extraire les certificats
créés sur le serveur Linux.
Schéma de l’architecture :

Installation :
Serveur :
On installe le nouveau kernel compilé avec ipsec par la commande « rpm –ivh kernel-2.4.26-4.ipsec.i386.rpm ».
On vérifie ensuite dans le fichier grub.conf que c’est bien ce noyau qui va être démarré par défaut, ce qui n’est pas le cas en général. Corrigez le fichier en conséquence.
Modifiez le paramètre « default=x » par la valeur correspondante à l’ordre de votre noyau ipsec.
Installez ensuite le paquet strongswan-userland-2.0.2-rh8.i386.rpm avec la commande « rpm –ivh strongswan-userland-2.0.2-rh8.i386.rpm ».
Vérifiez avec la commande « ntsysv » que le démon ipsec est
coché pour démarrer au boot de la machine, puis rebootez sur votre nouveau
noyau.
Client :
On lance l’exécutable d’installation « thegreenbow_vpn_client_250.exe », et on suit l’assistant.
Configuration :
Configuration du serveur STRONGSWAN :
J’ai utilisé la documentation du site de NAT CARLSON (http ://www.natecarlson.com/linux/ipsec-x509.php )
pour configurer les certificats.
STONGSWAN qui est un FORK de FREESWAN du même genre que OPENSWAN sur lequel
est basé cette documentation.
Installation de votre Certificate Authority :
1) Ouvrez le fichier /usr/share/ssl/openssl.cnf dans votre éditeur préféré.
Ce fichier contient des valeurs par défaut pour la génération de certificats
OpenSSL.
Nous allons changer les options suivantes:
'default_days ':
C'est la durée, en jours, durant laquelle vos certificats seront valides,
et la valeur par défaut est de 365 jours, soit 1 an.
Je placer cette valeur à '3650 ', ce qui donnera 10 ans de validité à notre
certificats.
Puisque c'est pour l'usage interne, je suis assez confiant sur les risques
de sécurité encourus d'avoir un certificat valide pendant longtemps - si
vous le perdez ou autre, vous pouvez le révoquer sans problème.
La section '[ req_distinguished_name ] ':
Vous n’avez pas vraiment « besoin » de changer les options au-dessous
du req_distinguished_name; ce ne sont que des valeurs par défaut (telles
que le lieu, le nom de compagnie, etc..) pour la génération de certificat.
Je trouve plus facile de les renseigner ici que de les retaper à chaque création
de certificat.
2) créez un dossier pour stocker votre CA. J'emploie généralement quelque
chose comme/var/sslca; vous pouvez employer le nom que vous voulez.
Changez les permissions du dossier en 700, de sorte que les gens ne
puissent pas accéder aux clefs privées auxquelles ils ne sont pas supposés
accéder.
3) Éditez le script /usr/share/ssl/misc/CA, et mettez la ligne qui
indique 'DAYS="days 365 "' à un nombre très élevé (ceci
indique combien de temps le certificat de l'autorité de certificat est valide.)
Soyez sûr que ce nombre est plus haut que la valeur de l’étape 1; ou bien
Windows peut ne pas accepter vos certificats. Notez que si ce nombre est
trop haut, il peut poser des problèmes - je le place généralement entre 15-20
ans.
4) lancez la commande 'CA -newca '.
Renseignez les questions posées avec l’aide des exemples ci-dessous en modifiant
les valeurs qui vous concernent.
L'entrée d'exemple est en rouge, et les commentaires sont en bleu.
Soyez sûr de n'employer aucun caractère non-alphanumérique, tel que des tirets,
des virgules, des signes +, etc... Ces caractères peuvent rendre les choses
plus difficiles.
nate@example:~/sslca$ /usr/share/ssl/misc/CA
-newca
CA certificate
filename (or enter to create)
(enter)
Making
CA certificate ...
Using configuration
from /usr/lib/ssl/openssl.cnf
Generating
a 1024 bit RSA private key
.............................................................................+++
........................................+++
writing
new private key to './demoCA/private/./cakey.pem'
Enter PEM
pass phrase: (entrez le mot de passe) C'est le mot
de passe dont vous aurez besoin pour créer tous les autres certificats.
Verifying
password - Enter PEM pass phrase:(répétez le mot de passe)
-----
You are
about to be asked to enter information that will be incorporated
into your
certificate request.
What you
are about to enter is what is called a Distinguished Name or a DN.
There are
quite a few fields but you can leave some blank
For some
fields there will be a default value,
If you
enter '.', the field will be left blank.
-----
Country
Name (2 letter code) [AU]: US(enter) Écrivez votre
code de pays ici, FR pour France
State or
Province Name (full name) [Some-State]: State(enter) Écrivez votre
etat/province ici, par exemple Midi-Pyrenees
Locality
Name (eg, city) []:City(enter) Entrez le
nom de votre ville ici
Organization
Name (eg, company) [Internet Widgits Pty Ltd]: ExampleCo(enter) Écrivez votre
nom de compagnie ici (ou laissez le blanc)
Organizational
Unit Name (eg, section) []:(enter) OU, comme
vous voulez. Je le laisse habituellement vide.
Common
Name (eg, YOUR name) []:CA(enter) Le nom de
votre Certificate Authority
Email Address
[]:ca@example.com(enter) Adresse Email
nate@example:~/sslca$
Créons également un fichier crl, dont vous aurez besoin sur votre passerelle
:
nate@example:~/sslca$ openssl ca
-gencrl -out crl.pem
Vous devrez mettre à jour ce fichier CRL à chaque fois que vous révoquerez
un certificat.
C'est fait, vous avez maintenant votre propre Certificate Authority que vous
pouvez employer pour produire des certificats.
Maintenant, vous devrez produire d'un certificat
pour chaque machine qui établira une connexion IPSec. Ceci inclut la passerelle,
et chacune de vos machines clientes.
Ce paragraphe détaille comment créer un certificat, et le convertir en format
nécessaire à Windows.
Générer un certificat pour la passerelle :
Encore une fois, nous emploierons le script CA.
Cette fois, au lieu de lui demander de créer un nouveau « Certificate
Authority », nous lui demandons de signer un certificat:
nate@example:~/sslca$ /usr/share/ssl/misc/CA
-newreq
Using configuration
from /usr/lib/ssl/openssl.cnf
Generating
a 1024 bit RSA private key
...................................+++
...............................+++
writing
new private key to 'newreq.pem'
Enter PEM
pass phrase: (entrez le mot de passe) Mot de passe
pour chiffrer la nouvelle clef privée du certificat - vous en aurez besoin!
Verifying
password - Enter PEM pass phrase:(répétez le mot de passe)
-----
You are
about to be asked to enter information that will be incorporated
into your
certificate request.
What you
are about to enter is what is called a Distinguished Name or a DN.
There are
quite a few fields but you can leave some blank
For some
fields there will be a default value,
If you
enter '.', the field will be left blank.
-----
Country
Name (2 letter code) [AU]:US(enter)
State or
Province Name (full name) [Some-State]:State(enter)
Locality
Name (eg, city) []:City(enter)
Organization
Name (eg, company) [Internet Widgits Pty Ltd]:ExampleCo(enter)
Organizational
Unit Name (eg, section) []:(enter)
Common
Name (eg, YOUR name) []:host.example.com(enter) Ceci peut être
un hostname, un vrai nom, une adresse de E-mail, ou n’importe quoi d’autre.
Email Address
[]:user@example.com(enter)
(facultatif)
Please
enter the following 'extra' attributes
to be sent
with your certificate request
A challenge
password []:(enter)
An optional
company name []:(enter)
Request
(and private key) is in newreq.pem
Ce que nous venons de faire est de générer une demande de certificat - c'est
le même type de demande que vous enverriez à Thawte ou à Verisign pour obtenir
un certificat généralement utilisé pour SSL. Pour notre usage, cependant,
nous le signerons avec notre propre CA:
nate@example:~/sslca$ /usr/share/ssl/misc/CA -sign
Using configuration
from /usr/lib/ssl/openssl.cnf
Enter PEM
pass phrase: (mot de passe que vous avez entré en créant le ca)
Check
that the request matches the signature
Signature
ok
The Subjects
Distinguished Name is as follows
countryName
:PRINTABLE:'US'
stateOrProvinceName
:PRINTABLE:'State'
localityName
:PRINTABLE:'City'
organizationName
:PRINTABLE:'ExampleCo'
commonName
:PRINTABLE:'host.example.com'
emailAddress
:IA5STRING:'user@example.com'
Certificate
is to be certified until Feb 13 16:28:40 2012 GMT (3650 days)
Sign the
certificate? [y/n]:y(enter)
1 out of
1 certificate requests certified, commit? [y/n]y(enter)
Write out
database with 1 new entries
Data Base
Updated
(certificat élagué)
Signed
certificate is in newcert.pem
Ensuite, renommez les fichiers créés en noms qui auront plus de sens pour notre usage futur.
nate@example:~/sslca$ mv newcert.pem host.example.com.pem
nate@example:~/sslca$
mv newreq.pem host.example.com.key
C’est tout ce qui est nécessaire de faire pour les passerelles Openswan -
Vous aurez besoin de ces deux fichiers ainsi que du fichier 'cacert.pem'
créé dans le dossier 'demoCA', et du fichier 'crl.pem' généré plus tôt, mais
je détaillerai ceci plus tard.
Création d’un certificat pour le client Greenbow Windows :
La création du certificat du client se fait exactement de la même manière
que pour la passerelle.
Utilisez par contre winhost.example.com,
au lieu de host.example.com dans la procédure afin de distinguer les certificats.
Il faut ensuite convertir ce certificat au format p12 reconnu par Windows.
$ openssl pkcs12 -export -in winhost.example.com.pem
-inkey winhost.example.com.key -certfile demoCA/cacert.pem -out winhost.example.com.p12
Installation des certificats :
1) Installez les fichiers à leur endroit respectifs (créez les dossiers de
destination si le RPM ne l’a pas fait pour vous).
$ cp /var/sslca/host.example.com.key /etc/ipsec.d/private
$ cp /var/sslca/host.example.com.pem
/etc/ipsec.d/certs
$ cp /var/sslca/winhost.example.com.key
/etc/ipsec.d/private
$ cp /var/sslca/winhost.example.com.pem
/etc/ipsec.d/certs
$ cp /var/sslca/demoCA/cacert.pem
/etc/ipsec.d/cacerts
$ cp /var/sslca/crl.pem
/etc/ipsec.d/crls/crl.pem
Une fois que vous avez créé le certificat p12 du client Windows, copiez le sur une disquette (2)
Configurer
Openswan sur la passerelle :
Pour info, ma machine de test s’appelle fw2.caplaser.net et j’ai
créé les
certificats avec ce nom. Adaptez les lignes suivantes à votre cas.
Configuration du fichier ipsec.secrets :
Ajoutez la ligne suivante au fichier /etc/ipsec.secrets :
:
RSA host.example.com.key "password"
Le mot de
passe indiqué ici est le mot de passe utilisé lors de la création du certificat
SSL.
Voici le fichier ipsec.secrets résultant de mes tests où j’ai supprimé le contenu du certificat de base qui prend pas mal de placeJ.
: RSA {
# RSA 2192 bits fw2.caplaser.net Fri
Sep 24 13 :26 :26 2004
#
for signatures only, UNSAFE FOR ENCRYPTION
#tout un tas
de trucs déjà en place et à ne pas supprimer car la commnde “ipsec verify”
n’aime pas du tout ça…
}
#
do not change the indenting of that « } »
#
La ligne que j’ai ajouté
: RSA fw2.caplaser.net.key "password"
Configuration
du fichier ipsec.conf :
Voici mon fichier /etc/ipsec.conf
# /etc/ipsec.conf – strongSwan Ipsec configuration file
# RCSID $Id : ipsec.conf.in,v 1.2 2004/03/15 21 :03 :06
as Exp $
# This file : /usr/share/doc/freeswan/ipsec.conf-sample
#
# Manual : ipsec.conf.5
#
# Help :
# http://www.strongsec.com/freeswan/install.htm
version 2.0 # conforms to second version of ipsec.conf
specification
# basic configuration
config setup
interfaces=%defaultroute
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:172.16.0.0/12,%v4:192.168.0.0/16
# Debug-logging controls :«none» for (almost) none,«all» for
lots.
Klipsdebug=none
plutodebug=none
# crlcheckinterval=600
#
strictcrlpolicy=yes
conn %default
keyingtries=1
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
#
OE policy groups are disabled by default
conn block
auto=ignore
conn clear
auto=ignore
conn private
auto=ignore
conn private-or-clear
auto=ignore
conn clear-or-private
auto=ignore
conn packetdefault
auto=ignore
# Add connections here.
Conn roadwarrior-net
leftsubnet=192.168.1.0/24
also=roadwarrior
conn
roadwarrior
left=%defaultroute
leftcert=fw2.caplaser.net.pem
right=%any
rightsubnet=vhost:%no,%priv
auto=add
pfs=yes
Démarrer le service ipsec :
Une fois configuré, on peut démarrer le service ipsec, avec la commande :
/etc/init.d/ipsec
restart
J’utilise restart au lieu de start, car le RPM active le service ipsec et on
a déjà rebooté la machine. Le service ipsec est donc normalement déjà en fonctionnement
avec la conf par défaut.
Les Logs de Strongswan se trouvent dans /var/log/secure.
Ces derniers vous indiqueront si vous avez des problèmes de configuration.
(1)
Vérifiez que la valeur net.ipv4.ip_forward dans le fichier /etc/sysctl.conf soit bien à 1.
Si ce n’est pas le cas, modifiez la et tapez la commande :
/etc/init.d/network restart
Vérifiez également que le MASQUERADE est bien actif pour le traffic de votre
réseau local sortant vers internet, sinon, tapez les commandes :
iptables –t nat –A POSTROUTING –o
eth0 –j MASQUERADE
iptables-save > /etc/sysconfig/iptables
Attention, remplacer eth0 par l’interface qui est sur Internet pour votre
machine, par exemple ppp0 pour de l’adsl .
Reportez vous à une documentation sur le routage et le firewall si vous avez
besoin de plus d’informations à ce sujet.
(2) commandes utiles :
mount
/mnt/floppy
copy mon_certificat.p12 /mnt/floppy
umount /mnt/floppy
Configuration du client VPN THE GREENBOW :
Créez les certificats nécessaires à partir du fichier p12 copié précédemment à partir du serveur et copiez les dans le dossier de votre choix ( cf doc http://www.thegreenbow.fr/doc/greenbow-x509.pdf ).
Lancer l’icône
présente sur votre bureau
Windows et vous verrez apparaître cette icône bleue en bas de votre écran
.
Faites un clic droit sur l’icône et sélectionnez « Connexions ».
Créez une nouvelle phase 1 en modifiant l’adresse 213.190.70.35 par l’adresse ip fixe Internet de votre passerelle Linux :

Sélectionnez « Certificat » et importez les certificats que vous
venez de créer avec l’utilitaire « certificate » comme indiqué dans
la documentation de ce dernier.
Cliquez sur le bouton « Avancé… » et faites un copier coller de
la valeur « DER ASN1 DN » créée par « certificate ».

Créez ensuite une phase 2 comme ceci :

Une fois les paramètres sauvés, vous pouvez cliquer sur « Ouvrir le tunnel ».
Ce dernier devrait monter correctement.
En cas de messages d’erreur, jetez un œil sur la doc suivante : http://www.thegreenbow.fr/doc/vpn_troubleshooting_en.pdf
Une fois connecté, vous pouvez pinguer les machines de votre réseau local distant.