====== 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é}}