Skip to content

Instantly share code, notes, and snippets.

@diyfr
Last active July 5, 2022 17:00
Show Gist options
  • Save diyfr/38623544df19d298a3b73e0f86090c89 to your computer and use it in GitHub Desktop.
Save diyfr/38623544df19d298a3b73e0f86090c89 to your computer and use it in GitHub Desktop.
Configurer Teleport derrière Traefik

TELEPORT Un PAM open Source pour se connecter à des serveurs via le navigateur

https://goteleport.com/docs/

Serveur Teleport

Il faut ouvrir les ports de 3023 à 3027 sur la console azure

Ajouter dans un compose

version: '3.7'

services:
  teleport:
    image: quay.io/gravitational/teleport:6
    container_name: teleport
    ports:
      - "3023:3023"
      - "3024:3024"
      - "3025:3025"
    networks:
      - traefik
    depends_on:
      - proxy
    restart: unless-stopped
    command:
      - --insecure-no-tls
    volumes:
      - /home/docker/config/teleport:/etc/teleport
      - /home/docker/vol/teleport:/var/lib/teleport
    labels:
      - "traefik.http.routers.teleport.rule=Host(`pam.domain.tld`)"
      - "traefik.http.routers.teleport.tls=true"
      - "traefik.http.routers.teleport.tls.certresolver=letsencrypt"
      - "traefik.http.routers.teleport.entrypoints=websecure"
      - "traefik.http.services.teleport.loadbalancer.server.port=3080"
      - "traefik.http.routers.teleport.service=teleport"
      - "traefik.http.routers.teleport-http.rule=Host(`pam.domain.tld`)"
      - "traefik.http.routers.teleport-http.middlewares=https-redirect@file"
      - "traefik.docker.network=traefik"
      - "traefik.enable=true"

Dans un dossier /home/docker/config/teleport/ créer le fichier teleport.yaml

teleport:
  nodename: pam.domain.tld
  data_dir: /var/lib/teleport
  log:
    output: stderr
    severity: INFO
  ca_pin: ""
auth_service:
  enabled: "yes"
  listen_addr: 0.0.0.0:3025
ssh_service:
  enabled: "yes"
  labels:
    env: system
  commands:
  - name: hostname
    command: [hostname]
    period: 1m0s
proxy_service:
  enabled: "yes"
  listen_addr: 0.0.0.0:3023
  public_addr: pam.domain.tld:443
  ssh_public_addr: pam.domain.tld
  https_keypairs: []
  acme: {}

Créer un dossier /home/docker/vol/teleport et lui attribuer les droits de l'user 1001:1001

chown 1001:1001 /home/docker/vol/teleport

Lancer ce service avec docker-compose et vérifier le bon démarrage.
Puis lancer la commande

docker exec -ti teleport /bin/sh

Puis la création d'un utilisateur admin

tctl users add <USERNAME> --logins=root,toto --roles=admin,editor

cela génére une url, qu'il faut transmettre à l'utilisateur

Client Teleport

Sur le serveur pam.domain.tld, ouvrir une session ssh et lancer la commande

tctl nodes add

Produira :

 teleport start \
   --roles=node \
   --token=<TOKEN> \
   --ca-pin=<CA> \
   --auth-server=172.21.0.14:3025

Sur la machine cliente.
EDIT NON NECESSAIRE: Ouvrir le port 3022 (TCP) au niveau de la console azure

Installer le client teleport sur le host client

wget https://get.gravitational.com/teleport_6.0.2_amd64.deb
dpkg -i teleport_6.0.2_amd64.deb

Ajouter un fichier /etc/teleport/teleport.yaml en remplaçant les valeur <TOKEN> et <CA> obtenue sur le serveur et en adaptant les labels ssh

teleport:
  auth_token: "<TOKEN>"
  ca_pin: "<CA>"
  auth_servers:
    - "pam.domain.tld:443"
auth_service:
  enabled: "no"
ssh_service:
  enabled: "yes"
  labels:
    env: production
proxy_service:
  enabled: "no"

