Installer Pangolin avec Docker
Pangolin

Installer Pangolin avec Docker

Table des matières

GitHub - fosrl/pangolin: Tunneled Reverse Proxy Management Server with Identity and Access Control and Dashboard UI
Tunneled Reverse Proxy Management Server with Identity and Access Control and Dashboard UI - fosrl/pangolin

Connaissez-vous le pangolin ? Cet animal accusé d'être à l'origine du COVID... Et bien cela n'a strictement rien avoir avec l'article qui va suivre.

Aujourd'hui nous allons parler de Pangolin ! Pour faire très court et imagé, c'est comme si vous aviez votre propre CloudFlare (avec le tunnel, authentification,...), mais pas que ! La liste des possibilités est longue, je vous propose de lire ce qui suit.

Et voilà comment plier une intro sans se fatiguer.

Ce tutoriel traite de trois types d'installations:

  • L'installation sur VPS : Utilisez Pangolin qui fera office de Cloudflare. Cela permet de ne pas ouvrir les ports de votre routeur. Cela peut également s'avérer utile si vous avez des restrictions de votre FAI pour ouvrir les ports 80 et 443 ou que vous n'avez pas forcément accès au routeur.

Dans ce cas, suivez ce lien :

Installer Pangolin avec Docker
Tutoriel d’installation de Pangolin, un serveur de gestion de reverse proxy tunnelisé auto-hébergé avec contrôle d’identité et d’accès.
  • L'installation en local : Utilisez Pangolin comme simple reverse proxy.

Dans ce cas, suivez ce lien:

Installer Pangolin avec Docker
Tutoriel d’installation de Pangolin, un serveur de gestion de reverse proxy tunnelisé auto-hébergé avec contrôle d’identité et d’accès.
  • L'installation avec WireGuard : Permet d'accéder à des ressources sur le serveur local par WireGuard si le déploiement de newt n'est pas possible, par exemple.

Dans ce cas, suivez ce lien:

Installer Pangolin avec Docker
Tutoriel d’installation de Pangolin, un serveur de gestion de reverse proxy tunnelisé auto-hébergé avec contrôle d’identité et d’accès.

⚡ Caractéristiques

Proxy inverse via le tunnel WireGuard

  • Exposez les ressources privées sur votre réseau sans ouvrir de ports.
  • Connectivité site à site sécurisée et facile à configurer via un client WireGuard personnalisé, Newt.
  • Prise en charge intégrée de tous les clients WireGuard.
  • Certificats SSL automatisés (https) via LetsEncrypt.
  • Prise en charge des services HTTP/HTTPS et TCP/UDP bruts.

Gestion des identités et des accès

  • Système d'authentification centralisé utilisant la plateforme SSO. Les utilisateurs ne devront gérer qu'un seul login.
  • Totp avec codes de sauvegarde pour l'authentification à deux facteurs.
  • Créer des organisations, chacune avec plusieurs sites, utilisateurs et rôles.
  • Contrôle d'accès basé sur les rôles pour gérer les autorisations d'accès aux ressources.
  • D'autres options d'authentification sont disponibles :
    Liste blanche des courriels avec codes d'accès à usage unique.
    Liens de partage temporaires et autodestructifs.
    Codes pin spécifiques aux ressources.
    Mots de passe spécifiques aux ressources.

Une interface simple pour le tableau de bord

  • Gérer les sites, les utilisateurs et les rôles à l'aide d'une interface utilisateur claire et intuitive.
  • Contrôle de l'utilisation du site et de la connectivité.
  • Options de mode clair et foncé.
  • Adaptée aux mobiles.

Déploiement facile

  • Configuration basée sur Docker Compose pour un déploiement simplifié.
  • Script d'installation à l'épreuve du temps pour une installation rationalisée et des ajouts de fonctionnalités.
  • Fonctionne sur n'importe quel VPS.
  • Utilisez votre client WireGuard préféré pour vous connecter, ou utilisez Newt. notre client d'espace utilisateur personnalisé pour une meilleure expérience.

Conception modulaire

  • Étendez les fonctionnalités avec les plugins Traefik existants, tels que Fail2Ban ou CrowdSec, qui s'intègrent de manière transparente.
  • Attachez autant de sites que vous le souhaitez au serveur central.

🗒️ Prérequis

  • Un VPS sous Linux. Ubuntu ou Debian recommandé.
  • Un nom de domaine qui pointe vers l'IP de votre VPS.
  • Ports TCP 80, 443 et port UDP 51820 exposés.
  • Une adresse électronique pour l'enregistrement du certificat Let's Encrypt.
  • Facultatif : Un serveur SMTP.

Si vous utilisez Cloudflare, allez dans l'onglet SSL/TLS sur Vue d'ensemble :

Cliquez sur Configuer :

Dans la partie SSL/TLS personnalisé, cliquez sur Sélectionner :

Cochez Complet :

Terminez en cliquant sur Enregistrer :

Rendez-vous maintenant dans la partie DNS, Enregistrements :

Ajoutez 2 entrées :

  • Une de type A avec @ dans la partie Nom et l'IP publique de votre VPS dans Contenu.
  • Une entrée de type CNAME avec une * dans le champ Nom et ajouter, dans Contenu, votre domaine. Cela servira pour la wildcard.
⚠️
On ne coche pas le proxy. État du proxy sur DNS uniquement.

💾 L'installation sur VPS

Suivant l’architecture de votre CPU, il faudra adapter

⚠️
Le programme d'installation doit être exécuté en tant que root.
  1. Téléchargez l'installer.

Pour amd64 :

wget -O installer "https://github.com/fosrl/pangolin/releases/download/1.0.0-beta.14/installer_linux_amd64" && chmod +x ./installer

Pour arm64 :

wget -O installer "https://github.com/fosrl/pangolin/releases/download/1.0.0-beta.14/installer_linux_arm64" && chmod +x ./installer

Lancez l'installer :

sudo ./installer

Répondez à quelques questions :

=== Basic Configuration ===

  • Enter your base domain (no subdomain e.g. example.com): tutobelginux.ovh => Entrez votre domaine. Pas de sous domaine ! Validez avec la touche Entrée/Enter de votre clavier.
  • Enter the domain for the Pangolin dashboard (default: pangolin.tutobelginux.ovh): => Soit vous laissez par défaut l'URL pour joindre votre instance Pangolin, qui sera sous la forme pangolin.votredomaine.com ou choisissez votre sous domaine. Validez avec la touche Entrée/Enter de votre clavier.
  • Enter email for Let's Encrypt certificates: zarev@belginux.com => Entrez une adresse e-mail pour les certificats Let's Encrypt. Validez avec la touche Entrée/Enter de votre clavier.
  • Do you want to use Gerbil to allow tunned connections (yes/no) (default: yes): => Validez avec la touche Entrée/Enter de votre clavier.

=== Admin User Configuration ===

  • Enter admin user email (default: admin@tutobelginux.ovh): zarev@belginux.com => Entrez l'e-mail du compte administrateur souhaité. Validez avec la touche Entrée/Enter de votre clavier.
  • Create admin user password: => Choisissez un mot de passe pour votre compte administrateur, un mot de passe fort de préférence. Il ne sera pas affiché, c'est normal. ⚠️ Veillez à mettre votre mot de passe entre des " " s'il comporte des signes spéciaux ou un point. Validez avec la touche Entrée/Enter de votre clavier.
  • Confirm admin user password: => Confirmez à nouveau votre mot de passe. Validez avec la touche Entrée/Enter de votre clavier.

=== Security Settings ===

  • Disable signup without invite (yes/no) (default: yes): => Validez avec la touche Entrée/Enter de votre clavier.
  • Disable users from creating organizations (yes/no) (default: no): => Validez avec la touche Entrée/Enter de votre clavier.

=== Email Configuration ===

  • Enable email functionality (yes/no) (default: no): => Cela n'est pas un frein pour la création d'utilisateur de ne pas avoir de serveur mail car vous pouvez très bien l'inviter avec un lien. Validez avec la touche Entrée/Enter de votre clavier.

Maintenant il sera demandé si vous voulez installer Docker si le script ne détecte pas sa présence, validez avec la touche Entrée/Enter de votre clavier :

Il est temps à présent d'installer tous les containers nécessaires, validez avec la touche Entrée/Enter de votre clavier :

C'est terminé !


🔌 Première connexion et terminer la configuration

Rendez-vous sur le sous domaine de votre instance Pangolin et remplissez les informations demandées :

  • Email => Entrez l'e-mail de votre compte administrateur.
  • Password => Entrez le mot de passe de votre compte administrateur.

Vous serez redirigé ici :

  • Organization Name => Choisissez un nom pour votre organisation.
  • Organization ID => Il va se compléter automatiquement. Si non, vous pouvez le changer.

Cliquez sur Create Organization pour terminer.

Configurez votre nouvelle organisation

  • Name => Tapez un nom.
  • Method => Newt.
  • Copiez toute la ligne qui comme par newt - -id sous This is how you will expose connextions. Conservez bien cela de côté.

Cliquez sur Create Site pour terminer.

Vous voici sur votre instance :


🖇️ Lier votre serveur maison à votre instance Pangolin

Maintenant il va falloir créer un tunnel sécurisé entre votre serveur maison et votre instance Pangolin sur votre VPS.

Plus haut, je vous avais demandé de copier la ligne commençant par newt - -id, dans mon cas :

newt --id 7ws8h6qqisvht38 --secret krmu39lkcck62aln8z7k3flzl07s3b2bza526ywqwrjldblw --endpoint https://pangolin.tutobelginux.ovh

Il faut noter qu'il y a 3 éléments importants, nous y reviendrons sous peu :

  • L'ID => 7ws8h6qqisvht38
  • Le secret => krmu39lkcck62aln8z7k3flzl07s3b2bza526ywqwrjldblw
  • Le endpoint => https://pangolin.tutobelginux.ovh

Sur votre serveur maison, créez votre compose.yml dans le dossier ou vous comptez installer newt :

services:
    newt:
        image: fosrl/newt
        container_name: newt
        restart: unless-stopped
        environment:
            - PANGOLIN_ENDPOINT=https://pangolin.tutobelginux.ovh
            - NEWT_ID=7ws8h6qqisvht38
            - NEWT_SECRET=krmu39lkcck62aln8z7k3flzl07s3b2bza526ywqwrjldblw
  • PANGOLIN_ENDPOINT=https://pangolin.tutobelginux.ovh => Remplacez https://pangolin.tutobelginux.ovh par votre endpoint à vous.
  • NEWT_ID=7ws8h6qqisvht38 => Remplacez 7ws8h6qqisvht38 par votre propre ID.
  • NEWT_SECRET=krmu39lkcck62aln8z7k3flzl07s3b2bza526ywqwrjldblw => Remplacez krmu39lkcck62aln8z7k3flzl07s3b2bza526ywqwrjldblw par votre secret.

On va déployer l'application :

docker compose up -d

Rendez-vous sur votre instance Pangolin, partie Sites, c'est bien relié et Online :


🪨 Créer une ressource

Imaginons que vous vouliez accès à Portainer, qui est donc installé sur votre serveur maison.

Dans la partie Resources, cliquez sur :

Complétez les informations demandées :

  • Name => Nommez votre application, dans mon cas, Portainer.
  • HTTP Resource => Cochez cette option si ce n'est déjà pas fait.
  • Subdomain => Indiquez le sous domaine souhaité, dans mon cas portainer.
  • Site => Si vous avez plusieurs sites, choisissez celui que vous voulez, dans mon cas belginux.

Cliquez sur :

Vous serez redirigé ici :

  • SSL Configuration => Cochez cette case pour avoir un certificat Let's Encrypt.
  • Method => Portainer étant livré sur du HTTPS, je vais choisir HTTPS, dans beaucoup de cas ça sera HTTP.
  • IP / Hostname => Indiquez l'IP locale de votre serveur maison.
  • Port => Indiquez le port du container.

Cliquez sur Add Target, et pour terminer, sur Saves Target. On est bon !

Dans la partie Authentication, vous allez pouvoir choisir comment vous authentifier. Vous avez une première partie, la plateforme SSO. Facultative mais qui permet de renforcer la sécurité.

  • Roles => Choisissez le rôle. Member.
  • Users => Choisissez le ou les Users qui peuvent y avoir accès.

Cliquez sur Save Users & Roles pour terminer. Si vous ne remplissez que cette partie, il vous sera demandé d'entrer votre compte utilisateur avant de pouvoir atteindre Portainer :

En cliquant sur Log In, je peux atteindre Portainer :

Vous pouvez aussi choisir un mot de passe ou un code PIN :

Dans ce cas, votre fenêtre d'authentification sera la suivante :

Ou encore :

Ou encore :


🔗 Créer un lien partageable

Le lien partageable fourni un accès temporaire ou illimité à votre ressource sans que l'invite ne soit connecté par le tunnel. Vous pouvez configurer la durée d'expiration du lien lorsque vous en créez un.

  • Resource => Choisissez quelle application vous voulez partager.
  • Title => Donnez un titre à ce partage, facultatif.
  • Expire In => Définissez une date d'expiration. Soit en minute, en heure, semaine, mois ou année. Vous pouvez également cocher Never expire pour qu'il n'expire jamais.

Quand vous êtes satisfait, cliquez sur Create Link pour terminer. Ce qui donne :

Partagez soit le QR Code ou le lien. Attention, quand vous aurez fermé la fenêtre, il ne sera plus jamais possible de revoir ces informations. Et faites attention, cela donne un accès direct à votre ressource !

Testons maintenant cette option ensemble !

On va se rendre sur le lien :

Et vous serez redirigé vers Portainer :


👥 Inviter un utilisateur pour qu'il se crée un compte sur votre instance

Dans la partie Users & Roles, cliquez sur :

Remplissez le formulaire :

  • Email => Indiquez l'e-mail de la personne à inviter.
  • Role => Indiquez le rôle de la personne. Membre ou Admin.
  • Valide For => Indiquez la validité de l'invitation.

Cliquez sur Create Invitation pour terminer, ce qui donne :

Lorsque votre utilisateur se rendra sur le lien, il verra ceci :

Il devra renseigner :

  • Email => Il devra choisir l'e-mail servant pour son compte utilisateur.
  • Password => Il devra également choisir un mot de passe pour son compte utilisateur.
  • Confirm Password => Il devra confirmer son mot de passe.

Quand votre invité aura fini de remplir le formulaire, il devra cliquer sur Create Account, il sera redirigé ici :

Partager une ressource avec l'utilisateur

Comme vous pouvez le constater sur le screenshot, il n'a accès à aucune ressource.

Pour partager une ressource avec un utilisateur, rendez-vous dans l'onglet Resources de votre instance Pangolin et cliquez sur Edit :

Dans la partie Authentication, il faudra ajouter son nom ici, dans Users :

N'oubliez pas de sauver en cliquant sur Save Users & Roles.


👮 Changer le rôle d'un utilisateur

Dans la partie Users & Roles, cliquez sur Manage :

Vous pourrez aisément changer le rôle de votre utilisateur :

Cliquez sur Save Acces Controls pour terminer.


🔑 Activer la 2FA pour un utilisateur

Un utilisateur aura la possibilité d'activer la 2FA. Il devra cliquer en haut à gauche sur son e-mail et cliquez sur Enable Two-factor :

Ensuite, il devra s'authentifier avec son mot de passe :

Pour terminer, scanner le QR Code et entrer le code de vérification et valider en cliquant sur Submit :

Dans la foulée, il aura les codes de récupération :

Lors de la prochaine connexion, il devra fournir le code :


💾 L'installation en local

Suivez exactement le tutoriel pour l'installation sur un VPS. Quand vous arrivez au point Configurez votre nouvelle organisation, revenez ici pour poursuivre le tutoriel :

Vous voilà donc au moment de créer votre nouvelle organisation :

  • Name => Nommez votre organisation.
  • Method => Choisissez Local.

Cliquez sur Create Site pour poursuivre.

Pour le reste, vous pouvez reprendre ici :

Installer Pangolin avec Docker
Tutoriel d’installation de Pangolin, un serveur de gestion de reverse proxy tunnelisé auto-hébergé avec contrôle d’identité et d’accès.

💾 L'installation avec WireGuard

Suivez exactement le tutoriel pour l'installation sur un VPS. Quand vous arrivez au point Configurez votre nouvelle organisation, revenez ici pour poursuivre le tutoriel.

Vous voilà donc au moment de créer votre nouvelle organisation :

  • Name => Nommez votre organisation.
  • Method => Choisissez WireGuard.

Faites bien attention à copier le fichier de configuration sous This is how you will expose connections.

Cliquez sur Create Site pour poursuivre.

Il suffira d'importer le fichier config dans votre client préféré WireGuard pour être connecté à votre serveur local :


💡 Astuce pour la mise à jour

Pour le moment l'application est en développement actif. Soit vous vous tenez au courant de l'évolution et vous modifiez dans le compose la ligne correspondant à l'image avec le numéro exacte de version :

services:
  pangolin:
    image: fosrl/pangolin:1.0.0-beta.13
    container_name: pangolin
    restart: unless-stopped
    ...

Ou en latest :

services:
  pangolin:
    image: fosrl/pangolin:latest
    container_name: pangolin
    restart: unless-stopped
    ...

zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.

Vous pourriez aussi aimer