1

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

Administrateur Système autodidacte et utilisateur au quotidien de GNU/Linux (Debian, Ubuntu, Manjaro et un peu de CentOS).

One Comment

  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.

Laisser un commentaire

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