Installer et configurer un serveur OpenVPN – MAJ 09.02.2016

2 juin 2014 Sécurité 0 Commentaire

Mise à jour : Génération d’une clé 4096-bit et non plus 2048-bit + ajout d’une partie OpenVPN et systemd


OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel (VPN). Utiliser un VPN est entre autre une excellente solution pour contourner les restrictions de certains réseaux (universités, certains pays, etc…). La navigation web au travers d’un VPN est beaucoup plus rapide, confortable et sécurisée en comparaison avec l’utilisation d’un proxy.

Il existe différents protocoles VPN, PPTP IPsec et bien sur OpenVPN qui propose le chiffrement le plus élevé mais aussi de meilleures performances en termes de débit et de stabilité.

Installer et configurer un serveur OpenVPN est synonyme de nombreux avantages :

  • Préserver votre vie privée
  • Assurer votre sécurité
  • Conserver votre liberté
  • Contourner les restrictions internet d’un reseau
  • Se protéger d’Hadopi

 

 

Installation d’OpenVPN

Commençons par installer OpenVPN et OpenSSL

sudo apt-get install openvpn openssl easy-rsa

 

Copiez ensuite les fichiers de configuration des certificats dans le répertoire d’OpenVPN

sudo mkdir /etc/openvpn/easy-rsa/
sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

 

 

Configuration d’OpenVPN

OpenVPN est installé il faut maintenant générer des clefs et des certificats qui permettront a vos utilisateurs de s’authentifier sur votre serveur. Modifions le fichier /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="VOTRE PAYS"
export KEY_PROVINCE="VOTRE DEPARTEMENT"
export KEY_CITY="VOTRE VILLE"
export KEY_ORG="VOTRE.SITE"
export KEY_EMAIL="VOTRE EMAIL"

 

Remplacez

export KEY_SIZE=2048

 

par

export KEY_SIZE=4096

 

Lançons maintenant la génération des clefs et certificats pour le serveur

cd /etc/openvpn/easy-rsa/
. ./vars
./clean-all
./build-dh
./build-ca
./build-key-server server
sudo openvpn --genkey --secret keys/ta.key

 

Copiez maintenant ces clés et certificat s dans le répertoire /etc/openvpn

sudo cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh4096.pem /etc/openvpn/

 

Créez un répertoire /etc/openvpn/jail dans lequel le processus OpenVPN sera chrooté (afin de limiter les dégâts en cas de faille dans OpenVPN) puis un autre répertoire (/etc/openvpn/clientconf) qui contiendra la configuration des clients

sudo mkdir -p /etc/openvpn/jail/tmp/
sudo mkdir /etc/openvpn/clientconf

 

Nous pouvons maintenant creer le fichier de configuration de votre serveur OpenVPN, ici nous avons deux choix :

  • Configurer un serveur vpn sur le port 443 TCP : Masque le tunnel OpenVPN sous les traits d’un trafic « habituel », une session sécurisée HTTPS, comme si vous consultiez un site sécurisé avec votre navigateur.
  • Configurer un serveur vpn sur le port qu’utilise OpenVPN par défaut (1194 en UDP) : A l’avantage d’être un peu plus rapide du fait de l’utilisation du protocole UDP. Le revers de la médaille (il y en a toujours un quelque part) c’est que UDP n’assure aucune correction d’erreur. Donc, dans certaines situations, si votre connexion internet n’est pas irréprochable, ceci peut entraîner une plus grande répétition de paquets, donc une baisse notable de la bande passante apparente.

Créez votre fichier

sudo nano /etc/openvpn/server.conf

 

Dont voici la configuration :

#
# Fichier de configuration du serveur OpenVPN
#

# Serveur
mode server
proto tcp
port 443
dev tun
# Cles et certificats
ca ca.crt
cert server.crt
key server.key # Ce fichier doit être gardé secret
dh dh4096.pem
tls-auth ta.key 1
key-direction 0
cipher AES-256-CBC

# Reseau
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
# Permet aux différentes clients de se contacter entre eux
#client-to-client

# Securite
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
# Décommenter cette option si plusieurs clients utilisent un même certificat
# (sinon l'un des clients sera déconnecté)
#duplicate-cn

# Log
verb 3
mute 20
status openvpn-status.log
; log-append /var/log/openvpn.log

 

Si vous souhaitez configurer un serveur sur le port 1194, modifiez le bloc serveur de la facon suivante

# Serveur
mode server
proto udp
port 1194
dev tun

 

Testez votre configuration en saisissant la commande suivante

cd /etc/openvpn
sudo openvpn server.conf

 

