Installer un serveur OpenVPN

Aller zou ! Un petit billet histoire de se mettre en forme sur l’installation d’un serveur OpenVPN. Vous allez voir que c’est assez simple et rapide à mettre en place (j’ai mis au maximum 10 minutes)

[nice_info]Avant toute chose, assurez-vous que vos serveurs qui vont se « VPNer » doivent avoir la même heure pour les certificats, donc utilisez la commande ntpdate 🙂 [/nice_info]

Lisez la suite pour installer ce serveur 🙂

1. Installation du paquet et configuration

Déja nous devons installer le paquet openvpn :

aptitude install openvpn

Nous allons choisir d’utiliser l’authentification sécurisée avec le couple clés/certificats et non l’authentification user/password.

J’ai effectué l’installation sous une Debian Lenny pour ceux qui utilisent Ubuntu c’est les mêmes docs et les mêmes paquets (vous le savez tous :p)

cd /etc/openvpn
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn

Ci-dessus, on a pris les fichiers et scripts disponibles dans les exemples de la documentation openvpn.

Maintenant on se déplace dans le dossier de conf :

cd easy-rsa/

Dans le fichier vars vous devez modifier les lignes suivantes avec vos données :

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"

Une fois modifié, lancez le fichier :

./vars

Ensuite, créez le fichier d’autorité (CA) :

./build-ca

Création de la clé du serveur (nommée server):

./build-key-server server

[nice_info]Laissez toutes les valeurs par défaut sauf la signature (répondez par ‘y’ aux questions de signature et de commit[/nice_info]

Création d’une clé client (machine01)

./build-key machine01

Création d’une clé Diffie Hellman

./build-dh

Augmentation de la sécurité de notre serveur, on va ajouter une signature HMAC sur les paquets « HandShake » c’est à dire lors de l’établissement de la connexion et l’échange de clés :

openvpn --genkey --secret keys/ta.key
Fichier Description
ca.crt Certificat d’autorité de certification( CA)
ca.key Clé correspondante à l’Autorité de certification
server.crt Certificat du serveur
server.key Clé du serveur
machine01.crt Certificat de la machine 1
machine01.key Clé de la machine 1
dh1024.pem Paramètre Diffie Hellman
ta.key Clé utilisée pour l’auth-TLS

Seuls les fichiers ca.crt, machine01.crt, machine01.key et ta.key vont aller dans les répertoires de notre client.

Les fichiers ca.crt, server.crt, server.key, dh1024.pem et ta.key doivent rester sur votre serveur et surtout le fichier ca.crt qui permet de signer les certificats 🙂

Le fichier ca.key doit être gardé au chaud mais pas obligatoire sur vos machines clients et sur le serveur.

2. Création du fichier de configuration

Fichier server.conf

mode server # c'est le fichier de configuration du serveur
proto tcp
port 443 # port 443 en TCP
dev tun # Utilise l'interface virtuelle tun
 
#Clefs
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem
tls-auth keys/ta.key 0 # 0 pour le serveur
cipher AES-256-CBC # algorithme de chiffrement
 
#Journaux, niveau de verbosité, masque de répétition et fichiers de journaux.
verb 3
mute 20
status openvpn-status.log
log-append /var/log/openvpn.log
#Configuration VPN
 
#client-to-client # permet l'échange de données entre les clients
server 172.16.32.0 255.255.255.0 # adresse IP distribuées aux clients
push "redirect-gateway def1 bypass-dhcp" # redirection du flux de données
push "dhcp-option DNS 8.8.8.8" # Changement des DNS
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120 # Test de la connexion avec le client toutes les 10s,
 
# au bout de 120s de non réponse le client est en timeout.
#Gestion des droits et compression de données
 
user nobody # Changement de l'utilisateur et du groupe pour l'exécution
group nogroup
persist-key # n'accède plus à certaines options,
persist-tun # car réduction des privilèges utilisateur
comp-lzo # compression des données

3. Routage

Si vous souhaitez utiliser votre serveur OpenVPN en tant que passerelle vous devez entrer encore quelques commandes comme activation du routage puis des règles iptables afin de réaliser le nat :

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT --dport 443 -p tcp
iptables -A INPUT -i eth0
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE

J’estime que votre interface WAN est eth0, que le port VPN est bien 443 et que vous avez mis en réseau VPN 172.168.1.0 😉

4. Lancement du serveur avec notre fichier de configuration

Pour lancer le serveur, entrez cette commande :

/etc/init.d/openvpn start

Vous pouvez connecter un client à votre serveur OpenVpn 🙂