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
cp
a plusieurs arguments, il copie tous les fichiers listés dans le répertoire listé à la fin (obligatoirement un répertoire, donc).