Intitulé du document : Comment installer/configurer un serveur VPN avec OpenVPN ?
Localisation : http://www.opendoc.net/comment-installer-configurer-serveur-vpn-openvpn
Auteur : Alexandre Bray
Vos questions : support@opendoc.net
Date de création : 2010/05/20
Date de modification : 2010/09/26
source : Professionnel
http://fr.wikipedia.org/wiki/OpenVPN
Tags :
Etat de la documentation : 90% completed
Vous souhaitez contribuer : Comment soutenir opendoc ?
Informations : Quelle est notre démarche ?
Licence : Contrat Creative Commons
opendoc.net est mis à disposition selon les termes de la licence Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage à l'Identique 3.0 non transcrit.

Comment installer/configurer un serveur VPN avec OpenVPN ?

1 Introduction

OpenVPN permet à des pairs de s'authentifier entre eux à l'aide d'une clé privée partagée à l'avance, de certificats ou de couples de noms d'utilisateur/mot de passe. Il utilise de manière intensive la bibliothèque d'authentification OpenSSL ainsi que le protocole SSLv3/TLSv1. Disponible sous Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X, Windows 2000, XP et Vista, il offre aussi de nombreuses fonctions de sécurité et de contrôle. OpenVPN n'est pas compatible avec IPsec ou d'autres logiciels VPN. Le paquet tout entier contient un binaire pour les connexions du client et du serveur, un fichier de configuration optionnel et une ou plusieurs clés suivant la méthode d'authentification choisie.

Cette documentation décrira un mode opératoire pour la réalisation de tunnels sous OpenVPN. La particularité et de proposer une solution intégralement routée afin de pourvoir réaliser du filtrage client → serveur ou client → client avec Iptables.

2 Contexte

Le contexte de réalisation du projet peut être assimilé a un besoin d'un petite structure concernant la connexion de plusieurs sites. Imaginons une petite structure d'une vingtaine de personnes. Le “SITE 1” serait le bâtiment principal avec les utilisateurs et serveurs. Le “SITE 2” serait une filiale avec des utilisateurs s'appuyant sur la GED 1) hébergé sur le “SITE 1”. Enfin des commerciaux, mobiles, travailent à distance avec leurs pc et synchronisent leurs agenda avec leurs smartphone (calDAV sous Android). C'est un besoin concret en terme flexibilité et de sécurité.

##########                                       ##########
# SITE 1 #                                       # SITE 2 #      
##########                                       ##########
               Utilisateurs                                      Utilisateurs   +---------------+
                                                                                | SRV ARCHIVAGE |
LAN             #  #  #  #                       LAN2             #  #  #       +--------+------+
192.168.24.0/24 |  |  |  |                       192.168.26.0/24  |  |  |                |
   +------------+--+--+--+                             +----------+--+--+----------------+
   |                                                   |
   |                                                   |
   |      +-------+     +--------+                     | 
   |      | SUP 1 |     | BACKUP |                     |
   |      +---+---+     +---+----+                     |
 ,-:-.        |.8           |.10                     ,-:-.
(  X  )-------+-------------+                       (  X  )
 `-:-' DMZ                                           `-:-'
   |   192.168.25.0/24                                 |
   |                                                   |                    
   |                                                   | 
   |               mmmmm           m                                  m
   |                 #    m mm   mm#mm   mmm    m mm  m mm    mmm   mm#mm 
   + --------------  #    #"  #    #    #"  #   #"  " #"  #  #"  #    #              +----------------+ 
                     #    #   #    #    #""""   #     #   #  #""""    #   -----------+ SITE MONOPOSTE |    Linux
                   mm#mm  #   #    "mm  "#mm"   #     #   #  "#mm"    "mm            +----------------+    Windows
                                                                                     192.168.242.5         Mac
                                                                                                           Smartphone  
                                                            
                                                                             

3 Installation

Vous trouverez ici quelques informations sur l'installation et d'OpenVPN sur différentes distribution.

3.1 Windows : installation client

Commentaires Support visuel
1- Ouvrez une session administrateur
- Télécharger l'exécutable sur le site openvpn
2- Débuter l'installtion en double cliquant sur l'application.
- Cliquer sur Next >
3- Accepter la licence
- Cliquer sur I Agree
4- Sélectionner les éléments suivant à installer :
- OpenVPN User-Space Components
- OpenVPN GUI
- OpenVPN Service
- OpenVPN FIle Associations
- OpenSSL DLLs
- OpenSSL Utilities
- TAP-Win32 Virtual Ethernet Adaptater
- Add OpenVPN to PATH

- Cliquez sur Next >
5- Le répertoire d'installation par défaut est
C:\Program Files\OpenVPN

- Cliquer sur Install
6- Installer l'interface virtuelle pour OpenVPN
- Cliquez sur Continuer
7- OpenVPN est opérationnel.
- Cliquer sur Next > puis Finish


3.2 Linux : Installation client et/ou serveur

Cette installation peut être utilisée pour une installation serveur

  • Debian : apt-get install openvpn
  • CentOs : yum install openvpn

3.3 Android : Installation client

en cours …

3.4 Mac : Installation Client

4 Easy-rsa (Génération CA CRT KEY)

infos : si vous installez openvpn depuis les packages de votre distribution, easy-rsa sera généralement installé avec.

Vous trouverez ici différents éléments nécessaires pour la création de la CA, CRT, KEY. Pour cela j'utilise Easy-rsa. Les puristes détesteront cette méthode mais elle simplifie grandement la gestion des certificats clients.

Action Support
copier le répertoire d'easy-rsa
 cp -av /usr/share/doc/openvpn/examples/easy-rsa /home/admin 
editer le fichier vars
cd 2.0
vim vars
export KEY_COUNTRY="FR"
export KEY_PROVINCE="IDF"
export KEY_CITY="PARIS"
export KEY_ORG="TEST"
export KEY_EMAIL="contact@test.com"
inclure les variables
source ./vars
création de la CA
 ./clean-all 
