Installer Warpgate avec Docker
Warpgate

Installer Warpgate avec Docker

Table des matières

GitHub - warp-tech/warpgate: Fully transparent SSH, HTTPS, Kubernetes, database and RDP/VNC bastion/PAM that doesn’t need additional client-side software
Fully transparent SSH, HTTPS, Kubernetes, database and RDP/VNC bastion/PAM that doesn’t need additional client-side software - warp-tech/warpgate

Merci à Marty McFly pour la suggestion ! Un gars qui a fait au total 21 ans de prison pour vol, séquestration, braquages, trafic d'organes et meurtres.

Je plaisante. Il n'a jamais volé.


Le principe du bastion, souvent appelé jump host, est simple : il sert de point de passage unique et contrôlé pour accéder à des services, machines ou protocoles internes, comme SSH, RDP ou des bases de données.

Aujourd'hui, nous allons parler de Warpgate ! Même si le système de bastion n'est pas nouveau, j'ai beaucoup aimé la simplicité de sa mise en place. Comme tu l'as deviné, il permet de gérer toutes les connexions de tes serveurs/services/protocoles à partir d'un même endroit, mais ce n'est pas tout !

Warpgate fonctionne avec des clés SSH pour sécuriser la connexion, t'offrant la possibilité de désactiver une bonne fois pour toutes la connexion SSH avec un mot de passe, qui est probablement le maillon le plus faible de la sécurité. Par la même occasion, tu pourras également désactiver la connexion avec le compte root.

La gestion des clés SSH est très simple.

Les clés SSH peuvent parfois rebuter, et pourtant ici, on n'en souffre pas. Promis.

Photo non contractuelle

Warpgate vous permet de partager un ou des accès avec un ou des utilisateurs, et toutes leurs actions peuvent être enregistrées. Zero Trust.

Comme annoncé plus haut, Warpgate ne prend pas en charge que le SSH, ah que non, ma petite chèvre, il prend en charge plusieurs protocoles qui pourraient t'intéresser ! Nous verrons quelques-uns de ces protocoles dans ce tutoriels.

Et, cerise sur le rameau, il ne nécessite pas d'agent à installer sur chaque serveur. Plutôt cool, non ?

Si tu as lu argent, relis la phrase.
💡
Le tutoriel à partir de Sécuriser son SHH est facultatif, mais vachement conseillé.

Allez, trêve de blabla, on y va ! Il y a pas mal à dire sur Warpgate.


⚡ Caractéristiques

Warpgate est un bastion intelligent et totalement transparent pour SSH, HTTPS, Kubernetes, MySQL, PostgreSQL, RDP et VNC, qui ne nécessite ni application cliente ni wrapper SSH.
  • Configurez-le dans votre zone DMZ, ajoutez des comptes utilisateurs et attribuez-les facilement à des hôtes et des URL spécifiques au sein du réseau.
  • Warpgate enregistrera chaque session pour que vous puissiez la visualiser (en direct) et la revoir ultérieurement via une interface web d’administration intégrée.
  • L’accès SSH, RDP et VNC via navigateur est intégré ; les clients natifs continuent de fonctionner.
  • Ce n'est pas un hôte de relais : il transfère la connexion directement vers la cible de manière totalement transparente pour le client.
  • Prise en charge native de l'authentification à deux facteurs (2FA) et de l'authentification unique (SSO) (TOTP et OpenID Connect)
  • Protection intégrée contre les attaques par force brute avec blocage d'IP et verrouillage des comptes utilisateurs
  • Fichier binaire unique sans dépendances.
  • Écrit en Rust.

How that fonctionne ?

Connexion par un terminal :

Connexion par une page web (facultatif) :


🤖 Usage de l'IA

Transparence concernant l’utilisation de l’IA

Fin 2025, ce projet a commencé à accepter les contributions assistées par l’IA. Les contributeurs sont tenus de signaler l’utilisation de l’IA. Je pense qu’en appliquant la même norme de qualité élevée à toutes les propositions de modification (PR), qu’elles soient assistées par l’IA ou non, il n’est pas nécessaire de faire de compromis en matière de qualité ou de sécurité.

L’IA représentant un spectre allant des « vibe bros » sans cervelle aux simples utilisateurs de la fonction de saisie semi-automatique, je pense que la transparence quant à son utilisation contribue à définir et à limiter la place de l’IA dans ce projet.

Les décisions relatives à l’architecture et à la sécurité de ce projet sont prises à 100 % par des humains.

GitHub - warp-tech/warpgate: Fully transparent SSH, HTTPS, Kubernetes, database and RDP/VNC bastion/PAM that doesn’t need additional client-side software
Fully transparent SSH, HTTPS, Kubernetes, database and RDP/VNC bastion/PAM that doesn’t need additional client-side software - warp-tech/warpgate

💾 Installation

Prérequis

Avant de commencer, assurez-vous d’avoir :

  • Distribution Linux (Ubuntu, Debian, etc ...).
  • Docker installé.
  • Accès terminal.
  • Connexion internet.

Étapes d'installation

  1. Créez votre compose.yml dans le dossier où vous comptez installer Warpgate :
nano compose.yml
  1. Et collez ça dedans :
services:
  warpgate:
    container_name: warpgate
    image: ghcr.io/warp-tech/warpgate:latest

    restart: unless-stopped

    ports:
      - "2222:2222"
      - "8888:8888"
      - "33306:33306"

    volumes:
      - ./data:/data

    stdin_open: true
    tty: true
  • - "2222 : 2222" => Non, je ne me suis pas endormi sur mon clavier, c'est simplement le port SSH par défaut. Changez-le comme bon vous semble. 4444 : 2222, c'est joli aussi !
  • - "8888 : 8888" => C'est le port de l'interface web, si vous ne comptez pas utiliser la connexion à vos serveurs par la page web, vous pouvez le supprimer ou le commenter. Tout comme le port SSH, on peut bien entendu le changer.
  • - "33306 : 33306" => C'est le port pour MySQL.
  • -"55432 : 55432" => C'est le port pour PostgreSQL.
  • - ./data:/data => Assurez-vous que vous puissiez bien écrire dedans sans quoi le fichier de configuration que nous allons générer plus tard, ne s'écrira pas.
  1. On va créer le fichier de configuration warpgate.yaml :
docker compose run --rm warpgate setup

Sa première question est de vous demander si vous souhaitez activer l'enregistrement d'activité de sessions utilisateur :

Choisissez un mot de passe :

Si vous voyez ceci, c'est bon !

On va déployer l'application :

docker compose up -d
  1. Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 8888 par défaut, attention, c'est du https :
https://ip:8888/

ou votre domaine :

https://warpgate.mondomaine.com
⚠️
Si vous utilisez un domaine ou un sous-domaine ! ⤵️

Il faut stopper votre container :

docker stop warpgate

Éditez le fichier warpgate.yaml, il va falloir ajouter votre domaine ou sous-domaine, commande à faire à partir de la racine du dossier d'installation :

nano data/warpgate.yaml

Remplacez ceci :

external_host: null
database_url: sqlite:/data/db

Par ceci :

external_host: warpgate.mondomaine.com
database_url: sqlite:/data/db
  • Remplacez warpgate.mondomaine.com par votre propre domaine/sous-domaine.

Replacez également cette partie :

http:
  listen: '[::]:8888'
  proxy_protocol: false
  external_port: null
  external_host: null
  certificate: /data/tls.certificate.pem
  key: /data/tls.key.pem
  trust_x_forwarded_headers: false
  session_max_age: 30m
  cookie_max_age: 1day
  sni_certificates: []

Par ceci :

http:
  listen: '[::]:8888'
  proxy_protocol: false
  external_port: 443
  external_host: warpgate.mondomaine.com
  certificate: /data/tls.certificate.pem
  key: /data/tls.key.pem
  trust_x_forwarded_headers: true
  session_max_age: 30m
  cookie_max_age: 1day
  sni_certificates: []
  • Remplacez warpgate.mondomaine.com par votre domaine/sous-domaine.

Enregistrez le tout et relancer le container :

docker start warpgate

🔌 Première connexion

La traditionnelle page de connexion !

Entrez les informations suivants pour vous connecter :

  • 1 => Indiquez le nom d'utilisateur, par défaut, c'est admin, que vous pourrez changer après.
  • 2 => Entrez le mot de passe choisi lors de la création du fichier warpgate.yaml.
  • 3 => Cliquez sur Log in pour terminer.

Vous voilà sur Warpgate :

  • 1 => Vous pouvez virer cette fenêtre en cliquant sur Dismiss.

On peut commencer à s'amuser :


🎯 Target groups

Si vous n'en avez rien à faire des groupes, passez à l'étape suivante.

Optionnel, vous pouvez classer vos services par groupes cible, par type. Nous allons créer un groupe Serveurs pour l'exemple.

Cliquez sur Admin :

Cliquez sur Config :

Cliquez sur Target groups :

Cliquez sur Add a group :

Remplissez les champs suivants :

  • 1 => Nommez le groupe.
  • 2 => Ajoutez une description éventuelle.
  • 3 => Choisissez un thème pour la couleur.
  • 4 => Terminez en cliquant sur Create.

Résultat :


🎯 Targets

Sous le nom de Targets dans l'application, cette option vous permettra d'ajouter une cible, en d'autres mots, tout ce qui est supporté comme protocole/service par Warpgate.

Cette partie sera scindée en deux, dans cette partie, comment ajouter une target, dans la suivante, les protocoles et services.

La base pour trouver cette option se trouve ici :

Cliquez sur Admin :

Cliquez sur Config :

Cliquez sur Targets :

Cliquez sur Add a target :

Cliquez sur le protocole que vous souhaitez connecter :

Lisez la suite pour ajouter les services.


🔌 SSH

De Warpgate vers votre serveur, avec clés SSH

Petite explication, Warpgate génère des clés SSH, une privée et une clé publique, la clé privée reste sur Warpgate tandis qu'il faudra coller la clé publique sur le serveur auquel vous voulez vous connecter via Warpgate, assurant ainsi la connexion par SSH.

On commence par cliquer sur SSH :

Remplissez les champs suivants :

  • 1 => Nommez votre connexion SSH.
  • 2 => Facultatif, ajoutez-le dans un groupe.
  • 3 => Cliquez sur Create target.

Configurez votre connexion :

  • 1 => Le nom de la connexion.
  • 2 => Sélectionnez éventuellement un groupe.
  • 3 => Ajoutez éventuellement une description.
  • 4 => Laissez sur Direct connection, sauf si votre besoin est différent.
  • 5 => Ajouter l'IP du serveur.
  • 6 => Indiquez le port SSH de votre serveur.
  • 7 => Remplissez éventuellement le nom d'utilisateur.
  • 8 => Laissez par défaut, sauf besoin contraire.
  • 9 => Choisir la clé, commençant par key (ssh-ed), en principe il n'en faut pas plus.

Et pour finir :

  • 1 => Cochez admin ou votre compte, si vous avez plusieurs utilisateurs, vous pourrez également les sélectionner.
  • 2 => Limitez ou non la bande passante.
  • 3 => Cliquez sur Update configuration.

Votre serveur est bien présent sur la page principale de Warpgate :

En cliquant sur le nom du serveur, vous serez redirigé vers la page contenant le terminal :

Mais ça ne fonctionnera pas tant que vous n'aurez pas terminé l'étape suivante, ajouter la clé publique dans le fichier authorized_keys, ça ne prendra que quelques minutes, pas d’inquiétudes. Une fois que c'est ajouté, Warpgate pourra se connecter par SSH, sans mot de passe, avec des clés !

🚦 Coller sa clé dans authorized_keys

D'abord, il faudra connaître sa clé, suivez le guide :

  • 1 => Cliquez sur Config.
  • 2 => Cliquez sur SSH keys.
  • 3 => Copiez votre clé publique.

Il faut ajouter la clé publique dans le fichier authorized_keys. Si vous avez déjà ce fichier, vous pouvez simplement l'éditer, si pas, on va voir comment le créer et ajouter la clé publique, suivant que ce soit pour un utilisateur non-root ou root.

🫚 Compte root

Commandes à exécuter en root ou via sudo :

mkdir -p /root/.ssh
chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

Vous venez de créer le fichier authorized_keys avec les bonnes permissions.

Il ne reste qu'à l'éditer et d'y coller cette fameuse clé :

nano /root/.ssh/authorized_keys

👤 Compte utilisateur

Tout en étant connecté avec votre utilisateur, collez ces commandes :

mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Vous venez de créer le fichier authorized_keys avec les bonnes permissions.

Il ne reste qu'à l'éditer et d'y coller cette fameuse clé :

nano ~/.ssh/authorized_keys

Maintenant vous pourrez vous connecter en SSH par la page web de Warpgate ou avec votre bon vieux terminal.

De votre PC vers Warpgate, avec clés SSH

Si vous n'avez pas encore de clés SSH sur votre ordinateur, il suffit de les créer :

ssh-keygen -t ed25519

Vérifiez qu'elles sont présentes :

ls -la ~/.ssh/

Et enfin, pour connaître votre clé publique :

cat ~/.ssh/id_ed25519.pub

Pour ajouter votre clé publique à un compte utilisateur, éditez celui-ci :

  • 1 => Choisissez Add public key.

Remplissez les informations demandées :

  • 1 => Nommez-là.
  • 2 => Collez votre clé publique complète, j'insiste.
  • 3 => Cliquez sur Save pour terminer.

Sauvez les réglages en cliquant sur Update :

Mon utilisateur peut se connecter à Warpgate avec les clés SSH. Vérifiez tout de même si l'option est activée dans la partie Global parameters (sroller vers le bas pour voir le menu) :

    • 1 => Cochez Public key authentication, quand vous aurez testé le bon fonctionnement de l'authentification par clés SSH, vous pouvez désactiver Password authentication & Keyboard-interactive.... Surtout Password authentication qui est une attaque de surface trop évidente.

🔌 Se connecter en SSH

Il faut tout simplement lancer cette commande, a

ssh -p 2222 admin@192.168.1.36

Ce qui donne :

Une fois connecté à un serveur :


🪟 RDP

Pour peu que vous ayez configuré la connexion par RDP sur votre Windows, il sera très simple de vous y connecter.

Cliquez sur RPD :

Configurez votre target :

  • 1 => Nommez-là.
  • 2 => Choisissez éventuellement un groupe.
  • 3 => Cliquez sur Create target.

Remplissez les informations suivantes :

  • 1 => Indiquez l'IP de votre instance Windows.
  • 2 => Indiquez le port, 3389 par défaut.

Pour cette partie :

  • 1 => Indiquez le nom d'utilisateur de la session Windows.
  • 2 => Indiquez le mot de passe de la sessions Windows.
  • 3 => Si vous activez cette option, vous aurez la fenêtre d'authentification Windows, si c'est décoché, vous serez directement connecté à votre instance Windows.

Configurez ces paramètres également :

  • 1 => Choisissez la qualité suivant votre connexion : RemoteFX, pour plus de fluidité, ou Lossless, pour une meilleure qualité, bien que RemoteFX soit déjà très trèèèès bien.
  • 2 => Choisissez qui aura accès à ce service.
  • 3 => Limitez ou non la bande passante.
  • 4 => Cliquez sur Update configuration.

Votre RDP est bien présent !

Cliquez dessus, vous voilà connecté à Windows :


🌐 HTTP

Cliquez sur HTTP :

cvbcv

  • 1 => Nommez votre service.
  • 2 => Terminez en cliquant sur Create target.

Remplissez les informations demandées :

  • 1 => Nom du service.
  • 2 => URL du service.
  • 3 => Cliquez sur Update configuration pour terminer.
💡
Concernant l'option Bind to a domain.
Si vous utilisez un domaine, vous pouvez lui indiquer le sous-domaine du service. Soit vous avez configuré une wildcard ou vous avez ajouté l'entrée DNS correspondant à l'entrée dans Bind to domain.

Comme ceci :


👤 Créer un utilisateur

Pour créer un utilisateur, rendez-vous ici :

  • 1 => Cliquez sur Config.
  • 2 => Cliquez sur Users.
  • 3 => Cliquez sur Add a user.

Remplissez le champ :

  • 1 => Indiquez le nom de l'utilisateur.
  • 2 => Cliquez sur Create user.

Vous arrivez ici, on va configurer vite fait un petit mot de passe pour la suite, mais vous avez d'autres possibilités comme la clé publique, OTP,...

Je vais indiquer le mot de passe, goldorak, c'est super trop robuste :

Il a bien été pris en compte :

Vous pourrez configurer la politique d'authentification de l'utilisateur, Any credential est coché par défaut, mais sachez qu'il est possible d'afficher les options granulaires en décochant Any credential :


👥 Partager une application avec un utilisateur

Imaginions que vous vouliez permettre l'accès à un service, par exemple HomeBox, à un utilisateur.

Je vais créer le rôle goldorak.

Après avoir cliqué sur Add a role :

  • 1 => Je vais le nommer goldorak.
  • 2 => Cliquez sur Create role.

Je retourne éditer mon utilisateur :

  • 1 => Cochez le service à partager.
  • 2 => Cliquez sur Update pour appliquer le changement.

Rendez-vous dans la partie Targets :

Après avoir cliqué sur le service à partager vous arrivez ici :

  • 1 => Cochez l'utilisateur à qui partager l'accès à l'application.
  • 2 => Terminez en cliquant sur Update configuration.

Toujours sur la page du service à partager, allez tout en bas :

  • 1 => Cliquez sur Access instructions.
  • 1 => Vous obtenez le lien à partager.
💡
Ici c'est URL en local, mais c'est exactement le même principe si vous êtes connecté par votre domaine.

Côté utilisateur, s'il clique directement sur le lien, il arrive ici, où il va se connecter avec son compte utilisateur :

Pour finalement arriver sur la page HomeBox :

Comme ça fait office de SSO, vous avez :

  • 1 => Retourner à la page d'accueil Warpgate, avec les permissions utilisateur.
  • 2 => Se déconnecter complètement de Warpgate.

⚙️ Paramètres globaux

Dans cette partie vous aurez l'occasion de régler quelques paramètres suivant vos besoins.

Credentials

  • 1 => Permet d'autoriser ou non la création de comptes utilisateurs.
  • 2 => Permet de régler la politique de mots de passe.

SSH

Permet de décier comment on se connecte en SSH :

UI

Permet de configurer l'UI :

Login protection

Agit comme un brute force :


🛡️ Sécuriser son SSH

Maintenant que vous pouvez vous connecter à l'aide de clés SSH, il est plus prudent de déactiver la connexion au SSH par mot de passe.

On va éditer le fichier sshd_config :

sudo nano /etc/ssh/sshd_config

Modifier ces lignes pour qu'elles soient exactement comme ici, sans # devant :

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

Redémarrez le service SSH :

sudo systemctl restart ssh

Vous pouvez vérifier le bon fonctionnement du service SSH avec cette commande :

sudo systemctl status ssh

Il doit-être active et sans erreur :

💀
Avant de fermer votre terminal, et ce, afin de garder une connexion active en cas de problème, assurez-vous que vous pouvez vous connecter au serveur après ces modifications, à l'aide d'un autre terminal, si c'est concluant, vous pouvez tout fermer.

🧱 Configurer le firewall

Afin d'être plus restrictif et de limiter la surface d'attaque, on pourrait installer et activer le firewall, ufw, à la suite de quoi nous pourrions appliquer la politique par défaut, qui consiste à bloquer tout le trafic entrant et d'autoriser le sortant.

Cela dit, vous aurez besoin de laisser un ou plusieurs ports accessibles.

⤵️ Installer ufw

sudo apt update
sudo apt install ufw

✅ Autoriser quelques ports

Ajoutez des ports suivant ce que vous voulez qui soit accessible. Voici quelques exemples.

Autoriser le port SSH de Warpgate, adaptez-le si vous l'avez changé :

sudo ufw allow 2222/tcp

Si vous voulez joindre l'interface web de Warpgate par l'ip:port, en local ou par VPN :

sudo ufw allow 8888/tcp

Si vous avez un reverse proxy, ajoutez ces ports essentiels :

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Si vous devez vous connecter en VPN par WireGuard :

sudo ufw allow 51820/udp

On applique la politique par défaut qui va bien :

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
  • Politique de refus par défaut, deny incoming => tout trafic entrant non autorisé par une règle, comme vos ports 2222, 80, 8888 ou 443, dans cet exemple, est automatiquement rejeté.
  • Politique d'acceptation par défaut, allow outgoing => tout trafic généré depuis le serveur vers l'extérieur est autorisé sans restriction.

On redémarre le service SSH afin que ce soit pris en compte, mais notez ceci :

sudo systemctl restart ssh
💀
Avant de fermer votre terminal, et ce, afin de garder une connexion active en cas de problème, assurez-vous que vous pouvez vous connecter au serveur après ces modifications, à l'aide d'un autre terminal, si c'est concluant, vous pouvez tout fermer.

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