Ci-dessous, les différences entre deux révisions de la page.
openvpn [23/01/2016 17:53] viper61 |
openvpn [18/09/2016 02:54] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== OpenVPN ====== | ||
- | ===== Installation ===== | ||
- | Pour l' | ||
- | # apt-get update && apt-get install openvpn | ||
- | ===== Configuration ===== | ||
- | ==== Easy RSA ==== | ||
- | On commence la configuration avec **Easy RSA**, installé en même temps que notre **OpenVPN**. On créer le dossier puis l'on copie ce dont nous avons besoin avant de nous rendre dans notre nouveau dossier : | ||
- | # mkdir / | ||
- | # cp -r / | ||
- | # cd / | ||
- | |||
- | On va maintenant éditer le fichier //vars// | ||
- | 15 | # export EASY_RSA=" | ||
- | | export EASY_RSA="/ | ||
- | | ||
- | 53 | # export KEY_SIZE=1024 | ||
- | | export KEY_SIZE=4096 | ||
- | |||
- | Les informations des lignes 64 à la fin du fichier peuvent être modifier pour gagner du temps par la suite. | ||
- | |||
- | === Le serveur === | ||
- | On passe à la configuration du certificat avec les clefs qui serviront aux échanges chiffrés entre les clients et le VPN. Nous nous trouvons toujours dans le dossier **/ | ||
- | source ./vars | ||
- | ./clean-all | ||
- | ./build-ca | ||
- | ./ | ||
- | |||
- | < | ||
- | **Common Name** doit être identique entre le certificat et la clé serveur. \\ | ||
- | **Challenge Password** reste vide.</ | ||
- | |||
- | On oubliera pas la sécurité, on va faire appel à l' | ||
- | cd ../ | ||
- | ./build-dh | ||
- | | ||
- | On activera ensuite une première protection contre, notamment, les attaques de type DOS grâce à l' | ||
- | Si un client demande à s’authentifier au serveur sans entamer le dialogue par l’envoi de ce HMAC, OpenVPN ne va même pas entamer la procédure et donc limiter la surcharge serveur. | ||
- | openvpn --genkey --secret keys/ta.key | ||
- | |||
- | === Le client === | ||
- | On à maintenant tout ce qu'il nous faut coter serveur. Passons maintenant au client. | ||
- | ./ | ||
- | On ajoute ensuite en couche de sécurité grâce à l' | ||
- | cd keys | ||
- | openssl rsa -in < | ||
- | |||
- | <note tip>On répète cette étape pour chacun des clients que l'on souhaite créer. \\ | ||
- | On peut également la rendre plus simple grâce à un petit script auquel on passe le nom du client en paramètre et que l'on place dans notre dossier OpenVPN. | ||
- | #!/bin/bash | ||
- | | ||
- | if [ -d " | ||
- | echo " | ||
- | exit | ||
- | fi | ||
- | | ||
- | ./ | ||
- | openssl rsa -in easy-rsa/ | ||
- | </ | ||
- | |||
- | === La machine === | ||
- | On doit maintenant s' | ||
- | sh -c 'echo 1 > / | ||
- | Pour que ce réglage soit persistant il faut l' | ||
- | net.ipv4.ip_forward = 1 | ||
- | net.ipv4.conf.default.rp_filter=1 | ||
- | net.ipv4.conf.all.rp_filter=1 | ||
- | Puis en y ajoutant '' | ||
- | |||
- | Il ne nous reste que les règles de routage à faire | ||
- | iptables -I FORWARD -o tun0 -j ACCEPT | ||
- | iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT | ||
- | iptables -t nat -A POSTROUTING -s 10.8.6.0/24 -o venet0 -j MASQUERADE | ||
- | ip6tables -t raw -A PREROUTING -m rpfilter --invert -j DROP | ||
- | |||
- | Sur le poste client, nous ajouterons également deux plugins permettant de bloquer tous les paquets UDP entrants via une interface différente de celle du VPN : https:// | ||
- | Ainsi que les fuites DNS : https:// | ||
- | |||
- | ==== Fichier serveur ==== | ||
- | Maintenant que nous avons tout préparé, on passe à la création de notre serveur. On retourne dans notre dossier OpenVPN. \\ | ||
- | A cause de restriction stricte sur le réseau, nous plaçons notre serveur sur le port 443 (HTTPS). On garde quand même notre serveur Web accessible. Pour cela, on le met à l' | ||
- | |||
- | port 443 | ||
- | port-share 127.0.0.1 444 | ||
- | proto tcp | ||
- | tcp-nodelay | ||
- | dev tun | ||
- | comp-lzo | ||
- | persist-key | ||
- | persist-tun | ||
- | keepalive 10 20 | ||
- | server 10.8.6.0 255.255.255.0 | ||
- | client-to-client | ||
- | | ||
- | push " | ||
- | push " | ||
- | push " | ||
- | | ||
- | ca / | ||
- | cert / | ||
- | key / | ||
- | dh / | ||
- | tls-auth / | ||
- | cipher AES-256-CBC | ||
- | | ||
- | status openvpn-status.log | ||
- | | ||
- | verb 3 | ||
- | |||
- | <note warning> | ||
- | Note: Cannot open TUN/TAP dev / | ||
- | Note: Attempting fallback to kernel 2.2 TUN/TAP interface | ||
- | Cannot open TUN/TAP dev /dev/tap0: No such file or directory (errno=2) | ||
- | Exiting | ||
- | |||
- | Pour palier à ce problème, nous exécutons les deux commandes ci-dessous | ||
- | # mkdir /dev/net | ||
- | # mknod / | ||
- | </ | ||
- | |||
- | ==== Fichier client ==== | ||
- | Pour nous facilité la tâche, nous faisons appel à un petit script maison qui se chargera de tout ! | ||
- | Mais juste avant, nous procédons à la création d'une //base type// pour tout nos clients | ||
- | client | ||
- | dev tun | ||
- | proto tcp-client | ||
- | remote < | ||
- | resolv-retry infinite | ||
- | nobind | ||
- | redirect-gateway def1 | ||
- | | ||
- | ns-cert-type server | ||
- | key-direction 1 | ||
- | cipher AES-256-CBC | ||
- | | ||
- | persist-key | ||
- | persist-tun | ||
- | | ||
- | comp-lzo | ||
- | | ||
- | verb 3 | ||
- | |||
- | Nous plaçons cette base dans **/ | ||
- | |||
- | #!/bin/bash | ||
- | | ||
- | # Déclaration des variables par défaut | ||
- | NAME=$1 | ||
- | DEFAULT=" | ||
- | FILEEXT=" | ||
- | CRT=" | ||
- | KEY=" | ||
- | CA=" | ||
- | TA=" | ||
- | | ||
- | # On vérifie que la clé publique associé au nom du client existe | ||
- | if [ ! -f $CRT ]; then | ||
- | echo " | ||
- | exit | ||
- | fi | ||
- | echo "Clé publique trouvée" | ||
- | | ||
- | # On vérifie qu'une clé privée existe pour ce client | ||
- | if [ ! -f $KEY ]; then | ||
- | echo " | ||
- | exit | ||
- | fi | ||
- | echo "Clé privée trouvée : $KEY" | ||
- | | ||
- | # On vérifie l' | ||
- | if [ ! -f $CA ]; then | ||
- | echo " | ||
- | exit | ||
- | fi | ||
- | echo "Clé publique CA trouvée : $CA" | ||
- | | ||
- | # On vérifie l' | ||
- | if [ ! -f $TA ]; then | ||
- | echo " | ||
- | exit | ||
- | fi | ||
- | echo "Clé privée tls-auth trouvée : $TA" | ||
- | | ||
- | # Prêt à générer le fichier de configuration | ||
- | # On commence par insérer le fichier de base | ||
- | cat $DEFAULT > $NAME$FILEEXT | ||
- | | ||
- | # On ajoute la clé publique du CA | ||
- | echo "< | ||
- | cat $CA >> $NAME$FILEEXT | ||
- | echo "</ | ||
- | | ||
- | # On ajoute la clé publique du client | ||
- | echo "< | ||
- | cat $CRT | sed -ne '/ | ||
- | echo "</ | ||
- | | ||
- | # On ajoute la clé privée du client | ||
- | echo "< | ||
- | cat $KEY >> $NAME$FILEEXT | ||
- | echo "</ | ||
- | | ||
- | # Enfin, on ajoute la clé tls-auth | ||
- | echo "< | ||
- | cat $TA >> $NAME$FILEEXT | ||
- | echo "</ | ||
- | | ||
- | # On range tout les fichiers de l' | ||
- | mkdir easy-rsa/ | ||
- | mv easy-rsa/ | ||
- | mv $NAME.ovpn easy-rsa/ | ||
- | | ||
- | echo " | ||
- | |||
- | <note tip>On aura donc deux scripts à lancer pour créer un utilisateur. Le premier serveur à générer la clé et le second le fichier de configuration client.</ |