/tmp/easy-rsa/2.0$ 
./build-ca 
Generating a 1024 bit RSA private key
...++++++
................++++++
writing new private key to 'ca.key'
-----
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) [FR]:
State or Province Name (full name) [IDF]:
Locality Name (eg, city) [PARIS]:
Organization Name (eg, company) [TEST]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [TEST CA]:
Name []:
Email Address [contact@test.com]:
création du DIFFIE-HELLMAN
./build-dh 
Generating DH parameters, 1024 bit long safe prime, generator 2 |
signé le CSR
./sign-req mycert
créer une paire de clés pour un server openvpn
./build-key-server server
Generating a 1024 bit RSA private key
..........++++++
................................................................................................++++++
writing new private key to 'server.key'
-----
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) [FR]:
State or Province Name (full name) [IDF]:
Locality Name (eg, city) [PARIS]:
Organization Name (eg, company) [test]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [contact@test.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /home/alex/tmp/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'FR'
stateOrProvinceName   :PRINTABLE:'IDF'
localityName          :PRINTABLE:'PARIS'
organizationName      :PRINTABLE:'test'
commonName            :PRINTABLE:'server'
emailAddress          :IA5STRING:'contact@test.com'
Certificate is to be certified until Jun 12 15:51:45 2020 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
création d'un paire de clés pour un client openvpn
 ./build-key client1
Generating a 1024 bit RSA private key
.........................++++++
......................++++++
writing new private key to 'client1.key'
-----
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) [FR]:
State or Province Name (full name) [IDF]:
Locality Name (eg, city) [PARIS]:
Organization Name (eg, company) [test]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Name []:
Email Address [contact@test.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /home/alex/tmp/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'FR'
stateOrProvinceName   :PRINTABLE:'IDF'
localityName          :PRINTABLE:'PARIS'
organizationName      :PRINTABLE:'test'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'contact@test.com'
Certificate is to be certified until Jun 12 16:01:32 2020 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Vous pouvez maintenant créer autant de client que vous le souhaitez !

5 Configuration serveur

5.1 Principe de fonctionnement

Le serveur OpenVPN doit posséder les éléments suivant :

  • une adresse publique joignable : soit directement soit indirectement mais pour cela n'oublier pas de NATer le port de destination vers votre machine.
  • un port d'écoute : OpenVPN peux écouter sur n'importe quel port TCP ou UDP. Cependant la force d'OpenVPN est d'être du vpn SSL. Cela signifie qu'OpenVPN s'appuie sur des éléments déjà existant (SSL3/TLS1) pour appliquer son système de tunnels. Faisons court, par ce principe une connexion de type OpenVPN peut être vu au yeux du monde comme une simple connexion SSL à partir du moment où le port d'écoute du serveur est 443 (HTTPS). Il est donc possible d'établir une connexion OpenVPN à partir de n'import quel réseau source laissant “passer” le https.
  • un jeux de clés et certificats : cela est conforme au fonctionnement du SSL/TLS
  • une configuration valide de type “serveur”
  • une configuration valide de type “client”

5.2 Fichier de configuration

Voici une configuration type qui doit se trouvé dans /etc/openvpn/openvpn.conf :

daemon
local 192.168.XXX.XXX
port 443
proto tcp-server 
dev tun
up /etc/openvpn/cmd/up.sh 
ca   /etc/openvpn/keys/ca.crt 
cert /etc/openvpn/keys/test.crt
key  /etc/openvpn/keys/test.key
dh   /etc/openvpn/keys/dh1024.pem
mode server
tls-server
ccd-exclusive
client-config-dir /etc/openvpn/ccd
keepalive 2 120
cipher DES-CBC
comp-lzo
max-clients 15 
user nobody
group nobody
persist-key
persist-tun
status /var/state/openvpn.status
verb   4
Options Descriptions
daemon Fonctionne en mode “démon”, cela permet d'être lancé par le système
local Indique l'adresse ip d'écoute. Elle peut être publique ou privé mais attention au DNAT
port Port d'écoute
mode server
tls-server
proto tcp-server
Permet de définir un mode de fonctionnement de type serveur
dev tun Permet d'imposer l'inferface de connexion de type tun
up Permet de définr dans un fichier les routes a ajouter (le contenu de ce fichier sera décrit dans la suite du document)
ca
cert
key
dh
Vous devez ici faire correspondre vos fichiers que vous avez générés auparavant.
ccd-exclusive Permet d'imposer une condition d'authentification.
client-config-dir /etc/openvpn/ccd Permet de définir un emplacement qui contiendra l'ensemble des informations propres au client.
status /var/state/openvpn.status Fichier très utile pour vous permettre de statuer sur les connexions actives de votre vpn
verb 4 Permet d'activer le mode verbeux. Plus le chiffre associé est grand plus les logs sont précis.

5.3 Gestion des clients

Si vous avez bien suivie la procédure, à cette étape votre serveur vpn sous OpenVPN doit pouvoir démarrer et être en écoute. Nous allons voir maintenant comment configurer votre serveur afin que des clients puissent s'y connecter.
Placez vous dans le répertoire /etc/openvpn/ccd et créer un fichier qui portera le même que celui du client créé avec EasyRSA, exemple :

vim client1

Je vais vous présenter 2 type de fichier de configuration. Une simple mais qui ne fonctionne que sous linux et une autre plus complexe mais qui fonctionne pour tous les type d'OS et donc compatible Windows.

5.3.1 Configuration 1

ifconfig-push adresse-ip-client adresse-ip-passerelle-openvpn
push "route adresse-réseau masque adresse-ip-passerelle"

Prenons par exemple un réseau vpn en 192.168.243.0/24 avec comme adresse de passerelle openvpn 192.168.243.254 et comme adresse client 192.168.243.100

ifconfig-push 192.168.243.100 192.168.243.254
push "route 192.168.243.0 255.255.255.0 192.168.243.254"

5.3.2 Configuration 2

La configuration est un peu plus complexe car il faut créer un réseau par client. Le plus simple est donc de créer un réseau en /30 pour avoir :

  1. 1 adresse réseau
  2. 2 adresses ip valides (client, passerelle)
  3. 1 adresse de diffusion.

Je vous conseil de vous aider d' ipcalc. Pour cela prenez votre adresse réseau (192.168.242.0) et appliquez lui un /30. Cela vous permettra de définir votre premier réseau pour votre premier client.

ipcalc 192.168.242.0/30
Address:   192.168.242.0        11000000.10101000.11110010.000000 00
Netmask:   255.255.255.252 = 30 11111111.11111111.11111111.111111 00
Wildcard:  0.0.0.3              00000000.00000000.00000000.000000 11
=>
Network:   192.168.242.0/30     11000000.10101000.11110010.000000 00
HostMin:   192.168.242.1        11000000.10101000.11110010.000000 01
HostMax:   192.168.242.2        11000000.10101000.11110010.000000 10
Broadcast: 192.168.242.3        11000000.10101000.11110010.000000 11
Hosts/Net: 2                     Class C, Private Internet

Comme vous pouvez le constater vous avez toutes les informations nécessaires. Le prochain réseau sera en 192.168.242.4/30

ipcalc 192.168.242.4/30
Address:   192.168.242.4        11000000.10101000.11110010.000001 00
Netmask:   255.255.255.252 = 30 11111111.11111111.11111111.111111 00
Wildcard:  0.0.0.3              00000000.00000000.00000000.000000 11
=>
Network:   192.168.242.4/30     11000000.10101000.11110010.000001 00
HostMin:   192.168.242.5        11000000.10101000.11110010.000001 01
HostMax:   192.168.242.6        11000000.10101000.11110010.000001 10
Broadcast: 192.168.242.7        11000000.10101000.11110010.000001 11
Hosts/Net: 2                     Class C, Private Internet

A partir de ces informations, vous allez pouvoir créer votre fichier de configuration. Toujours dans le répertoire ccd créer un fichier correspondant au nom de votre client et y indiquer les informations suivantes :

ifconfig-push 192.168.242.5 192.168.246.6
iroute 192.168.242.4 255.255.255.252
push "redirect-gateway  192.168.242.6  255.255.255.252"
push "route 192.168.242.4 255.255.255.252"

quelques explications :

  • ifconfig-push : spécifie l'adresse ip ainsi que la passerelle comme vu précédemment
  • iroute : permet au serveur vpn l'apprentissage du réseau
  • redirect-gateway : permet de spécifier au système du client que tous les flux doivent emprunter cette passerelle. Cela reste bien évidemment une option

6 Gestion du routage

La gestion du routage pour OpenVPN est très simple. Rappelez vous que dans le fichier de configuration principal, un option est déclarée en indiquant un fichier situé dans /etc/openvpn/cmd/up.sh. C'est ce dernier qui va vous permettre de géré correctement vos route. Voici un exemple qui est compatible avec les deux configurations proposées :

#! /bin/bash
ip link set up $1
ip a a 192.168.243.254/32 dev $1
ip r a 192.168.243.0/24 dev $1
ip a a 192.168.242.6/30 dev $1 
ip r a 192.168.242.4/30 dev $1

Il ne vous reste plus qu'a ajouter autant de réseau et de route que de client.

6.1 Cas d'un client mobile

Si vous reprenez le contexte de la documentation. Le client mobile doit avoir une connexion VPN active mais aussi pouvoir avoir accès à la DMZ. Pour cela il faut reprendre la configuation du client qui se trouve dans /etc/openvpn/ccd/ et y ajouter l'information suivante :

push "route 192.168.25.0 255.255.255.0 192.168.242.6"

De cette manière le client sera que pour atteindre le réseaux DMZ il devra passer par la passerelle vpn.

6.2 Routage d'un site distant

Le besoin peut être le suivant :

Le serveur de supervision situé sur le “SITE 1” à besoin de réaliser des accès snmp sur le “SITE 2” afin de recueillir des informations.

D'après le contexte évoqué au début du document, nous allons aborder comment réaliser le routage d'un site distant à travers OpenVPN. Une box sous linux situé sur le “SITE 2” est connecté au serveur VPN comme un client classique avec une configuration de type 1(voir gestion-des-clients). Son adresse ip est côté VPN est 192.168.242.253. SI vous ajouter manuellement des routes avec iproute2 sur votre serveur VPN cela ne fontionnera pas. Il faut faire comprendre à OpenVPN que pour joindre le réseau en 192.168.25.0/25 il faut passer par 192.168.242.253.

Pour cela, dans votre fichier de configuration situé dans /etc/openvpn/ccd veuillez indiquer les informations suivantes :

ifconfig-push 192.168.243.253 192.168.243.254
iroute 192.168.25.0 255.255.255.0
push "route 192.168.243.0 255.255.255.0 192.168.243.254"

7 Configuration client

client
nobind
tls-client
cipher DES-CBC
dev tun
float
pull
comp-lzo
verb 4
#http-proxy X.X.X.X 8080
#http-proxy Y.Y.Y.Y 3128 /etc/openvpn/pwd basic
status  /var/state/openvpn.status
#remote Z.Z.Z.Z
remote votre-domaine.com

dev    tun0
proto  tcp
port   443
ca /etc/openvpn/keys/ca.crt
key /etc/openvpn/keys/client1.key
cert /etc/openvpn/keys/client1.crt

La plupart des informations ont déjà été décrites fichier-de-configuration du serveur. Néanmoins certaines options peuvent être importantes.

Options Descriptions
http-proxy Peut être très utile pour initialiser un tunnel au travers un proxy. Si votre proxy nécessite authentification, vous pouvez indiquer fichier (/etc/openvpn/pwd)qui contiendra le loggin et la mot de passe
/etc/openvpn/pwd le fichier contient :
user
mot-de-passe
remote Indiquez ici l'adresse ip ou le nom de domaine de votre serveur VPN

8 Sécurisation avec Iptables

1) Gestion électronique de documents
solutions/comment-installer-configurer-serveur-vpn-openvpn.txt · Dernière modification: 2013/07/14 17:19 (modification externe)
 
Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki