Post

Pangolin - Gestion Sécurisée des Ressources Privées

Pangolin - Gestion Sécurisée des Ressources Privées

La gestion sécurisée des ressources privées sur les réseaux distribués représente un défi de longue date, notamment dans des environnements où les restrictions de pare-feu limitent l’exposition des services. C’est dans ce contexte que Pangolin, un serveur proxy inverse mesh avec tunnels chiffrés, se positionne comme une solution efficace. Il permet un accès distant sécurisé sans nécessiter l’ouverture de ports. Ce projet open source constitue une alternative auto-hébergée aux solutions telles que Cloudflare Tunnels, offrant aux administrateurs un contrôle accru sur leur infrastructure et leur sécurité.(Documentation Pangolin)

⚡ 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é. Pangolin nécessite généralement un minimum de ressources pour fonctionner efficacement. Un VPS de base avec 1 vCPU, 1 Go de RAM et 8 Go SSD est suffisant pour la plupart des déploiements.
    • Exigences minimales
      • CPU : 1 vCPU
      • RAM : 1GB
      • Stockage : 8GB SSD
    • Spécifications recommandées
      • CPU : 2 vCPU
      • RAM : 2GB
      • Stockage: 20GB SSD
  • Un nom de domaine qui pointe vers l’IP de votre VPS.
  • Ports TCP 80, 443 et port UDP 51820 ouverts.
  • Une adresse électronique pour l’enregistrement du certificat Let’s Encrypt.
  • Facultatif : Un serveur SMTP.

💾 Installation sur VPS

vps-1780de45.vps.ovh.net 4 vCPU Cores 8 Go RAM 75 Go SSD NVME 1 Backup auto Location: Gravelines IP: 51.38.37.240 IPv6: 2001:41d0:305:2100::c1c OS: Debian 13 Domaine: yick.eu

Télécharger le programme d’installation Connectez-vous à votre serveur via SSH et téléchargez le programme d’installation:

1
curl -fsSL https://static.pangolin.net/get-installer.sh | bash

Le programme d’installation prend en charge les architectures AMD64 (x86_64) et ARM64.

Exécuter le programme d’installation Exécutez l’installateur avec des privilèges root:

1
sudo ./installer

Le programme d’installation place tous les fichiers dans le répertoire courant. Déplacez le programme d’installation dans le répertoire d’installation souhaité avant de l’exécuter.

Configurer les paramètres de base

L’installateur vous invitera à une configuration essentielle:

  • Domaine de base: Entrez votre domaine racine sans sous-domaines (par exemple, example.com)
  • Dashboard Domain : Appuyez sur Entrée pour accepter la valeur par défaut pangolin.example.comou entrez un domaine personnalisé
  • Let’s Encrypt Email : Fournir un e-mail pour les certificats SSL et la connexion admin
  • Tunneling : Choisissez d’installer Gerbil pour les connexions tunnelées (par défaut: oui). Vous pouvez faire tourner Pangolin sans tunnel. Il fonctionnera comme un proxy inverse standard(non).

Configurer l’email (facultatif) La fonctionnalité de messagerie est optionnelle et peut être ajoutée ultérieurement. Choisissez d’activer la fonctionnalité d’email SMTP:

  • Par défaut : Non (recommandé pour la configuration initiale)
  • Si activé: Vous aurez besoin de détails du serveur SMTP (hôte, port, nom d’utilisateur, mot de passe)

Installation de CrowdSec (facultatif) Le script propose également l’installation de CrowdSec pour renforcer la sécurité :

  • Valeur par défaut : Non (recommandé au départ)
  • Si activé, vous confirmez que vous êtes prêt à :
    • gérer la configuration CrowdSec
    • maintenir les règles et décisions associées 👉 CrowdSec peut être ajouté plus tard, une fois Pangolin correctement opérationnel.

Démarrer l’installation Confirmez que vous souhaitez installer et démarrer les conteneurs:

  • L’installateur va tirer des images Docker (pangolin, gerbil, traefik)
  • Les conteneurs seront démarrés automatiquement
  • Ce processus prend 2-3 minutes selon votre connexion Internet

Vous verrez des indicateurs de progrès lorsque chaque conteneur est tiré et démarré.

Configuration post-installation

Paramètres de base

  • Domaine de base: yick.eu
  • Dashboard Domain :pangolin.yick.eu
  • Let’s Encrypt Email : yannick@cinay.eu

Une fois l’installation terminée avec succès, vous verrez:

1
2
3
4
Installation complete!

To complete the initial setup, please visit:
https://pangolin.yick.eu/auth/initial-setup

Accéder au tableau de bord

Accédez à l’URL affichée dans la sortie du programme d’installation:

1
https://pangolin.yick.eu/auth/initial-setup

Le tableau de bord doit se charger avec un certificat SSL configuré automatiquement. Cela peut prendre quelques minutes pour que le premier certificat puisse le valider, alors ne vous inquiétez pas si le navigateur lance un avertissement non sécurisé.

Créer un compte d’administrateur

Complétez la configuration initiale de l’utilisateur administrateur:

  • Entrez votre adresse email d’administrateur
  • Définir un mot de passe fort
  • Vérifiez votre email (si l’email est configuré)

Utilisez un mot de passe fort et unique pour votre compte d'administrateur. Ce compte a un accès complet au système.

Créez votre première organisation

Après vous être connecté:

Organisation “pangoyan”

  1. Entrez le nom et la description de l’organisation
  2. Cliquez sur « Créer une organisation » nommée pangoyan

Site - pangoyanone

Ajouter le site pangoyanone à cette organisation Chaque site est fourni avec un identifiant unique (ID), secret et point de terminaison. Le site utilise la combinaison de ces trois pour établir une connexion sécurisée et cryptée au serveur.

🖇️ Site - Lier votre serveur local à votre instance Pangolin

Un site est une connexion à un réseau distant qui permet à Pangolin de fournir un accès aux ressources, qu’elles soient publiques ou privées, aux utilisateurs n’importe où. Les sites sont la base de l’exposition des ressources parce que toutes les ressources existent sur un ou plusieurs sites. Newt est le connecteur logiciel personnalisé de Pangolin qui facilite la connexion et répond aux cibles sur les réseaux distants.

Site Newt (Recommandé)

Ce site vous permet d’exposer des ressources sur un réseau distant via un tunnel entièrement géré et un websocket. Cela nécessite que le connecteur Newt fonctionne sur le réseau distant. C’est le plus facile à utiliser et nécessite le moins de configuration. Aucune configuration NAT requise. Nous recommandons d’utiliser les sites Newt dans presque tous les cas. Newt est le type de connecteur principal et prend en charge le plus de fonctionnalités. Support des sites Newt:

  • Ressources publiques HTTPS proxy
  • Ressources privées
  • Équilibre de charge
  • Vérification de la santé
  • Scanner la prise Docker
  • Et plus… Installez Newt comme conteneur binaire ou Docker
    Sites Newt - Installation binaire (recommandé)

    Utilisez cette commande pour installer automatiquement Newt. Il détecte automatiquement l’architecture de votre système et télécharge toujours la dernière version

    1
    
    curl -fsSL https://static.pangolin.net/get-newt.sh | bash
    

    Le binaire newt est installé dans $HOME/.local/bin/
    On utilise le service systemd, il faut déplacer le binaire puis supprimer le dossier $HOME/.local/bin/

    1
    2
    
    sudo mv $HOME/.local/bin/newt /usr/local/bin/
    rm -r $HOME/.local/bin/
    

    Créer un service systemd de base: /etc/systemd/system/newt.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Newt
After=network.target

[Service]
ExecStart=/usr/local/bin/newt --id 31frd0uzbjvp721 --secret h51mmlknrvrwv8s4r1i210azhumt6isgbpyavxodibx1k2d6 --endpoint https://pangolin.yick.eu
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Recharger et lancer le service

1
2
sudo systemctl daemon-reload
sudo systemctl enable newt --now

Vérification

1
janv. 01 07:26:49 alder newt[76254]: INFO: 2026/01/01 07:26:49 Client connectivity setup. Ready to accept connections from clients!
Sites Newt - Installation docker

Sur votre serveur local, créez votre docker-compose.yml et le fichier .env dans le dossier ou vous comptez installer newt : docker-compose.yml

1
2
3
4
5
6
7
8
9
services:
  newt:
    image: fosrl/newt
    container_name: newt
    restart: unless-stopped
    environment:
      - PANGOLIN_ENDPOINT=${PANGOLIN_ENDPOINT}
      - NEWT_ID=${NEWT_ID}
      - NEWT_SECRET=${NEWT_SECRET}

.env

1
2
3
PANGOLIN_ENDPOINT=https://pangolin.yick.eu
NEWT_ID=7ws8h6qqisvht38
NEWT_SECRET=krmu39lkcck62aln8z7k3flzl07s3b2bza526ywqwrjldblw

On déploie l’application :

1
2
docker compose up -d
docker logs -f newt

Sur votre instance Pangolin –> Noeuds Le site pangoyanone est bien En ligne

🪨 Ressource

Une ressource représente un service que l’on souhaite exposer ou rendre accessible via Pangolin. Il existe deux types de ressources :

  • Ressource publique : exposée sur Internet
  • Ressource privée : accessible uniquement aux utilisateurs connectés au client Pangolin.

Par défaut, aucune ressource n’est mise à disposition sur les sites. Les administrateurs doivent définir des ressources avec des cibles backend et attribuer des stratégies d’accès spécifiques avant que tous les utilisateurs puissent y accéder.

Ressource publique (exposition applicative)

Une ressource publique fonctionne comme un reverse proxy. On définit :

  • un domaine
  • une ou plusieurs cibles (protocole + adresse + port)
  • des options de sécurité et de routage Il est possible de configurer plusieurs cibles pour une même ressource.
    L’intérêt est de pouvoir :
  • répartir la charge entre plusieurs serveurs ou sites
  • assurer une continuité de service en cas de panne Pangolin permet également d’activer l’authentification sur une ressource publique.
    Dans ce cas, l’utilisateur doit d’abord se connecter au portail Pangolin (SSO) avant d’accéder à l’application.

    Ressource privée (accès interne sécurisé)

    Une ressource privée permet d’accéder à un service sans aucune exposition publique. On définit :

  • une cible (adresse interne)
  • un ou plusieurs ports
  • les utilisateurs autorisés Il est possible de définir un alias afin de faciliter l’accès à la ressource. 👉 Ce type de ressource est idéal pour :
  • SSH
  • bases de données
  • dashboards internes
  • outils d’administration Aucun port public n’est ouvert.

    Création ressource publique

    Une ressource publique permet d’exposer une application via HTTPS, en s’appuyant sur Pangolin comme reverse proxy sécurisé. Lors de la création d’une ressource publique, plusieurs paramètres sont à renseigner.

    Informations sur la ressource

  • Type
    • Ressource HTTPS : proxy HTTP/HTTPS basé sur un nom de domaine
    • Ressource TCP/UDP brute : proxy TCP ou UDP basé sur un port
      (dans le cas d’une exposition web classique, on choisit Ressource HTTPS)
  • Nom
    • Nom d’affichage de la ressource dans le dashboard Pangolin (linkwarden)

      Paramètres HTTPS

  • Sous-domaine
    Sous-domaine à exposer (link)
  • Domaine de base
    Domaine racine sélectionné lors de l’installation
    (yick.eu)

➡️ L’URL finale sera par exemple :
https://link.yick.eu

Configuration des cibles

Une ou plusieurs cibles peuvent être définies pour acheminer le trafic vers les services backend. Pour chaque cible, on configure :

  • Nœud Pangolin
    Node par lequel le trafic est routé ( pangoyanone)
  • Protocole
    Généralement http ou https (http)
  • Adresse (Host)
    Adresse interne du service (192.168.0.222)
  • Port
    Port du service backend ( 3000)

Il est possible d’ajouter plusieurs cibles afin de :

  • répartir la charge
  • assurer une haute disponibilité

    Vérification de l’état de santé (Healthcheck)

    Pangolin permet d’activer une vérification de l’état de santé sur chaque cible :

  • port de vérification configurable
  • intervalle personnalisable
  • statut visible dans le dashboard 👉 Le healthcheck est fortement recommandé lorsqu’il y a plusieurs cibles, afin d’éviter d’envoyer du trafic vers un service indisponible.

    Contrôler l’authentification des ressources

  • Les ressources publiques peuvent être protégées par l’authentification Pangolin
  • L’utilisateur devra alors se connecter via le portail Pangolin (SSO) avant d’accéder à l’application Par défaut, Pangolin configurera toute nouvelle ressource à exécuter sous sa plateforme d’authentification. Essentiellement, cela signifie que toute personne qui tente d’accéder à votre nom de domaine sera invitée à se connecter à Pangolin pour y accéder.

Pour ce guide, nous allons laisser SSO activé car il aide à empêcher les utilisateurs externes d’accéder au logiciel que nous hébergeons.

Dans la partie Authentification, 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é.

  • Rôles => Choisissez le rôle. Member.
  • Utilisateurs => Choisissez le ou les Utilisateurs qui peuvent y avoir accès. Cliquez sur Enregistrer les conteôles d’accès pour terminer.

Accéder à votre ressource

Maintenant, si nous devions nous diriger vers le sous-domaine que nous venons de mettre en place, nous serons accueillis par un écran d’authentification requis. Pour accéder à votre nouveau logiciel, remplissez votre email et mot de passe pour votre compte

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éation d’une ressource privée

Une ressource privée permet de donner accès à un service interne sans aucune exposition publique.
Elle est uniquement accessible aux utilisateurs authentifiés via Pangolin.

Lors de la création d’une ressource privée, on définit :

  • Nom : nom explicite de la ressource (proxmox)
  • Nœud : node Pangolin par lequel le réseau est joint (pangoyanone)
  • Destination : adresse interne de la cible
    (nom d’hôte, adresse IP ou plage CIDR selon le mode choisi)
  • Alias (optionnel) : nom DNS interne pour simplifier l’accès
  • Restrictions de ports :
    • TCP : ports autorisés ou tous
    • UDP : ports autorisés ou tous
    • ICMP : autorisé ou non

Exemple de configuration

  • Type : TCP
  • Destination : 192.168.1.10
  • Port autorisé : 22
  • Alias : monserveur.lan
  • Accès : réservé aux utilisateurs authentifiés dans l’organisation 👉 Aucun port public n’est exposé sur Internet.

Accès à une ressource privée

Pour accéder aux ressources privées, il est nécessaire d’installer le client Pangolin sur le poste utilisateur. Téléchargement du client officiel :
👉 https://pangolin.net/downloads

Étapes côté client

  1. Télécharger et installer le client Pangolin
    Utilisez l’installeur officiel (.msi sous Windows, ou équivalent selon l’OS).
  2. Lancer Pangolin
    Ouvrez l’application depuis le menu Démarrer ou le raccourci bureau.
  3. Se connecter à votre instance Pangolin
    • Connectez-vous à votre instance Pangolin auto-hébergée
    • Cliquez sur l’icône Pangolin dans la barre système
    • Sélectionnez Log in

Vous devriez avoir ça sur votre client. Client

Une fois connecté, les ressources privées définies dans l’organisation deviennent accessibles de manière sécurisée. Par exemple taper dans votre navigateur : http://serveur.lan vous pourrez accéder à votre ressource privée via votre alias.

🔗 Créer un lien partageable (NON CONSEILLE)

Le lien de partage donné permet un accès temporaire ou permanent à votre ressource sans que l’invité n’ait besoin d’être connecté par le tunnel. Lors de la création d’un lien, vous avez la possibilité de définir sa durée de validité.

  • 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 section Utilisateurs, cliquez sur : +Créer un utilisateur

Lorsque votre utilisateur se rendra sur le lien avant les 7 jours, il verra ceci :

Il devra renseigner :

  • Adresse mail => Il devra choisir l’e-mail servant pour son compte utilisateur.
  • Mot de passe => Il devra également choisir un mot de passe pour son compte utilisateur.
  • Confirmer mot de passe => Il devra confirmer son mot de passe.

Quand votre invité aura fini de remplir le formulaire, il devra cliquer sur Créer un compte, il sera redirigé ici :

Partager une ressource avec l’utilisateur

Pour partager une ressource avec un utilisateur, rendez-vous dans l’onglet Ressources -> Publique de votre instance Pangolin et cliquez sur Modifier : Dans la partie Authentification, il faudra ajouter son nom

N’oubliez pas de sauver en cliquant sur Enregistrer les contrôles d’accès.

🔑 Activer la 2FA pour un utilisateur

Se connecter en administrateur

Activer la 2FA pour un utilisateur

Connexion utilisateur L’utilisateur devra s’authentifier avec son mot de passe Pour terminer, scanner le QR Code ou la clé otpauth puis saisir le code de vérification Sauvegarder les clés de secours On arrive sur la page des ressources accessibles par l’utilisateur

Lors de la prochaine connexion,l’utilisateur devra fournir le code pour la double authentification

🔑 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

💡 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
    ...
Cet article est sous licence CC BY 4.0 par l'auteur.