3

OpenVPN sur le port 443 partagé avec un serveur web

Par défaut, un serveur OpenVPN écoute sur le port UDP 1194 et un serveur web sur les port TCP 80 et 443.
Le port UDP 1194 peut être bloqué par certains proxy entreprise, d’école ou autre réseau privé ce qui peut empêcher l’accès à son serveur VPN. Pour outre passer cette restriction, le serveur VPN peut être configurer sur le port TCP 443. Mais, si le serveur héberge aussi un serveur web écoutant aussi sur le port 443 cela ne va pas être possible en l’état car un seul port réservé pour un service.

Sur le blog, il a déjà été vue comment partager le port 443 entre SSH et un serveur web avec SSLH. Ici sera utilisé une option native à OpenVPN : port-share.

De plus, le fait de passer sur le protocole TCP cela apporte une meilleur stabilité de la connexion pour les faibles débits et évite l’erreurs du type :

Error: « Replay-window backtrack occurred« 

ensuite cette erreur créée les erreurs suivantes :
read UDP [EHOSTUNREACH]: No route to host (code=113)
write UDP []: Network is unreachable (code=101)
État du réseau : not connected

Dans le cas présent, c’est OpenVPN qui fait office de multiplexeur et suivant si la requête est une demande d’accès au VPN sur le port 443 ou au serveur web sur le port 1443 (ou autre).

Partager le port 443 entre OpenVPN et un serveur web

  • Éditer le fichier de configuration du serveur, exemple un OpenVPN sous Yunohost :
    nano /etc/openvpn/yunohost.conf
    • Modifier le protocole UDP part TCP :
    • proto tcp
    • Indiquer le port :
    • port 443
    • Ajouter la directive port-share :
    • port-share 127.0.0.1 1443
  • Éditer le fichier de configuration du client VPN (toujours dans le cas de Yunohost) :
    nano var/www/openvpn/domaine.tld.ovpn 
    • Changer le port d’écoute :
    • remote domaine.tld 443
  • Changer le port d’écoute pour le serveur web :
    • Nginx :
    • sed -i -e "s/443/1443/g" /etc/nginx/conf.d/*.conf
    • Apache2 :
    • sed -i -e "s/443/1443/g" /etc/apache2/ports.conf
  • Relancer les services :
    • Serveur web Nginx :
    • systemctl restart nginx
    • Serveur web Apache2 :
    • systemctl restart apache2
  • Serveur OpenVPN :
  • systemctl restart openvpn
  • ou pour Yunohost :
  • systemctl restart openvpn@yunohost.service

Test de connexion du serveur OpenVPN et du serveur web sur le port 443

  • Test du serveur OpenVPN :
  • sudo openvpn domaine.tld.ovpn

    openvpn

  • Test du serveur web, aller sur l’url du site.

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

3 commentaires

  1. Attention tout de même, lorsque le port 443 est ainsi partagé, le serveur https aura l’impression que toutes les requêtes qu’il reçoit viennent de la machine hôte. Du coup les mesures de sécurité du type la partie admin n’est disponible qu’en local/depuis une certaine IP deviennent inefficaces.

  2. Merci pour ce petit mémo, en revanche la manip m’a rendu complètement inopérant mon site et sans pouvoir me connecter au VPN. Car si je comprends bien, on passe par le VPN pour se conncter au site web. Du coup, même de l’extérieur il devient inaccessible sauf si on est connecter a son VPN ?

  3. Bonjour et merci pour le tuto.
    Cependant, même soucis que DEDROD, impossible pour mes sires en SSL d’être accessible depuis le changement décris plus haut.
    OpenVPN n’est aussi pas content, il renvoie : Sun May 10 12:29:54 2020 us=108213 83.59.223.87:39624 Non-OpenVPN client protocol detected

    J’ai l’impression qu’openVPN a changé depuis 2016, voire qu’il faille activer d’autres options…

    Au plaisir !

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.