Skip to content

Installer un bastion Teleport en conteneur LXC sur Proxmox

Guide d'installation manuelle, étape par étape, de Teleport Community Edition (bastion SSH avec authentification centralisée et audit) en conteneur LXC Proxmox. Le binaire est téléchargé directement depuis le CDN officiel — pas besoin de Docker.


Prérequis

  • Un hôte Proxmox VE avec accès pct
  • Accès internet depuis l'hôte (téléchargement du binaire)
  • Un pool de stockage local-lvm

Valeurs d'exemple utilisées dans ce guide :

Paramètre Valeur d'exemple
ID du conteneur 204
IP fixe 192.168.1.204/24
Nom de cluster votre-domaine.tld (⚠️ immuable après initialisation)
Adresse publique teleport.votre-domaine.tld
Port web 3080
Port proxy SSH 3023
Port nodes SSH 3022
Port auth (interne) 3025
Version 18.8.3

1⃣ Création du conteneur LXC

pveam update
pveam available | grep debian-12-standard
pveam download local debian-12-standard_12.7-1_amd64.tar.zst

pct create 204 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
    --hostname teleport.votre-domaine.tld \
    --memory 512 \
    --swap 256 \
    --cores 2 \
    --rootfs local-lvm:10 \
    --net0 name=eth0,bridge=vmbr0,ip=192.168.1.204/24,gw=192.168.1.1 \
    --unprivileged 1 \
    --onboot 1

pct start 204

2⃣ Installation des paquets et des binaires

pct exec 204 -- apt-get update
pct exec 204 -- apt-get install -y --no-install-recommends curl ca-certificates

Télécharger les binaires officiels (sur l'hôte Proxmox, puis les transférer dans le conteneur) :

mkdir -p /tmp/teleport-extract
curl -sL https://cdn.teleport.dev/teleport-v18.8.3-linux-amd64-bin.tar.gz | tar -xz -C /tmp/teleport-extract

pct push 204 /tmp/teleport-extract/teleport/teleport /usr/local/bin/teleport
pct push 204 /tmp/teleport-extract/teleport/tctl     /usr/local/bin/tctl
pct push 204 /tmp/teleport-extract/teleport/tsh      /usr/local/bin/tsh
pct exec 204 -- chmod +x /usr/local/bin/teleport /usr/local/bin/tctl /usr/local/bin/tsh
rm -rf /tmp/teleport-extract

3⃣ Utilisateur système et répertoires

pct exec 204 -- bash -c "
    useradd -r -s /bin/false -d /var/lib/teleport teleport &&
    mkdir -p /var/lib/teleport /var/log/teleport /etc/teleport &&
    chown -R teleport:teleport /var/lib/teleport /var/log/teleport
"

4⃣ Fichier de configuration

Créer /etc/teleport.yaml :

pct exec 204 -- bash -c "cat > /etc/teleport.yaml" << 'EOF'
version: v3
teleport:
  nodename: votre-domaine.tld
  data_dir: /var/lib/teleport
  log:
    output: /var/log/teleport/teleport.log
    severity: INFO
    format:
      output: text

auth_service:
  enabled: yes
  cluster_name: votre-domaine.tld
  listen_addr: 0.0.0.0:3025
  authentication:
    type: local

proxy_service:
  enabled: yes
  listen_addr: 0.0.0.0:3023
  web_listen_addr: 0.0.0.0:3080
  public_addr: teleport.votre-domaine.tld:443

ssh_service:
  enabled: yes
  listen_addr: 0.0.0.0:3022
EOF

pct exec 204 -- chown root:teleport /etc/teleport.yaml
pct exec 204 -- chmod 640 /etc/teleport.yaml

⚠️ cluster_name ne doit jamais changer après la première initialisation : la PKI interne de Teleport (certificats, identités) est liée à ce nom. Bien choisir sa valeur définitive avant de démarrer le service pour la première fois.


5⃣ Service systemd

pct exec 204 -- bash -c "cat > /etc/systemd/system/teleport.service" << 'EOF'
[Unit]
Description=Teleport SSH Access Platform
After=network.target

[Service]
Type=simple
User=teleport
Group=teleport
ExecStart=/usr/local/bin/teleport start --config=/etc/teleport.yaml
Restart=always
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

pct exec 204 -- systemctl daemon-reload
pct exec 204 -- systemctl enable --now teleport

6⃣ Premier utilisateur administrateur

pct exec 204 -- tctl users add admin --roles=editor,access,auditor

La commande affiche un lien d'invitation à usage unique, à ouvrir dans le navigateur pour définir le mot de passe et configurer le MFA (obligatoire pour le rôle editor).


7⃣ Redirection des ports externes (NAT)

CT_IP=192.168.1.204
for PORT in 3080 3023 3022; do
    iptables -t nat -A PREROUTING -p tcp --dport $PORT -j DNAT --to-destination $CT_IP:$PORT
    iptables -I FORWARD -p tcp -d $CT_IP --dport $PORT -j ACCEPT
done
iptables-save > /etc/iptables.rules

Ne pas exposer le port 3025 (auth service) à l'extérieur — il est réservé au trafic interne entre composants Teleport.


8⃣ Ajouter un node SSH au cluster

Depuis le conteneur Teleport, générer un token d'enrôlement à usage unique :

pct exec 204 -- tctl tokens add --type=node --ttl=1h

Sur la machine à enrôler, installer l'agent Teleport (mêmes binaires) et démarrer avec ce token, ou via un fichier /etc/teleport.yaml minimal côté node pointant vers le proxy.


⚙️ Points d'administration importants

  • Le MFA est obligatoire pour les rôles privilégiés (editor) — ne pas le désactiver, c'est la principale protection contre le vol d'identifiants d'un bastion qui a accès à tout le reste de l'infrastructure.
  • Sauvegarde : /var/lib/teleport contient tout l'état du cluster (backend bolt/SQLite en édition Community : utilisateurs, rôles, certificats, sessions enregistrées). Une sauvegarde régulière de ce dossier permet une restauration complète.
  • cluster_name est gravé dans le marbre dès le premier démarrage — toute tentative de le changer ensuite nécessite de réinitialiser entièrement le cluster (perte des identités existantes).
  • Limiter l'exposition réseau : seuls les ports web (3080) et proxy SSH (3023) ont besoin d'être accessibles depuis l'extérieur ; le port nodes (3022) ne doit l'être que si des agents Teleport externes au réseau local doivent s'enrôler à distance.
  • Logs : pct exec 204 -- journalctl -u teleport -f, ou le fichier /var/log/teleport/teleport.log. Les sessions SSH elles-mêmes sont enregistrées et consultables via l'interface web (Session Recordings) si l'audit est activé.
  • Mise à jour : télécharger les nouveaux binaires (étape 2) en conservant /var/lib/teleport intact, remplacer les fichiers, redémarrer le service. Lire systématiquement le changelog Teleport avant une montée de version majeure — les migrations de schéma de backend ne sont pas toujours rétro-compatibles.
  • Garder un accès local de secours si le SSO est activé (voir procédure ci-dessous) : le compte admin créé à l'étape 6 continue de fonctionner en parallèle d'un éventuel connecteur OIDC — utile si Authentik devient indisponible ou mal configuré.

Conclusion

Teleport en LXC dédié fournit un point d'accès SSH unique, audité et avec MFA pour tout le réseau interne, sans dépendre de Docker ni d'une infrastructure haute disponibilité — suffisant pour un usage personnel ou une petite équipe.

Pour connecter l'authentification à Authentik plutôt que de gérer les comptes localement, voir Connecter Teleport à Authentik en SSO.