Lancer la commande obtenue sur le serveur en ramplaçant l'auth_servers

 teleport start \
   --roles=node \
   --token=<TOKEN> \
   --ca-pin=<CA> \
   --auth-server=pam.domain.tld:443

Si l'opération aboutie, la machine devrait apparaître sur l'IHM teleport. Il ne reste plus qu'à activer le service.

Modifier le fichier de service systemd

nano /lib/systemd/system/teleport.service

ajouter le paramètre du fichier de configuration --config=/etc/teleport/teleport.yaml

[Unit]
Description=Teleport SSH Service
After=network.target

[Service]
Type=simple
Restart=on-failure
EnvironmentFile=-/etc/default/teleport
ExecStart=/usr/local/bin/teleport start --config=/etc/teleport/teleport.yaml --pid-file=/run/teleport.pid
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/teleport.pid
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target

Activer le service

systemctl enable teleport.service
systemctl start teleport

Nota : si l'opération échoue, il faut supprimer le dossier /var/lib/teleport sur la machine cliente

@elyesjabri
Copy link

elyesjabri commented May 19, 2022

hello im getting this error in traefik v2.4 "middleware "https-redirect@file" does not exist" in my teleport 6 docker-compose.yaml
merci en avance

version: '3.7'

services:
teleport:
image: quay.io/gravitational/teleport:6
container_name: teleport
ports:
- "3023:3023"
- "3024:3024"
- "3025:3025"
networks:
- proxy
#depends_on:
# - proxy
restart: unless-stopped
command:
- --insecure-no-tls
volumes:
- /home/Bibou/data/configurations/teleport:/etc/teleport
- ./vol/teleport:/var/lib/teleport
labels:
- "traefik.http.routers.teleport.rule=Host(pam.xx.xx)"
- "traefik.http.routers.teleport.tls=true"
- "traefik.http.routers.teleport.tls.certresolver=letsencrypt"
- "traefik.http.routers.teleport.entrypoints=websecure"
- "traefik.http.services.teleport.loadbalancer.server.port=3080"
- "traefik.http.routers.teleport.service=teleport"
- "traefik.http.routers.teleport-http.rule=Host(pam.xx.xx)"
- "traefik.http.routers.teleport-http.middlewares=https-redirect@file"
#- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.docker.network=proxy"
- "traefik.enable=true"
networks:
proxy:
external: true
~

EDIT : fixed by changing the teleport:6 to the latest teleport:9.12
merci dans tt les cas

@diyfr
Copy link
Author

diyfr commented May 19, 2022

Pour corriger cette erreur, il te faut ajouter une section dans le fichier de configuration dynamic.yml de traefik dans la section http>middlewares

http:
  middlewares:
    https-redirect:
      redirectScheme:
        scheme: https
        permanent: true

@elyesjabri
Copy link

http:

merci for your help, the probleme disappeared
en faite j'ai changer "traefik.http.routers.teleport-http.middlewares=https-redirect@file" par "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" mais j'arrive pas a ajouter des nodes a mon serveur Teleporte (derrière un proxy Traefik) alors je t'ai demander de l'aide pensons que le probleme venait de cette erreur mais meme avec ton correctif j'arrive pas a ajouter des serveur
j'ai toujours la meme erreur en boucle

INFO [PROC:1] Connecting to the cluster vps-190d1d75 with TLS client certificate. service/connect.go:153
WARN [PROC:1] Failed to close Auth Server tunnel client. error:[] service/connect.go:957
ERRO [PROC:1] Node failed to establish connection to cluster: Failed to connect to Auth Server directly or over tunnel, no methods remaining.. service/connect.go:79

je vous serais très reconnaissant si vous pouviez m'aider
merci

@diyfr
Copy link
Author

diyfr commented May 20, 2022

@elyesjabri
Vérifie que les ports TCP soient bien ouverts
Serveur TELEPORT
3023 à 3027

Client TELEPORT
3022

C'est le client qui maintien le tunnel vers le serveur teleport

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment