Aller au contenu

Mettre En Place Une Config Reverse Proxy


CoolRaoul

Messages recommandés

**IMPORTANT**

la manip décrite est un peu modifiée avec DSM 5.0:

  1. L'emplacement du fichier httpd.conf-user à changé (dans "/etc/httpd/conf" maintenant)
  2. la commande de redémarrage apache est:

    /usr/syno/sbin/synoservicecfg --restart httpd-user

Attention: en cas d'erreurs de syntaxe ou autre le service ne sera pas redémarré mais rien ne le signale au terminal.

Il est conseillé d'aller visualiser les dernières lignes du fichier "/var/log/upstart/httpd-user.log" pour s'assurer que le restart s'est bien passé.


Tout d'abord je tiens a citer le travail de PatrickH dont le tuto doit être considéré comme la base de ce qui va suivre
J'en recommande chaudement la lecture préalable si vous voulez comprendre tout ce qui suit.

Dans la suite il sera supposé que vous disposez de votre nom de domaine que nous appellerons "mondomaine.com"

Tous les sous-domaines utilisés par la suite (<sous-domaine>.mondomaine.com donc ) devront avoir été déclarés dans votre console d'administration de nom de domaine et pointer vers votre ip externe.

A noter qu'il est aussi possible d'appliquer ce qui suit dans le cas des sous-domaine DDNS fourni par Synology (du style par exemple "monnas.synology.me"). On utilisera dans ce cas des sous-domaine de niveau2 (soudomaine.monnas.synology.me) sans avoir besoin à les déclarer, c'est automatique dans ce cas.

Les redirections de ports pour les connexions externe sur les ports 80 et 443 devront aussi avoir été mises en oeuvre dans le routeur ou la box à destination de l'IP sur le réseau interne du Syno.

Toutes les opérations suivantes doivent s'exécuter en étant connecté sur le Syno en ligne de commande (via ssh ou telnet) sur le compte "root"

  • pre-requis
    • le service web station doit être activé (panneau de config->services web->applications wev->activer web station)
    • si on souhaite aussi se connecter en https, il que l'option panneau de config->services web->Service Http->activer la connexion HTTPS pour les services web soit activée.
  • ajouter la ligne suivante *à la fin* de /usr/syno/apache/conf/httpd.conf-user
    include /usr/local/etc/http.d/revproxy.conf
  • Attention: cette opération devra être effectuée de nouveau en cas d'upgrade firmware DSM.
    (mais ce sera la seule chose à faire dans ce cas, tout ce qui est décrit ci dessous sera préservé)
  • Créer le répertoire "/usr/local/etc/http.d"
    mkdir -p /usr/local/etc/http.d
  • Tous le blocs de configurations décrits dessous seront à mettre dans /usr/local/etc/http.d/revproxy.conf dans l'ordre.
    • Première partie - chargement des modules (tous ne sont pas nécessaires mais peuvent servir pour d'autres types de configs, par exemple le module "mod_proxy_ftp" permet par exemple d’accéder de l'extérieur à un serveur ftp freebox en http.
      <IfModule !proxy_module>
      LoadModule proxy_module modules/mod_proxy.so
      </IfModule>
      
      <IfModule !proxy_connect_module>
      LoadModule proxy_connect_module modules/mod_proxy_connect.so
      </IfModule>
      
      <IfModule !proxy_http_module>
      LoadModule proxy_http_module modules/mod_proxy_http.so
      </IfModule>
      
      <IfModule !proxy_ftp_module>
      LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
      </IfModule>
    • Obligatoire avant la suite
      NameVirtualHost *:
      
      <VirtualHost *:>
      ServerName *
      DocumentRoot /var/services/web
      </VirtualHost>
    • 2ème partie - acces aux sevices DSM en http
      Ajouter le bloc suivant. (le nom "dsm" est un exemple). Dans le cas d'un domaine DDNS fourni par synology on aura par exemple "dsm.monnas.synology.me"
      <VirtualHost *:>
      ServerName dsm.mondomaine.com
      ProxyPass / http://localhost:5000/
      ProxyPassReverse / http://localhost:5000/
      </VirtualHost>
      Cette simple config permet de se connecter sur le port 80 a l'interface dsm, en utilisant l'url http://dsm.mondomaine.com
    • accès direct à filestation (sous réserve que le port 7000 ait affecté a file station dans le "portail des applications" du panneau de configuration)
      <VirtualHost *:>
      ServerName filestation.mondomaine.com
      ProxyPass / http://localhost:7000/
      ProxyPassReverse / http://localhost:7000/
      </VirtualHost>
      Ce qui donnera acces de façon similaire a filestation en http sur le port 80 via l'url http://filestation.mondomaine.com.

      On procèdera de façon similaire pour les autres services tels qu'audiostation, downloadstation, webdav, etc ... en choisissant a chaque fois un nom de sous-domaine différent et le numéro de port correspondant.
    • 3eme partie - acces https (SSL)
      Cette partie du fichier de config devra être précédée de la ligne:
      NameVirtualHost *:443
      On va ensuite ajouter des blocs "VirtualHost" pour tous les services auquel on veit pouvoir accéder en https en sur le port 443

      Cas de l'acces à l'interface DSM:
      <VirtualHost *:443>
      ServerName webman.mondomaine.com
      SSLCipherSuite HIGH:MEDIUM
      SSLProtocol all -SSLv2
      SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt
      SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key
      SSLEngine on
      SSLProxyEngine on
      
      ProxyPass / https://localhost:5001/
      ProxyPassReverse / https://localhost:5001/
      </VirtualHost>
      Pour les autres services, on déclinera cela de façon similaire à ce que l'on a fait plus haut dans le cas http, en dupliquant le bloc ci dessus, puis en éditant dans la copie les lignes des clauses ServerName, ProxyPass et ProxyPassReverse. (attention à ne pas se tromper sur les numéros de ports utilisés en mode SSL, celui par défaut de filestation est 7001 par exemple, cf le portail des applications)
  • prise en compte des modifications
    Pour cela, il est nécessaire de rédémarrer le serveur apache.
    Utiliser la commande:
    /usr/syno/etc/rc.d/S97apache-user.sh restart
Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Grand merci pour avoir rassemblé / mis à jour toutes les infos sur le reverse proxy.

Une idée de complément : comme la procédure à légèrement changée avec les évolutions de DSM, il peut être utile d'indiquer avec quelles versions c'est prévu pour fonctionner (en espérant que cela soit toujours bon pour les versions futures).

Lien vers le commentaire
Partager sur d’autres sites

Bonjour CoolRaoul

Merci pour ce tuto qui clarifie beaucoup les choses. En tant que pur newbie, j'ai plusieurs questions et, en tant que curieux, plusieurs remarques (pour compléter ton tuto ?)

Remarque 1. Il me semble que si on ne met pas "NameVirtualHost *:80" en tête des déclarations des virtualhosts sur le port 80 (comme tu l'indique pour les ports en SSL), on va avoir un message du type "[warn] _default_ VirtualHost overlap on port 80, the first has precedence" lors du redémarrage du serveur Apache

Question 1. Dans les tutos précédents, on avait toujours des lignes du type

ProxyVia Off

<Proxy *>

Order deny,allow

Allow from all

</Proxy>

A quoi servaient ces lignes ? Pourquoi ne les as-tu pas reprises dans ton tuto ?

Question 2. Je n'arrive pas à faire la même chose pour accéder à photostation via une adresse qui serait photo.mondomaine.fr

J'ai bien lu quelques posts (notamment celui ci, dont la conclusion m'échappe un peu : ), mais sans succès. As tu une idée ?

Question 3. J'ai mis mon fichier de config ailleurs... : /usr/local/etc/reverse-proxy.conf

Est-ce que cela a une importance ?

En tout cas, merci CoolRaoul :)

Modifié par Lejoss
Lien vers le commentaire
Partager sur d’autres sites

