« Mise en place d'un VPN avec OpenVPN » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Ligne 6 : Ligne 6 :
<pre>aptitude install openssl</pre>
<pre>aptitude install openssl</pre>


Ce tutoriel suppose que vous avez déjà mis en place une autorité de certification. Pour être précis, j'ai utilisé une autorité root, un autorité intermédiaire onyxCA, et enfin, une autorité vpnCA qui sera chargée de délivrer les certificats serveur et clients openvpn :
Ce tutoriel suppose que vous avez déjà mis en place une autorité de certification. Pour être précis, j'ai utilisé une autorité root root_ca, une première autorité intermédiaire onyx_ca, et enfin, une seconde autorité intermédiaire vpn_ca qui sera chargée de délivrer les certificats serveur et clients openvpn :
<pre>
<pre>
rootCA
root_ca
  |-onyxCA
  |-onyx_ca
   |-vpnCA
   |-vpn_ca
     |-serveurVPN
     |-serveurVPN
     |-clientsVPN
     |-clientsVPN

Version du 15 février 2011 à 19:46


Prérequis

Pour commencer, il faut avoir installé openssl. Si ce n'est pas déjà fait :

aptitude install openssl

Ce tutoriel suppose que vous avez déjà mis en place une autorité de certification. Pour être précis, j'ai utilisé une autorité root root_ca, une première autorité intermédiaire onyx_ca, et enfin, une seconde autorité intermédiaire vpn_ca qui sera chargée de délivrer les certificats serveur et clients openvpn :

root_ca
 |-onyx_ca
   |-vpn_ca
     |-serveurVPN
     |-clientsVPN
  • Le certificat de l'autorité root est /etc/ssl/root_ca/root_ca.pem
  • Le certificat de l'autorité onyx est /etc/ssl/onyx_ca/onyx_ca.pem
  • Le certificat de l'autorité vpn est /etc/ssl/vpn_ca

Pour de l'aide quant à la création de l'architecture d'une autorité de certification, rendez vous ici.

Installation

Installez openvpn avec aptitude :

aptitude install openvpn

=Configuration du serveur openvpn⁼

Génération des certificats

Modifiez votre fichier /etc/ssl/openssl.cnf :

[VPN_SERVER]
nsComment                       = "VPN Server Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth

Nous allons maintenant générer le certificat du serveur openvpn puis le signer avec notre autorité vpn_ca :

openssl req -nodes -newkey rsa:2048 -keyout vpn.csnu.org.key -out vpn.csnu.org.req
openssl ca -name vpn_ca -extensions VPN_SERVER -in vpn.csnu.org.req -out vpn.csnu.org.pem

Puis générez votre clé Diffie-Hellman de 2048 bits:

openssl dhparam -out dh2048.pem 2048

Déplacez ces fichiers dans /etc/openvpn/ssl/ :

mkdir /etc/openvpn/ssl
mv vpn.csnu.org.* /etc/openvpn/ssl/
mv dh2048.pem /etc/openvpn/ssl/

Créez le fichier contenant la chaine de certification :

cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem /etc/ssl/vpn_ca/vpn_ca.pem > /etc/openvpn/ssl/ca_chain.pem

Nous allons enfin générer une clé TLS pour bloquer les attaques DoS ainsi que le floot UDP en créant un firewall HMAC :

openvpn --genkey --secret /etc/openvpn/ssl/ta.key

Configuration de openvpn

Des exemples de configurations pour le serveur et le client openvpn se trouvent dans /usr/share/doc/openvpn/examples. Sur votre serveur, copiez l'exemple de configuration dans /etc/openvpn/ :

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip /etc/openvpn/server.conf.gz

Voici par exemple mon fichier de configuration :

local 178.33.250.38
port 1194
proto udp
dev tun

#configuration ssl 
ca /etc/openvpn/ssl/ca_chain.pem
cert /etc/openvpn/ssl/vpn.csnu.org.pem
key /etc/openvpn/ssl/vpn.csnu.org.key
dh /etc/openvpn/ssl/dh2048.pem

#on va attribuer les ips vpn en 10.8.0.X
server 10.8.0.0 255.255.255.0

#stocker l'association entre un client et l'ip vpn. Ainsi, quand un client se reconnecte, il conservera la même ip vpn.
ifconfig-pool-persist ipp.txt

#la route doit être l'ip externe du serveur (si on veut utiliser la connexion de ce serveur)
;push "route 178.33.250.38 255.255.255.0"
#De même, force le client a rediriger son trafic vers le vpn (il faudra aussi faire un nat du range vpn (10.8.) vers internet (178.33.250.38)
;push "redirect-gateway def1 bypass-dhcp"

tls-auth /etc/openvpn/ssl/ta.key 0
comp-lzo
max-clients 10
user nobody
group nogroup
log-append  /var/log/openvpn.log

Définissez bien-sur l'ip de votre serveur à la ligne local. Vous noterez aussi que pour l'instant, la redirection du trafic (les lignes push) est désactivé.

Configuration du client openvpn

Tout d'abord, ajouter les lignes suivantes dans votre fichier /etc/ssl/openssl.cnf :

[VPN_CLIENT]
nsComment                       = "VPN CLIENT Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                   = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation
nsCertType                      = client
extendedKeyUsage                = clientAuth

Générez et signez le certificat :

openssl req -nodes -newkey rsa:2048 -keyout client.key -out client.req
openssl ca -name vpn_ca -extensions VPN_CLIENT -in client.req -out client.pem

Récupérez les fichiers client.key et client.pem sur votre ordinateur, ainsi que le certificat de votre autorité root, et le fichier /etc/openvpn/ssl/ta.key. Placez les à l'abri dans un répertoire en limitant un maximum les droits (dans l'idéal, laissez juste les droits de lecteur à votre utilisateur).

KDE4 et networkmanager

Sur votre ordinateur, installez le paquet network-manager-openvpn-kde. Les dépendances nécessaires devraient s'installer.

Cliquez sur l'icone de networkmanager puis cliquez sur gérer les connexions.
Dans l'onglet VPN cliquez sur Ajouter puis sur OpenVPN.

Onglet OpenVPN

La passerelle est l'ip/hostname de votre serveur (celle que vous avez défini à la ligne local de la configuration de openvpn sur votre serveur). Les certificats à utiliser sont ceux que vous avez rapatrié juste avant.

Dans l'onglet Paramètres optionnels cochez la case compression lzo Dans l'onglet Paramètres TLS optionnels cochez la case utilisez une authentification TLS supplémentaire puis entrez le chemin vers la clé ta.key dans le champ Clé. Dans Direction de la clé sélectionnez 1.

Onglet Adresse IP

Cliquez sur la barre déroulante indiquant Réglage de base et sélectionnez Routes. Cochez la case Utilisez uniquement pour les ressources de cette connexion.