Ouvrir vos services vers Internet avec Nginx Proxy Manager ou Synology DSM

Ouvrir vos services vers Internet avec Nginx Proxy Manager ou Synology DSM

On vous montre sur ce blog tout un tas de services à héberger chez vous ou sur un serveur dans le cloud, et vous pouvez y accéder quand vous êtes sur votre réseau local.
Mais comment faire pour les rendre disponibles quand vous êtes en déplacement ou n'y êtes simplement pas connectés ?

C'est là qu'intervient un proxy inversé (appelé reverse proxy), qui a pour rôle de servir d'intermédiaire entre Internet et un serveur d'application interne et les services hébergés. En plus de mettre à disposition vos applications sur Internet, un reverse proxy peut apporter une sécurité accrue (avec chiffrement du trafic, authentification, ...) ou améliorer les performances (mise en cache, répartition de charge, compression, ...).

Schématiquement, un flux venant de l'extérieur suivra le process suivant :

  • Depuis un navigateur, vous saisissez une URL (un nom de domaine), qui est configurée auprès de votre fournisseur de nom de domaine pour pointer vers l'adresse IP publique de votre box internet (ou l'IP du serveur dans le cloud).
  • Une règle redirige les connexions entrantes du routeur vers le reverse proxy.
  • Des règles définies dans le reverse proxy vont rediriger le trafic pour un nom de domaine vers un service en particulier.

Nous allons voir ensemble comment configurer un reverse proxy, en premier lieu celui intégré dans DSM, le système d'exploitation de Synology, puis Nginx Proxy Manager, une version graphique et simplifiée de NGINX.


Prérequis

Que ce soit pour l'une ou l'autre des méthodes qui vous sont présentées, il vous faudra dans tous les cas respecter les étapes suivantes :

  • Définissez auprès de votre fournisseur de nom de domaine une entrée DNS de type A vers l'adresse IP publique de votre box internet (ou l'IP du serveur dans le cloud). Ci-dessous un exemple sur OVH.
  • Créez une règle sur votre box internet ou routeur pour rediriger tout le trafic des ports 80 et 443 depuis Internet vers la machine qui fera office de reverse proxy. Cette étape est facultative dans le cas d'un serveur dans le cloud. Vous trouverez une capture de comment la redirection est faite au sein d'UniFi Controller.

Utiliser le reverse proxy intégré à Synology DSM

Synology intègre dans son système d'exploitation DSM un reverse proxy, avec une configuration relativement simple, même s'il peut être un peu limitée en fonctionnalités. Mais cela suffit amplement pour un besoin simple, comme ce que nous allons faire. Pour configurer un accès depuis un nom de domaine à un service hébergé sous Docker, nous allons prendre dans notre exemple l'URL portainer.domopi.eu qui nous permettra d'accéder à l'instance Portainer, accessible sur notre réseau local sur le port 9000.

  • Sur DSM, rendez-vous dans le Panneau de Configuration, puis dans "Portail de Connexion". Dans l'onglet "Avancé", cliques sur le bouton "Proxy inversé".
  • Cliquez sur le bouton "Créer" et renseignez les informations demandées, à savoir le nom de la règle, ainsi que le protocole d'accès (http ou https ),  le nom d'hôte et le port d'accès pour la source et la destination. Pour la source, le nom d'hôte correspond au nom de domaine (portainer.domopi.eu pour l'exemple) et le port est 80 pour http ou 443 pour https (on choisit https pour sécuriser l'accès). Pour la destination, le protocole est http, le nom d'hôte correspond à l'adresse IP de l'hôte du service sur votre réseau local et port
  • On a sélectionné le protocole https pour la source, et on va donc générer un certificat pour chiffrer la communication. Toujours dans le Panneau de configuration, rendez-vous dans la partie "Sécurité" puis dans l'onglet "Certificat" et cliquez sur "Ajouter".
  • Sélectionnez "Ajouter un nouveau certificat", donnez un nom à celui-ci et choisissez de vous procurer un certificat auprès de Let's Encrypt, un fournisseur gratuit de certificats.
  • Renseignez le nom de domaine pour lequel le certificat va être généré et une adresse mail sur laquelle vous recevrez une alerte avant son expiration.
  • Une fois le certificat généré, il faut l'affecter à la règle du reverse proxy. Pour cela, toujours dans l'onglet "Certificat", rendez-vous cette fois dans les "Paramètres", cherchez la ligne correspondant à votre nom de domaine et sélectionnez le certificat tout juste généré.
  • Vous pouvez maintenant vous rendre depuis votre navigateur sur l'URL https://nom.de.domaine

Utiliser la fonction reverse proxy intégrée au sein de votre Nas Synology est bien pratique, et vous permettra de vous donner accès aux services que vous pouvez y héberger, avec un nom de domaine personnalisé et de manière sécurisée.


Utiliser Nginx Proxy Manager

Nginx Proxy Manager inclut NGINX (un serveur web pouvant agir en tant que reverse proxy) ainsi qu'une interface graphique développée par Jamie Curnow (jc21) en 2018. Nginx Proxy Manager est open source et fournit une interface graphique pour la gestion des fichiers de configuration Nginx. Il est recommandé de lancer Nginx Proxy Manager dans une stack Docker-Compose, qui est fournie par son créateur :

version: '3'
services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    ports:
      - 80:80  # Port http pour les redirections
      - 81:81  # Port pour l'interface de gestion et d'administration
      - 443:443  # Port https pour les redirections
    environment:
      DB_MYSQL_HOST: "npm_db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    labels:
      - com.centurylinklabs.watchtower.enable=true
    restart: always

  npm_db:
    image: jc21/mariadb-aria:latest
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/db:/var/lib/mysql
    labels:
      - com.centurylinklabs.watchtower.enable=true
    restart: always

Pour lancer la stack, utilisez la commande docker-compose up -d. Rendez-vous avez votre navigateur sur l'adresse http://IP.HOTE.DOCKER:81 pour afficher la page d'administration. Identifiez-vous avec l'adresse admin@example.com  et le mot de passe changeme.

Une fois connecté, il vous sera demandé de renseigner vos noms/prénoms ainsi que votre adresse mail, puis le mot de passe du compte.

Nous allons maintenant ajouter une redirection, en cliquant sur "Host", puis "Proxy Hosts" et "Add Proxy Host".
Renseignez le nom de domaine (et cliquez bien sur "Add"), indiquez les informations de l'URL à joindre sur votre réseau local, notamment si le service est joignable en http ou https, l'IP de la machine qui héberge le service ainsi que son port.
Pour sécuriser le service avec un certificat, rendez-vous dans l'onglet "SSL", où on va définir que l'on souhaite un nouveau certificat Let's Encrypt (ou en réutiliser un existant). On peut forcer l'utilisation du SSL, et activer le HSTS (qui permet de rediriger automatiquement les connexions http vers https). Il faut également renseigner l'adresse email pour Let's Encrypt et accepter les conditions d'utilisation du service. Enfin, on sauvegarde.

On peut tester de se rentre sur l'adresse définie pour voir que ça fonctionne et que la connexion se fait bien de manière sécurisée.


Conclusion

Après avoir utilisé pendant des années le reverse proxy de DSM, par simplicité et parce que je ne connaissais pas (et ne prenait pas le temps de connaitre) d'autres outils, j'ai finalement migré toutes mes règles vers Nginx Proxy Manager suite à un problème sur mon Nas Synology, qui a donc rendu indisponible depuis Internet les services que j'hébergeais.
Nginx Proxy Manager a également quelques fonctionnalités avancées plus complètes et est plus personnalisable que le reverse proxy de DSM, avec notamment la possibilité d'activer ou désactiver des règles, ainsi que d'ajouter des configurations spécifiques nginx si besoin.

Je vous avais évoqué Traefik dans l'article sur l'architecture du blog. Traefik est également un reverse proxy, encore plus complet que Nginx Proxy Manager, mais aussi plus complexe à appréhender et à mettre en place. Nous verrons pour y dédier un article quand nous aurons le temps de creuser sa mise en place et son fonctionnement.

Si vous avez des questions sur la mise en place d'un reverse proxy ou souhaitez simplement échanger avec nous, n'hésitez pas à laisser des commentaires ou à venir sur notre groupe Telegram.