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