OpenVPN Configuration Simple

Pour avoir un accès sécurisé, j'ai débuté l'installation d'OpenVPN en commençant simplement.
Je souhaite avoir accès par l'intermédiaire du VPN, au réseau interne et que le flux HTTP passe par lui.
Sur le réseau local, nous sommes en 192.168.0.0/24 avec un serveur dnsmasq pour gérer les requêtes DNS qui me permettent de faire mes propres entrées.
Donc pour récapituler la machine qui a dnsmasq et OpenVPN sera nommé "Serveur", avec sur le réseau local l'IP 192.168.0.10

On installe OpenVPN suivant sa distribution et on passe à la configuration.
Un HOWTO est disponible sur http://openvpn.net/index.php/open-source/documentation/howto.html#quick

La première chose à faire est de copier les fichiers servant à la configuration dans votre répertoire personnel afin de ne pas perdre les fichiers générés lors de mise à jour, etc.

cp /usr/share/doc/openvpn/examples/easy-rsa ~/openvpn/ -R

L'ensemble des commandes s’exécuteront dans

cd ~/openvpn/2.0

Générer le Certificate Authority (CA) et la clé

Éditer le fichier vars

export KEY_COUNTRY=FR
export KEY_PROVINCE=France
export KEY_CITY=ville
export KEY_ORG=societe
export KEY_EMAIL=xxxxxxxxx@xxx.com

Initialiser le PKI.

. ./vars
./clean-all
./build-ca

La commande finale build-ca va construire le CA (certificate d'authorité) et la clé en invoquant les paramètres entrées dans le fichier vars. Le seul paramètre a rentrer et le Common Name (nom de domaine du serveur ou autre).

Générer le certificat et la clé du serveur

Générer le certificat et la clé privé pour le serveur.

./build-key-server server

Comme dans l'étape précédente, les paramètres sont prédéfinies, Mais lorsque l'on vous demande le Common Name entré "server". Les deux demandes suivantes requiert des réponses positives, "Sign the certificate? [y/n]" and "1 out of 1 certificate requests certified, commit? [y/n]".

Générer un certificat et une clé pour un client

Déterminer une méthode pour nommer les clients

./build-key nomclient

Si vous souhaitez protéger la clé par un mot de passe, utilisé le script build-key-pass.
Lors de la génération, ne pas oubliez d'utiliser pour le Common Name, le même nom que dans l'appel du script et toujours utiliser un nom unique pour chaque client.

Générer les paramètres Diffie Hellman

./build-dh

Output:
    Generating DH parameters, 1024 bit long safe prime, generator 2
    This is going to take a long time
    .................+...........................................
    ...................+.............+.................+.........
    ......................................

Copie des fichiers pour le serveur

cp keys/dh1024.pem keys/ca.crt keys/server.crt keys/server.key /etc/openvpn/

Création du fichier de configuration pour le serveur

Des exemples de fichier de configuration sont présent dans /usr/share/doc/openvpn/examples/sample-config-files et le placer dans /etc/openvpn/.
Editer donc le fichier /etc/openvpn/server.conf
Quelques possibilités d'options:

  • En cas d'utilisation d'Ethernet bridgé, il faut utiliser server-bridge et dev tap au lieu de server et dev tun
  • Si le serveur doit écouter sur un port TCP au lieu d'UDP, il faut mettre proto tcp au lieu de proto udp
  • Si l'adresse IP virtuelle utilisée doit être différente de 10.8.0.0/24, il faut modifier la directive server. Ne jamais oublier que la plage d'adresse IP virtuelles doit être inutilisée sur les réseaux de chaque côté du VPN.
  • Pour que les clients soient capables de s'atteindre à travers le VPN, il faut décommenter la directive client-to-client. Par défaut, les clients ne peuvent atteindre que le serveur.
  • Pour augmenter la sécurité, il est possible de décommenter les directives user nobody et group nobody. Diverses options de cryptage et de sécurité peuvent aussi être modifiées. (Le groupe nobody n'existe pas dans ubuntu, il faut donc mettre nogroup)

Pouvoir communiquer avec le réseau interne

push "route 192.168.0.0 255.255.255.0"

Activer l'IP Forwarding dans le noyau

echo 1 > /proc/sys/net/ipv4/ip_forward

Faire passer tout le trafic réseau par le VPN

push "redirect-gateway def1 bypass-dhcp"

Comme on fait passer tout le trafic réseau par le VPN, on utilise pousse la configuration DNS pour le client
(dnsmasq écoute sur l'adresse IP 10.8.0.1)

push "dhcp-option DNS 10.8.0.1"

Après avoir mis toutes ces options, exécuter la commande suivante

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Cette commande fera que le trafic IP sortant du sous-réseau 10.8.0.0/24 vers l’extérieure pourra revenir routé vers le VPN avec la bonne destination.

Ne pas oublier de redémarrer OpenVPN

/etc/init.d/openvpn restart

Création du fichier de configuration pour un client

On va prendre la configuration d'une machine sous winwdows
On installe OpenVPN http://openvpn.net/index.php/open-source/downloads.html
Une nouvelle GUI plus récente est disponible ici, il suffira de copier le fichier dans \bin et de refaire un raccourci.

Dans le répertoire config, copier les fichiers : ca.crt, nomclient.crt, nomclient.key

Copier et modifier le fichier de config présent dans sample-config, client.ovpn dans le repertoire config. Et reproduire la configuration server.

  • Placer la directive remote suivant votre configuration remote domain.tld 1194 ou remote IP_EXTERNE 1194
  • Définir les noms de fichier
    ca ca.crt
    cert nomclient.crt
    key nomclient.key

Lancer la GUI d'OpenVPN, et se connecter. Normalement tout devrait fonctionner.

Tags: