Installation du serveur OpenVPN
Pour l’installation, on va utiliser la version fournie par les dépots officiels de Debian. On utilise donc APT pour cela :
sudo apt-get install openvpn
Préconfiguration
Le paquet openvpn fournit des examples de configuration, on les copie donc dans le répertoire de configuration pour les modifier ensuite :
#Création du répertoire easy-rsa sudo mkdir /etc/openvpn/easy-rsa/ # Copie des fichiers de configuration sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ # On change l'utilisateur des fichiers sudo chown -R $USER /etc/openvpn/easy-rsa/
On a dorénavant les fichiers nécessaire pour configurer le serveur.
Configuration du serveur OpenVPN
On configure en premier lieu l’authentification par clés et certificats. Pour cela, on modifie le fichier /etc/openvpn/easy-rsa/vars
:
sudo nano /etc/openvpn/easy-rsa/vars
Ce fichier correspond aux paramètres de création de clés et certificats. On laisse les valeurs par défaut de la plupart des options, on modifie principalement les lignes à la fin du fichier correspondant aux valeurs par défaut des informations qui seront dans les certificats. Par défaut elles sont :
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain"
Il faut les modifier par des valeurs correspondant au serveur, cela resssemble à cela :
export KEY_COUNTRY="FR" export KEY_PROVINCE="75" export KEY_CITY="Paris" export KEY_ORG="Organiation" export KEY_EMAIL="contact@organisation.org"
L’étape suivante correspond à la génération de la clé et du certificat du serveur. On lance les commandes suivantes :
# On se déplace dans le répertoire de configuration cd /etc/openvpn/easy-rsa/ # On charge les valeurs par défaut source vars # On nettoie ce qui existe au cas où ./clean-all ./build-dh # Génération de la clé privée ca du serveur dans keys/ca.key ./pkitool --initca # Génération de la clé privée du serveur dans keys/server.key et du certificat dans keys/server.crt ./pkitool --server server # Génération de la clé du serveur dans keys/ta.key sudo openvpn --genkey --secret keys/ta.key
Les fichiers keys/ca.crt
, keys/ta.key
, keys/server.crt
, keys/server.key
et keys/dh1024.pem
sont nécessaire pour l’identification au serveur, on les copie dans /etc/openvpn/
:
sudo cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/
On crée ensuite deux répertoires :
/etc/openvpn/jail
où sera chrooté le processus du serveur OpenVPN ;/etc/openvpn/clientconf
où seront stockés les fichiers de configuration des utilisateurs qui seront créés par la suite ;
sudo mkdir /etc/openvpn/jail sudo mkdir /etc/openvpn/clientconf
On crée ensuite le fichier de configuration à proprement dit du serveur /etc/openvpn/server.conf
:
sudo nano /etc/openvpn/server.conf
Dans ce fichier on met le contenu suivant :
# Serveur TCP/444 # On utilise le port 444 car le 443 est souvent utilisé par apache ssl mode server proto tcp port 444 dev tun # Cles et certificats # On utilise les clés et certifcats générés ca ca.crt cert server.crt key server.key dh dh1024.pem tls-auth ta.key 0 cipher AES-256-CBC # Reseau # La machine connectée sera dans le sous-réseau 10.8.0.0 # Les DNS utilisés seront ceux de google server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 4.4.4.4" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 # Securite # Configuration de la sécurité du serveur # Le processus sera chrooté dans /etc/openvpn/jail user nobody group nogroup chroot /etc/openvpn/jail persist-key persist-tun comp-lzo # Log # Configuration de la manière dont les fichiers de logs fonctionnent # Enlever le ";" de la dernière ligne pour activer les logs verb 3 mute 20 status /var/log/openvpn-status.log log-append /var/log/openvpn.log
On peut maintenant tester le serveur, on se déplace dans le répertoire de configuration :
cd /etc/openvpn
Et on lance la commande suivante qui lancera le serveur :
sudo openvpn server.conf
Vous devez avoir la ligne suivante à la fin :
Initialization Sequence Completed
Si aucun problème n’apparait, on peut alors décommenter la dernière ligne de la configuration du serveur afin de logguer dans le fichier /var/log/openvpn.log
:
# Remplacer la ligne : ; log-append /var/log/openvpn.log # Par : log-append /var/log/openvpn.log
Le serveur est dorénavant correctement configuré.
Autoriser le sous-réseau à communiquer vers l’extérieur
Les clients pourront dorénavant se connecter au VPN mais ne devraient pas pouvoir accéder à Internet depuis leur adresse IP 10.8.0.X.
Il faut donc router le sous-réseau vers l’extérieur, le serveur devant jouer le rôle de routeur entre l’interface de connection VPN (tun0) et la carte réseau habituelle (eth0).
On configure le routage avec la commande :
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Ce réglage n’est pas permanent, au redémarrage de la machine serveur, il ne sera pas appliqué. Pour le rendre permanent, on modifie le fichier /etc/sysctl.conf
en décommentant la ligne suivante :
net.ipv4.ip_forward = 1
On configure iptables
ensuite pour que le sous-réseau utilise l’adresse IP publique du serveur :
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Comme le réglage précédent, celui-ci n’est pas permanent. Pour le rendre automatique au démarrage du serveur, les commandes suivantes doivent être exécutées.
On sauvegarde tout d’abord les règles iptables actuelles :
sudo sh -c "iptables-save > /etc/iptables.rules"
On édite ensuite le fichier /etc/network/interfaces
de définition des interfaces de réseau :
sudo nano /etc/network/interfaces
On y ajoute la ligne suivante après la définition de l’interface réseau principale (en général « iface eth0 inet… ») :
pre-up iptables-restore < /etc/iptables.rules
On peut maintenant passer à la création des comptes clients.
Création d’un compte client
Pour la création d’un compte client openvpn, on doit créer un couple clé/certificat pour chaque client amené à se connecter au serveur.
On va ici créer un utilisateur machine-cliente
.
cd /etc/openvpn/easy-rsa source vars ./build-key machine-cliente
Vous devez alors répondre à différentes questions pour la génération du certificat.
Le script génère 3 fichiers dans le répertoire /etc/openvpn/easy-rsa/keys
:
machine-cliente.crt
qui correspond au certificat du client ;machine-cliente.csr
qui correspond au Certificat Signing Request du client à conserver sur le serveur ;machine-cliente.key
qui correspond à la clé correspondante au certificat du client ;
Ces fichiers doivent être à disposition du serveur dans un sous-répertoire du répertoire de configuration pour chaque client. On crée tout d’abord le répertoire nécessaire :
sudo mkdir /etc/openvpn/clientconf/machine-cliente/
On copie les fichiers nécessaires dans ce répertoire :
sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/machine-cliente.crt keys/machine-cliente.key /etc/openvpn/clientconf/machine-cliente/
Il est alors nécessaire de créer le fichier de configuration du client dans le même répertoire. On se déplace donc dans ce répertoire :
cd /etc/openvpn/clientconf/machine-cliente/
Et on crée le fichier client.conf
:
sudo nano client.conf
Dans lequel on indique les éléments suivants (n’oubliez pas de remplacer le nom du certificat et de la clé ainsi que les XXX.XX.XX.XX par l’adresse IP du serveur) :
# Client client dev tun proto tcp-client remote XXX.XX.XX.XX 444 resolv-retry infinite cipher AES-256-CBC # Cles ca ca.crt cert machine-cliente.crt key machine-cliente.key tls-auth ta.key 1 # Securite nobind persist-key persist-tun comp-lzo verb 3
Pour que ce fichier de configuration puisse être utilisé par le client windows, on copie le fichier de configuration dans un nouveau fichier avec l’extension ovpn
:
sudo cp client.conf client.ovpn
On crée enfin un fichier machine-cliente.zip
qui sera à fournir à l’utilisateur afin qu’il puisse configurer son logiciel client :
sudo zip machine-cliente.zip *.*
Lancement du serveur
Il suffit ensuite de lancer le serveur :
sudo /etc/init.d/openvpn start