Remarque 1. Il me semble que si on ne met pas "NameVirtualHost *:80" en tête des déclarations des virtualhosts sur le port 80 (comme tu l'indique pour les ports en SSL), on va avoir un message du type "[warn] _default_ VirtualHost overlap on port 80, the first has precedence" lors du redémarrage du serveur Apache

En effet, c'est un oubli de ma part que je vais m'empresser de corriger.

Merci

Remarque 2. J'ai essayé de faire un truc du type :

<VirtualHost *:80>

ServerName dsm.mondomaine.fr

SSLCipherSuite HIGH:MEDIUM

SSLProtocol all -SSLv2

SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

SSLEngine on

SSLProxyEngine on

ProxyPass / https://192.168.0.18:5001/

ProxyPassReverse / https://192.168.0.18:5001/

</VirtualHost>

et bien ça marche : cela permet de "rediriger" automatiquement une requête faite en HTTP sur du HTTPS (et évite par la même occasion d'obliger à saisir https en entête d'adresse...)

Edit : apparemment cela ne marche que pour dsm... mais pas pour filestation... pourtant, les config sont identiques :

NameVirtualHost *:80

<VirtualHost *:80>

ServerName dsm.mondomaine.fr

SSLCipherSuite HIGH:MEDIUM

SSLProtocol all -SSLv2

SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

SSLEngine on

SSLProxyEngine on

ProxyPass / https://192.168.0.18:5001/

ProxyPassReverse / https://192.168.0.18:5001/

</VirtualHost>

<VirtualHost *:80>

ServerName files.mondomaine.fr

SSLCipherSuite HIGH:MEDIUM

SSLProtocol all -SSLv2

SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

SSLEngine on

SSLProxyEngine on

ProxyPass / https://192.168.0.18:7001/

ProxyPassReverse / https://192.168.0.18:7001/

</VirtualHost>

Est-ce que cela peut venir d'un réglage dans la console ?

Je ne sais pas la, peut-etre que DSM sait renégocier a la volée lorsque il voit arriver une connexion SSL sur le port 80 et pas filestation?

Je ne peux pas vérifier (suis pas sur place) mais ça serait interessant de voir ce que donne en local "https:/<addresse syno>:5000"

Question 1. Dans les tutos précédents, on avait toujours des lignes du type

ProxyVia Off

<Proxy *>

Order deny,allow

Allow from all

</Proxy>

A quoi servaient ces lignes ? Pourquoi ne les as-tu pas reprises dans ton tuto ?

Je les ait squeezées car il s'agit en fait des valeurs par défaut, donc inutile de les laisser la. Par contre on peut, si on le souhaite, remettre le bloc et y inclure des restrictions d'acces plus strictes

Question 2. Je n'arrive pas à faire la même chose pour accéder à photostation via une adresse qui serait photo.mondomaine.fr

J'ai bien lu quelques posts (notamment celui ci, dont la conclusion m'échappe un peu : http://www.nas-forum...ssage-en-dsm41/), mais sans succès. As tu une idée ?

Je ne me suis pas vraiment attaqué a photo station etant donné que, comme il utilise le port 80, le besoin du reverse proxy reste limité.

Mais as-tu essayé de mettre simplement un proxpass avec l'url http://localhost/photo pour voir?

Question 3. J'ai mis mon fichier de config ailleurs... : /usr/local/etc/reverse-proxy.conf

Est-ce que cela a une importance ?

Strictement aucune,

Et, chez moi aussi il est ailleurs (en fait plutott qu'un fichier j'utilise un répertoire et ma ligne include ressemble à "include <mon répertoire>/*.conf.d". Ca me permet de répartir la conf dans plusieurs fichiers plus "spécialisés"

le seul élément à savoir est qu'a partir du moment ou il est situé quelque part sous /usr/local tu a la garantie qu'il ne sera pas effacé par un upgrade DSM

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Avec ça on peux même se connecter en shell interactif ("vi" dans une fenetre navigateur , ca décoiffe non?). Et ça marche même à travers un proxy!

(je reste toujourts impressioné par ce qu'on peut faire avec les techno AJAX)

Il y a aussi les WebSockets qui ont l'avantage d'être bidirectionnels.

Par contre ça n'a rien de "Web" contrairement à son nom, les WebSockets utilisent HTTP mais n'en respectent pas la spécification (AJAX:1 - WebSockets:0).

Du coup lorsque j'ai voulu utiliser un reverse proxy pour ne pas avoir à ouvrir un port supplémentaire, les entêtes propres aux WebSockets sont simplement supprimées par Apache et ne sont donc pas transmises aux clients. Il est donc impossible de se connecter à un WebSocket via un reverse proxy Apache. :(

En espérant que la prochaine version d'Apache résoudra ce souci.

Lien vers le commentaire
Partager sur d’autres sites

Concernant la Remarque 2, j'ai fouillé dans la console de DSM. En fait il y a une option que j'avais cochée dans "Panneau de config - Paramètres DSM - Service HTTP" qui redirige automatiquement une connexion http en https... Mais pour que cela marche il faut bien mettre :

<VirtualHost *:80>

ServerName dsm.mondomaine.fr

SSLCipherSuite HIGH:MEDIUM

SSLProtocol all -SSLv2

SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

SSLEngine on

SSLProxyEngine on

ProxyPass / https://192.168.0.18:5001/

ProxyPassReverse / https://192.168.0.18:5001/

</VirtualHost>

En tout cas : https://192.168.0.18:5000/ ne donne rien du tout

Sinon, pour photostation, le proxypass sur 198.162.0.18/photo ne marche pas

Lien vers le commentaire
Partager sur d’autres sites

Concernant la Remarque 2, j'ai fouillé dans la console de DSM. En fait il y a une option que j'avais cochée dans "Panneau de config - Paramètres DSM - Service HTTP" qui redirige automatiquement une connexion http en https... Mais pour que cela marche il faut bien mettre :

<VirtualHost *:80>

ServerName dsm.mondomaine.fr

SSLCipherSuite HIGH:MEDIUM

SSLProtocol all -SSLv2

SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

SSLEngine on

SSLProxyEngine on

ProxyPass / https://192.168.0.18:5001/

ProxyPassReverse / https://192.168.0.18:5001/

</VirtualHost>

En tout cas : https://192.168.0.18:5000/ ne donne rien du tout

Sinon, pour photostation, le proxypass sur 198.162.0.18/photo ne marche pas

J'ai essayé et chez moi ça ne fonctionne pas ...

http://dsm.mondomaine.com me redirige bien vers https://dsm.mondomaine.com mais sur une page d'erreur syno ... :(

Lien vers le commentaire
Partager sur d’autres sites

@Thecyberwarrior (fun le pseudo...:))

chez moi, ça dépend du navigateur. Safari transforme http en https me dit qu'il "n'arrive pas à établir une connexion sécurisée au serveur..." (comme quand je tape directement https...), Chrome ouvre la page avec l'adresse en https mais avec https ce qui veut dire que la connexion n'est pas sécurisée. Quand à Firefox, tout va bien pour lui : la connexion semble sécurisée.

Je pense que cela vient du certificat tout moisi qui est installé par défaut et de la manière qu'ont les navigateurs de l'interpréter (peut-être aussi des réglages des browsers...)

Je vais essayer d'installer un certificat "propre" pour voir

Lien vers le commentaire
Partager sur d’autres sites

Mais pourquoi donc personne n'écoute ma préco d'utiliser "localhost" plutôt que l’adresse IP LAN dans la config reverse proxy :mellow: ?

Cela dit ça n'as sans pas de lien avec ton problème, et pour ma part je n'utilise pas l'option de redirection auto http->https de la console DSM, donc je ne pense pas pouvoir pas t'aider sur ce coup

Lien vers le commentaire
Partager sur d’autres sites

Moi j'ai fait :


<VirtualHost *:>

   ServerName dsm.mondomaine.com

   SSLCipherSuite HIGH:MEDIUM

   SSLProtocol all -SSLv2

   SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

   SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

   SSLEngine on

   SSLProxyEngine on

   ProxyPass / https://localhost:5001/

   ProxyPassReverse / https://localhost:5001/

</VirtualHost>

Ben je tape http://dsm.mondomaine.com dans le navigateur, ça m’emmène bien vers https://dsm.mondomaine.com mais ça affiche une page d'erreur Syno

CoolRaoul tu fais comment toi pour rediriger ton url normale vers le https et pour que ça marche ?

Lien vers le commentaire
Partager sur d’autres sites

CoolRaoul tu fais comment toi pour rediriger ton url normale vers le https et pour que ça marche ?

Une solution :


<VirtualHost *:>

ServerName dsm.mondomaine.fr

Redirect / https://dsm.mondomaine.fr

</VirtualHost>


<VirtualHost *:443>

ServerName dsm.mondomaine.fr

SSLEngine on

SSLProxyEngine on

SSLCipherSuite HIGH:MEDIUM

SSLProtocol all -SSLv2

SSLCertificateFile /usr/syno/etc/ssl/ssl.crt/server.crt

SSLCertificateKeyFile /usr/syno/etc/ssl/ssl.key/server.key

ProxyPass / https://localhost:5001/

ProxyPassReverse / https://localhost:5001/

</VirtualHost>

Modifié par Kramlech
Lien vers le commentaire
Partager sur d’autres sites

CoolRaoul tu fais comment toi pour rediriger ton url normale vers le https et pour que ça marche ?

Je sais pas si tu as fait gaffe mais dans mon message précédent j'ai bien dit que

" pour ma part je n'utilise pas l'option de redirection auto http->https de la console DSM,"

Lien vers le commentaire
Partager sur d’autres sites

Il y a un paquet SynoCommunity qui va sortir avec HAProxy, ce sera plus simple que de bidouiller la config d'apache.

HAProxy, "simple"? :huh:

J'ai essayé d'en digérer la doc histoire de faire quelques tests sur une version compilée par mes soins.

Un tube d'aspirine plus tard j'ai laissé tomber :wacko:

Lien vers le commentaire
Partager sur d’autres sites

HAProxy, "simple"? :huh:

J'ai essayé d'en digérer la doc histoire de faire quelques tests sur une version compilée par mes soins.

Un tube d'aspirine plus tard j'ai laissé tomber :wacko:

tout dépend de la manière dont le spk HAProxy sera proposé ... en tout cas je ne vois pas pourquoi ce serait plus compliqué que de modifier la conf apache

Lien vers le commentaire
Partager sur d’autres sites

tout dépend de la manière dont le spk HAProxy sera proposé ... en tout cas je ne vois pas pourquoi ce serait plus compliqué que de modifier la conf apache

C'est juste que je vois sans doute les chose par mon petit bout de lorgnette: quand je comprend le bidule, je qualifie de "simple", mais quand après un week-end de lectures et de tests sans résultats concluants je ne comprend toujours que pouic, découragé, je catégorise le truc comme "compliqué".

Mais on verra bien le si SPK sait rendre rendre la manip abordable pour le plus grand nombre.

Lien vers le commentaire
Partager sur d’autres sites

Je pense qu'il serait nécessaire d'expliquer comment mettre en place des filtres d’accès par adresse (équivalent des "allow from" sous apache)

Et sinon détailler la config pour ou deux exemples types (dsm en virtualhost sur le port 80, le meme en https), pas à pas en partant d'une config vierge serait sympa aussi.

Lien vers le commentaire
Partager sur d’autres sites

Hello tout le monde

Je vais mettre ma pierre a l'edifice...lol

alors perso ( et je dis bien perso ) je n'aime pas du tout cette config pour un seul point

Il faut ouvrir le port 80 et le 443 ..

Evident sinon comment le browser peut switcher de HTTP a HTTPS

Mais bon je suis d'accord que la feignantise de taper HTTPS/// devant le liens est difficile ...lol

et puis en plus ce n'est pas tres propres niveau config

car vous encapsuler du HTTPS dans du HTTP, sa peut fonctionner pour certaine applis mais pas toute d'ailleur c'est ce qu'il se passe

Pour basculer de HTTP en HTTPS il faut utiliser le Rewriting d'URL

en gros quand tu tape MON_SITE.DOMAINE.COM le reverse proxy va re-ecrire ( tu le verra dans ta barre d'adresse ) HTTPS://CE_QUE_TU_SOUHAITE

C'est nettement plus propre que de faire tout un tas de "cochonnerie" dans les fichier de config

Ne prenez pas mal mes propos faut plutot le prendre a la rigolade..

pas mal le HAPROXY dispo quand ?

Lien vers le commentaire
Partager sur d’autres sites

Je pense qu'il serait nécessaire d'expliquer comment mettre en place des filtres d’accès par adresse (équivalent des "allow from" sous apache)

Et sinon détailler la config pour ou deux exemples types (dsm en virtualhost sur le port 80, le meme en https), pas à pas en partant d'une config vierge serait sympa aussi.

Je pense enrichir la doc au fur et à mesure des demandes comme celle là. Si tu trouves les options qui te permettent de faire ce que tu souhaites, n'hésite pas à faire partager.

Chacun va pouvoir faire sa propre config en s'aidant de la doc de HAProxy et faire partager à tout le monde. Enfin, j'espère.

Modifié par Diaoul
Lien vers le commentaire
Partager sur d’autres sites

Si tu trouves les options qui te permettent de faire ce que tu souhaites, n'hésite pas à faire partager.

Ma seule compétence sur haproxy date du week-end ou j'ai essayé d'éplucher la doc et ou j'ai finalement abandonné, dépassé par les près de 10000 lignes de cette dernière.

Donc, je me vois pas pres de trouver l'option en question :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.