Si Initialization Sequence Complete s’affiche tout va bien et vous pouvez continuer

 

Si le serveur démarre correctement, on peut terminer la configuration sur serveur OpenVPN en décommentant la dernière ligne du fichier /etc/openvpn/server.conf : log-append /var/log/openvpn.log

Vous pouvez maintenant lancer votre serveur (si vous êtes sous Debian 8 et Ubuntu 15.04 ou supérieur, nous reviendrons sur le lancement d’OpenVPN à la fin de ce billet)

sudo /etc/init.d/openvpn start

 

Vous devez maintenant configurer le serveur pour qu’il joue le rôle de routeur entre l’interface VPN (tun0) et l’interface physique (eth0) et de NATeur entre les adresses en 10.8.0.x et son adresse IP réelle.

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

 

Pour que ce paramètre de routage soit permanent il faut éditer le fichier /etc/sysctl.conf et y ajouter la ligne suivante

net.ipv4.ip_forward = 1

 

Vérifiez que cela fonctionne

sudo sysctl -p

 

 

Création d’un client OpenVPN

Nous allons créer un compte pour notre client novakin, lancez les commandes suivante

cd /etc/openvpn/easy-rsa
source vars
./build-key novakin

 

Le script ./build-key va générer 3 fichiers dans le répertoire /etc/openvpn/easy-rsa/keys:

  • novakin.crt: Certificat pour le client
  • novakin.csr: Certificat à garder sur le serveur
  • novakin.key: Clés pour le client

On copie les fichiers nécessaires un sous répertoire du répertoire /etc/openvpn/clientconf/ préalablement créé:

sudo mkdir /etc/openvpn/clientconf/novakin/
sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/novakin.crt keys/novakin.key /etc/openvpn/clientconf/novakin/

 

Rendez vous ,maintenant dans ce répertoire

cd /etc/openvpn/clientconf/novakin/

 

Créez un fichier client.conf (il faut remplacer xxx.xxx.xxx.xxx par l’adresse publique de votre serveur VPN) dont voici la configuration :

# Client
client
dev tun
proto tcp-client
remote xxx.xxx.xxx.xxx 443
resolv-retry infinite
cipher AES-256-CBC
; client-config-dir ccd
# Cles
ca ca.crt
cert novakin.crt
key novakin.key
tls-auth ta.key 1
key-direction 1
# Securite
nobind
persist-key
persist-tun
comp-lzo
verb 3

 

Si vous avez choisi de créer un serveur vpn en udp, il vous faudra configurer votre client de la façon suivante

# Client
client
dev tun
proto udp
remote xxx.xxx.xxx.xxx 1194
resolv-retry infinite
cipher AES-256-CBC
; client-config-dir ccd
# Cles
ca ca.crt
cert novakin.crt
key novakin.key
tls-auth ta.key 1
key-direction 1
# Securite
nobind
persist-key
persist-tun
comp-lzo
verb 3

 

Pour assurer la compatibilité avec le client Windows OpenVPN, copiez le fichier conf vers un fichier ovpn

sudo cp client.conf client.ovpn

 

Dans votre répertoire vous devriez avoir les fichiers suivants

ca.crt: Certificat du serveur
client.conf: Fichier de configuration du client OpenVPN (Linux, BSD, MacOS X)
client.ovpn: Fichier de configuration du client OpenVPN (Windows)
novakin.crt: Certificat du client
novakin.key: Clés du client
ta.key: Clés pour l'authentification

 

Il ne reste plus qu’à mettre ces fichiers dans une archive ZIP et de l’envoyer sur le PC client

sudo zip novakin.zip *.*

 

 

OpenVPN et systemd

Ceci ne concerne que les utilisateurs de Debian 8 (et supérieure) ainsi qu’Ubuntu 15.04 (et supérieure)

À partir de ces versions votre distribution embarque systemd, les procédures de démarrage, d’arrêt, rechargement et de lancement automatique d’OpenVPN ne sont plus les mêmes. Voici les différentes commandes :

# Lancer le serveur OpenVPN (configuration server.conf)
systemctl start openvpn@server.service

# Arrêter le serveur OpenVPN (configuration server.conf)
systemctl stop openvpn@server.service

# Recharger la configuration du serveur OpenVPN (configuration server.conf)
systemctl reload openvpn@server.service

# Lancement automatique du serveur OpenVPN au démarrage (configuration server.conf)
systemctl enable openvpn@server.service

# Désactiver le lancement automatique du serveur OpenVPN au démarrage (configuration server.conf)
systemctl disable openvpn@server.service

 

Sources

Ubuntu-FR
Ubuntu.com
15 Minutes Of fame
Nicolargo