13

Installer facilement un serveur OpenVPN sur Debian, Ubuntu, CentOS et Linux Mint 18

Pour simplifier la mise en place d’un serveur OpenVPN, un script d’installation est disponible sur github, nommé openvpn-install.

Ce script permet d’installer et configurer votre propre serveur VPN en moins de 5 Minutes en générant un fichier de configuration au format .ovpn utilisable avec le client OpenVPN, sur tous les systèmes d’exploitation GNU/Linux, MacOS X et Windows.

Ce script par défaut permet :

  • Pas de logs
  • Utilisation uniquement du protocole TLS 1.2
  • Chiffrement AES-256-CBC
  • 4096 bits DH (instead of 2048 bits)
  • Serveurs DNS de FDN
  • Mise en place d’une règle iptables pour le routage de l’interface tun0 vers eth0

Script d’installation automatique d’OpenVPN pour Debian, Ubuntu et CentOS

Ce script, je l’ai testé uniquement sur Debian 8.

  • Téléchargement du script :
  • wget --no-check-certificate https://raw.githubusercontent.com/Angristan/OpenVPN-install/master/openvpn-install.sh
  • Rendre le script exécutable :
  • chmod +x openvpn-install.sh
  • Exécution du script :
  • ./openvpn-install.sh

Ensuite, il suffit de répondre aux questions :
openvpn-01
Une fois terminé, le script génère un fichier de configuration au format .ovpn dans le répertoire /root. Ce fichier est à transférer sur le poste client.

Rendre le script compatible avec Linux Mint 18

  • Éditer le script openvpn-install.sh :
  • sudo nano openvpn-install.sh
  • Ajouter à la ligne 33 avant la directive ;then :
  • && [["$VERSION_ID" != 'VERSION_ID="18"']]

    openvpn_linuxmint18

Configuration du poste client

Par défaut le fichier généré par le serveur est fonctionnel de suite, mais on va lui apporter quelques petites modifications pour forcer l’utilisation des serveurs DNS défini par le serveur OpenVPN et l’ajout de paramètres pour la gestions des logs.

Installation sur le poste client des paquets nécessaire pour se connecter au serveur OpenVPN

Normalement le paquet resolvconf devrait déjà être installé, dans le doute je l’ai ajouté.

  • Arch Linux / Manajaro :
  • sudo pacman install openvpn resolvconf
  • Debian / Ubuntu :
  • sudo apt-get- install openvpn resolvconf
  • Fedora :
  • yum install openvpn resolvconf

Utiliser les serveurs DNS définit par le serveur

Sur le poste client installer le paquet openvpn-update-resolv-conf :

  • Arch Linux / Manjaro :
  • yaourt -S openvpn-update-resolv-conf

    Pour les autres distributions :

    wget --no-check https://github.com/masterkorp/openvpn-update-resolv-conf/blob/master/update-resolv-conf.sh
    sudo mv update-resolv-conf.sh /etc/openvpn/

C’est grâce à openvpn-update-resolv-conf , qu’il va être possible de forcer l’utilisation des serveurs DNS définit sur le serveur OpenVPN.

Modification du fichier de configuration client.ovpn pour forcer l’utilisation des serveurs DNS

nano client.ovpn

Ajouter ces lignes :

dhcp-option DNS
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Activation des logs

L’activation des logs n’est pas obligatoire pour le bon fonctionnement d’OpenVPN, mais dans mon cas j’ai activé les logs pour faire du monitoring avec Munin.

Pour activer les logs, modifier comme suit le fichier de configuration sur le serveur OpenVPN :

nano /etc/openvpn/server.conf

Ajouter :

#log
verb 3
mute 20
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log

Pour la prise en compte de l’ajout, relancer le serveur OpenVPN :

systemctl restart openvpn

Connexion du poste client sur le serveur OpenVPN

Pour se connecter au serveur OpenVPN, saisir la commande :

sudo openvpn client.ovpn

ce qui donne :
opencpn-client-linux

On peut vérifier l’adresse IP de l’interface tun0 :

ip a | grep tun0
6: tun0:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
    inet 10.8.0.3/24 brd 10.8.0.255 scope global tun0

Et vérifier aussi le serveur DNS utlisé :
openvpn-dns

Ajouter une couche de sécurité avec tls-auth

La directive tls-auth ajoute une signature HMAC supplémentaire pour tous les paquets TLS Handshake pour la vérification de l’intégrité. Tout paquet UDP ne portant pas la signature correcte HMAC peut être supprimé sans autre traitement. Cette directive tls-auth fournit un niveau supplémentaire de sécurité, qui permet de se protéger de :

  • DoS attaques ou le port des inondations sur le port UDP OpenVPN.
  • Scan de port pour déterminer quels ports UDP sont en écoute.
  • Vulnérabilités de débordement du buffers dans la mise en œuvre de TLS.
  • Initiations de machines non autorisées lors du TLS handshake .

Pour mettre en œuvre cette directive, il faut générer une clé secrète qui sera partagée entre le serveur et le client.

  • Génération de la clé sur le serveur OpenVPN:
  • cd /etc/openvpn/
    openvpn --genkey --secret ta.key
  • Dans le fichier de configuration du serveur, ajouter key-direction 0 et le chemin de la clé :
  • tls-auth_server-openvpn

  • Dans le fichier du client, ajouter key-direction 1 et la clé :
  • tls-autf_client-openvpn

  • Sinon modifier directement le script openvpn-install.sh :
  • nano openvpn-install.sh

    Aller à la ligne 41 et modifier comme suit :
    openvon-install_modif-cipher

  • Relance du serveur OpenVPN :
  • systemd restart openvpn

Partager l'article :





fred

"Dire que l'on s'en fiche du droit à la vie privée sous prétexte qu'on a rien à cacher, c'est comme déclarer que l'on se fiche du droit à la liberté d'expression sous prétexte qu'on a rien à dire." Edward Snowden

13 commentaires

  1. Merci pour les règles iptables :)

    PS : j’ai changé le nom du git ^^ les commandes fonctionnent toujours mais on sait jamais

  2. « un script a été développé et mis à disposition sur github par Angristan. »
    N’aurait-il pas été plus juste de dire  » Ce script est un Fork de l’Url https://github.com/Nyr/openvpn-install adapté/modifé par Angristan » ?
    Un peu gros tout de même :/

  3. Bonjour,
    J’ai le problème suivant, sans doute à cause du proxy de l’entreprise :
    TLS Error: TLS key negotiation failed
    Comment régler le problème svp ?

    Merci d’avance ! :)

  4. SI tu es derrière un proxy entreprise, il faut changer le port d’écoute en 443

  5. Je passe par le port 110, ça me fait pareil sur le port 443 :
    illoxx@illoxx-PC:~$ sudo openvpn .vpnconnect
    Sun Mar 13 22:56:33 2016 OpenVPN 2.3.2 i686-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Dec 1 2014
    Sun Mar 13 22:56:33 2016 UDPv4 link local: [undef]
    Sun Mar 13 22:56:33 2016 UDPv4 link remote: [AF_INET]ip:443
    Sun Mar 13 22:57:33 2016 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
    Sun Mar 13 22:57:33 2016 TLS Error: TLS handshake failed
    Sun Mar 13 22:57:33 2016 SIGUSR1[soft,tls-error] received, process restarting
    Sun Mar 13 22:57:35 2016 UDPv4 link local: [undef]
    Sun Mar 13 22:57:35 2016 UDPv4 link remote: [AF_INET]ip:443
    ^CSun Mar 13 22:57:37 2016 event_wait : Interrupted system call (code=4)
    Sun Mar 13 22:57:37 2016 SIGINT[hard,] received, process exiting
    illoxx@illoxx-PC:~$

  6. Faut s’assurer que le port 443 soit ouvert sur le serveur OpenVPN…

  7. Re-Salut !

    Je crois que tu t’es un peu emmêle du coup je précise :
    tls-cipher concerne le chiffrement du tunnel
    cipher et auth concernent juste HMAC.

    Concernant Blowfish, il est encore viable étant donné qu’il n’a pas été cassé. Mais AES c’est mieux :D

  8. Bonjour j’utilise linux mint 18 sarah et je n’arrive pas à installé ce script sa me dit not supported, quelqu’un peut m’aider svp.

  9. Salut patoche,
    j’ai mis à jour l’article en expliquant comment rendre compatible le script avec Linux Mint 18 :-)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *