====== 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 copier((Lorsque ''cp'' a plusieurs arguments, il copie tous les fichiers listés dans le répertoire listé à la fin (obligatoirement un répertoire, donc).)) 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 {{tag>Serveur Sécurité}}