Installation du serveur

# aptitude install openvpn

Génération des certificats et clés

Tout se passe dans le repertoire /usr/share/doc/openvpn/examples/easy-rsa/2.0/ Pour s'y rendre:

# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

Ensuite il faut modifier les valeurs du fichier vars en accord avec nos paramètres avec notamment:

64  export KEY_COUNTRY="FR"
65  export KEY_PROVINCE="France"
66  export KEY_CITY="Petaouchnok"
67  export KEY_ORG="Ma Boite"
68  export KEY_EMAIL="ma@maboite.fr"

une fois le fichier vars complété il faut initialisé les variables à l'aide de la commande:

# source vars

Une remise à zéro de la génération de certificat dans le sous dossier keys s'effectue à l'aide de la commande suivante :

# ./clean-all

Génération du certificat et de la clé de l’autorité de certification (CA)

Il s'agit du certificat principal du serveur qui va être utilisé par tous les nœud pour la signature des différents certificats et clés. Ainsi en utilisant la clé le certificat va pouvoir contrôler la provenance des certificats présentés par les clients. Pour les générer :

# ./build-ca

Il suffit de répondre par défaut au questions qui ont été pré-remplies par le fichier vars. Seul l'entrée Common Name n'est pas remplie. Il s'agit du nom du serveur. Le certificat est créé dans le fichier keys/ca.crt et la clé correspondantes dans le fichier keys/ca.key.

Génération du certificat et de la clé du serveur

Il s'agit du certificat et de la clé qui permettront d'identifier le serveur. Le script suivant permet de générer la clé NomDuServeur.key et le certificat NomDuServeur.crt :

# ./build-key-server NomDuServeur

Vers la fin de ce script il est demandé un mot de passe. Si un mot de passe est entré, à chaque démarrage du serveur OpenVPN il faudra entrer ce mot de passe. Dans le cas contraire il n'y en aura pas besoin, mais une personne possédant la clé pourra l'utiliser sans contrainte.

Génération du certificat et de la clé pour chaque client

Pour les clients un script comparable existe. Ainsi pour obtenir le certificat et la clé pour un client lambda :

# ./build-key lambda

La clé keys/lambda.key et le certificat keys/lambda.crt sont ainsi créer. Comme précédemment pour la clé du serveur concernant le mot de passe. Il faut répéter cette procédure pour chaque client différents.

Création du paramètre Diffie Hellman

# ./build-dh

qui va créer le fichier keys/dh1024.pem

Configuration du serveur OpenVPN

Il faut déplacer les certificats et la clé créés pour le serveur dans le répertoire principale de OpenVPN (code:/etc/openvpn/), a savoir le certificat et la clé de l’autorité de certification (code:ca.crt et ca.key), le certificat et la clé spécifiques du serveur (code:NomDuServeur.crt et NomDuServeur.key) et le fichier du paramettre de Diffie Hellman (code:dh1024.pem)

# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ca.key /etc/openvpn/
# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/NomDuServeur.crt /etc/openvpn/
# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/NomDuServeur.key /etc/openvpn/
# cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/

Une fois les différents fichier en place il faut créer un fichier de configuration pour le serveur. Pour cela le plus simple est de partir à partir du fichier d'exemple contenu dans

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

Configuration du serveur comme point d'accés

Configuration du pare-feux ferm

  • Mise en place du NAT des adresses:
table nat {
        chain POSTROUTING saddr 10.8.0.0/255.255.255.0 MASQUERADE;
}
  • Autoriser les connexions depuis l'interface du vpn dans la table filter et la chaine INPUT :
interface tun0 ACCEPT;
  • Autoriser le transfert de paquets venant du vpn chaine FORWARD :
interface tun0 ACCEPT;

Autoriser le forward IPv4

De manière temporaire:

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

De manière permanente en définisant dans le fichier /etc/sysctl.conf l'option net.ipv4.ip_forward à 1:

net.ipv4.ip_forward=1