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_namene 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/teleportcontient 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_nameest 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/teleportintact, 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
admincréé à 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.