Table des matières

Openvpn

OpenVPN peut servir à divers usages ; ici il permet d'accéder à un réseau interne uniquement si on est autorisé.

apt-gt install openvpn

Création de l'autorité de certification

On va utiliser un outil appelé easy-rsa.

cp -r /usr/share/easy-rsa /etc/openvpn/
nano /etc/openvpn/easy-rsa/vars

Dans vars on renseigne les éléments concernant notre serveur : localisation, nom, propriétaire, ce sont des valeurs par défaut qui nous éviterons de devoir toujours retaper les information, avec les risques d'erreur que cela représente. Voici un exemple des lignes modifiées :

export KEY_COUNTRY="FR"
export KEY_PROVINCE="AV"
export KEY_CITY="Triffouillis les oies"
export KEY_ORG="Khaganat"
export KEY_EMAIL="monmail@domain.com"
export KEY_OU="Jeu"

On source ensuite ce fichier pour définir les variables dans les shell actuel, puis on crée l'autorité de certification, et un certificat pour le serveur.

cd /etc/openvpn/easy-rsa
source ./vars 
./clean-all 
./build-ca 
./build-key-server kukcla
./build-dh 

Il y a un certain nombre de questions auxquelles on répond juste avec la touche entrée car les valeurs ont été définies par défaut. Seul le common-name est à étudier.

Pour le serveur, il va signer la clé et demande un mot de passe, ce dernier est inutile dans la mesure où on maîtrise de bout en bout la transmission des données.

./build-dh sert à définir des paramètres pour le générateur aléatoire.

Configuration du serveur

Les clés crées sont mises dans le sous répertoire keys. Pour utiliser le VPN, on aura besoin de trois fichiers. Le certificat de l'autorité de certification, ca.crt, sera nécessaire pour le serveur et les clients. Ensuite, chaque poste, serveur ou client aura besoin de son certificat et de sa clé privée. Ici, ce sera serveur.crt et serveur.key.

Le fichier .csr (Certificate Signing Request) sera conservé car il sera utile en cas de révocation de la clé.

On va copier1) les fichiers nécessaires et créer un fichier de configuration serveur.

cd /etc/openvpn/easy-rsa
cp keys/ca.crt keys/kukcla.crt keys/kukcla.key ..
cd /etc/openvpn
cp easy-rsa/keys/dh2048.pem .
mkdir ccd
nano server.conf

Le contenu du server.conf (ici, pour kuckla, adaptez au besoin) :

port 1194

proto udp

dev tun
ca ca.crt

cert kukcla.crt
# crl-verify /etc/openvpn/crl.pem

key kukcla.key

dh dh2048.pem
server 10.8.20.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd

client-to-client
keepalive 10 120
comp-lzo
persist-key

Lancement

Activer et relancer openvpn :

systemctl enable openvpn       
service openvpn restart

Vérification :

ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.20.1  P-t-P:10.8.20.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

C'est prêt à recevoir des connexions.

Configuration d'un client

Côté administrateur

Le circuit “normal” de création d'une paire clé / certificat est ainsi : le poste de destination crée une paire de clés privée/publique, et génère un Certificate Signing Request qui est envoyé à l'autorité de certification (CA). Celle-ci signe et renvoie le certificat signé ainsi que son propre certificat.

Sauf qu'on ne trouve aucune doc sur cette façon de faire.

Donc on fait comme tout le monde, tout se fait sur le serveur et on fait passer les clés aux gens ensuite.

Création des clés sur le serveur :

cd /etc/openvpn/easy-rsa
./build-key clef1

Pas la peine de remplir à nouveau ce qui est déjà prérempli.

Créer le fichier ccd qui contient des informations de routage (à refaire à chaque clef) :

cd /etc/openvpn/
/etc/openvpn# cp ccd/modele ccd/clef1

Ensuite récupération des clés sur le client. Il faut ca.crt, le fichier .crt et le fichier .key qui viennent d'être générés (ici clef1.crt et clef1.key).

Pour simplifier et sécuriser la récupération des clés, créer un utilisateur qui va servir uniquement à ça, et copiez les clés dans son répertoire :

adduser mykey
cp /etc/openvpn/easy-rsa/keys/ca.crt /home/mykey/ca.crt
cp /etc/openvpn/easy-rsa/keys/clef1.crt /home/mykey/clef1.crt
cp /etc/openvpn/easy-rsa/keys/clef1.key /home/mykey/clef1.key
chown -R mykey:mykey /home/mykey

Le client pourra ainsi récupérer ses clés via ssh.

Côté client

En premier lieu, installer openvpn.

sudo apt-get install openvpn

Sur la machine cliente, récupérer ses clés générées par un admin en vous connectant au serveur en root (et adaptez, cet exemple ne se copie-colle pas !) :

sudo rsync -av -e "ssh -p PORT" mykey@IPSERVER:/home/mykey/ca.crt /etc/openvpn/ca.crt
sudo rsync -av -e "ssh -p PORT" mykey@IPSERVER:/home/mykey/clef1.crt /etc/openvpn/clef1.crt
sudo rsync -av -e "ssh -p PORT" mykey@IPSERVER:/home/mykey/clef1.key /etc/openvpn/clef1.key

Créez et copiez le fichier client en adaptant les nom des fichiers de clé et vérifiant que ça correspond au serveur.

sudo nano /etc/openvpn/client.conf
client
dev tun
# Windows needs the TAP-Win32 adapter name
;dev-node MyTap
proto udp
remote khaganat.net 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert clef1.crt
key clef1.key
comp-lzo
verb 3

Lancez la commande suivante, pour tester, qui doit se terminer par Initialization Sequence Completed au bout d'un moment :

cd /etc/openvpn/
sudo openvpn --config client.conf

Terminez le processus (Ctrl-C), puis activez ou relancez openvpn.

Sur debian :

service openvpn enable
service openvpn start

Sur Archlinux :

systemctl enable openvpn@client.service
systemctl start openvpn@client.service
1)
Lorsque cp a plusieurs arguments, il copie tous les fichiers listés dans le répertoire listé à la fin (obligatoirement un répertoire, donc).