Aller au contenu

Bastion Application avec Teleport

Introduction

Une des fonctionnalités très intéressante de Teleport est de permette d'accéder à des applications web. Couplé au RBAC, cela permet de donner et de sécuriser un accès à distance aux applications voulues sans devoir passer par la configuration de règles firewall et/ou d'un VPN.

Prérequis

  • Un serveur GNU/Linux avec Teleport
  • Un serveur DNS local
  • Une autorité de certification (Step CA) ou avoir un outil pour générer des certificats (openssl, mkcert...)
  • Un serveur Proxmox VE
  • Un serveur GNU/Linux sur lequel tournera Teleport Application Service

Configurations initiales

Serveur DNS

Il est nécessaire de créer un enregistrement wildcard pointant vers le serveur teleport. En effet lorsque nous accèderons à l'application par le biais de Teleport, ce dernier pointera vers une URL du type https://monapp.teleport.maison.lab.

Dans mon cas j'ai donc déclaré le RR *.teleport.maison.lab pointant vers l'IP 192.168.1.227 de cette manière dans PI-Hole :

Configuration de PI-Hole
vim /etc/dnsmasq.d/07-my-wildcard-dns.conf
address=/teleport.maison.lab/192.168.1.227

# Relance du service
service pihole-FTL restart

# Vérification
dig +short hello.teleport.maison.lab
192.168.1.227

dig +short nddtemp.teleport.maison.lab
192.168.1.227

Certificat Teleport

À l'origine le certificat créé pour le serveur Teleport ne portait que sur teleport.maison.lab. J'ai donc créé un nouveau certificat comprenant le domaine *.teleport.maison.lab avec la commande step sur le serveur Teleport (Installation de STEP CA) :

Génération du certificat
# Arrêt de Teleport
service teleport stop

# Génération du certificat et de la clé privée
step ca certificate teleport.maison.lab --san *.teleport.maison.lab --san teleport.maison.lab teleport.crt teleport.key

 Provisioner: pkimaster01 (JWK) [kid: tVNl9MsY79ukMn6SKP47RIUufmy-dOttM4WlmmyiWak]
Please enter the password to decrypt the provisioner key: 
 CA: https://ca.maison.lab
 Certificate: teleport.crt
 Private Key: teleport.key

# Déplacement du certificat et de la clé privée
mv teleport.* /var/lib/teleport/

# Relance de Teleport
service teleport start

Installation de Teleport Application Service

Teleport Application Service tournera sur un serveur GNU/Linux dédié.

Il faut d'abord installer le certificat de l'autorité racine.

Installation de Step CLI et du certicat
wget https://dl.smallstep.com/cli/docs-cli-install/latest/step-cli_amd64.deb
dpkg -i step-cli_amd64.deb
step ca bootstrap --ca-url https://ca.maison.lab --fingerprint d091900716340086305407d6bcc15769afe9007bada618b523d837af3fcea9f7 --install

Passons à Teleport.

Installation de Teleport
TELEPORT_DOMAIN=teleport.maison.lab
TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"
curl https://cdn.teleport.dev/install-v16.4.11.sh | bash -s ${TELEPORT_VERSION} oss

Avant de passer à la configuration du service, il faut générer un token sur le serveur Teleport

Génération du token
tctl tokens add --type=app --app-name=srv-pve01-lab --app-uri=srv-pve01-lab.maison.lab:8006 --ttl=1h

The invite token: 3a6c9f2d858162f4d1c173d314f82ed0
This token will expire in 60 minutes.

Fill out and run this command on a node to make the application available:

> teleport app start \
   --token=3a6c9f2d858162f4d1c173d314f82ed0 \
   --ca-pin=sha256:b8cb4b9227d597b2b14e356154ffc0cd8987b7a071bfbbad61b355a045a3f4a5 \
   --auth-server=teleport.maison.lab:443 \
   --name=srv-pve01-lab                  `# Change "srv-pve01-lab" to the name of your application.` \
   --uri=srv-pve01-lab.maison.lab:8006   `# Change "srv-pve01-lab.maison.lab:8006" to the address of your application.`

Your application will be available at srv-pve01-lab.teleport.maison.lab:443.

Please note:

  - This invitation token will expire in 60 minutes.
  - teleport.maison.lab:443 must be reachable from the new application service.
  - Update DNS to point srv-pve02-lab.teleport.maison.lab:443 to the Teleport proxy.
  - Add a TLS certificate for srv-pve02-lab.teleport.maison.lab:443 to the Teleport proxy under "https_keypairs".

Copiez le token généré et collez le dans /tmp/token sur le serveur qui fera tourner le service en question.

Note : L'option --name reprend le nom d'hôte de la machine hébergeant l'application sinon cela génère l'erreur suivante et le service Teleport ne se lance pas :

# Exemple avec le nom PVELAB01
déc. 15 16:23:32 teleport-cltapp01 teleport[25685]: ERROR: application name "PVELAB01" must be a valid DNS subdomain

Configurez le service.

Fichier /etc/teleport.yaml
version: v3
teleport:
  join_params:
    token_name: "/tmp/token"
    method: token
  proxy_server: "teleport.maison.lab:443"
auth_service:
  enabled: off
proxy_service:
  enabled: off
ssh_service:
  enabled: off
app_service:
  enabled: true
  apps:
  - name: srv-pve01-lab
    uri: "https://srv-pve01-lab.maison.lab:8006"
    labels:
      env: "PVE"

Lancez le service. À partir de là, vous devriez voir apparaitre le service sur l'interface web de Teleport.

PVE app

Cliquez sur le bouton "Launch" et vous arriverez alors sur l'interface web du serveur Promox VE.

alt text

Remarquez l'URL présente dans le navigateur qui n'est pas https://srv-pve01-lab.maison.lab mais https://srv-pve01-lab.teleport.maison.lab.

Ok ça marche mais n'importe quel utilisateur ayant un compte avec le rôle Access sur Teleport peut accéder à l'application mais également au reste. Voyons comment limiter cet accès.

Configuration du RBAC

Dans cet exemple, nous partirons du principe que l'utilisateur "Bart Simpson" ne peut accéder qu'à l'interface de notre Proxmox VE.

Rendez-vous les rôles utilisateurs.

RBAC

Cliquez sur CREATE NEW ROLE, effacez les lignes proposées et saisissez ceci :

kind: role
version: v7
metadata:
  name: pve-app-access
spec:
  allow:
    app_labels:
      env: "PVE"
La liaison se fera donc sur le label PVE.

Dans la partie Utilisateur, attribuez le rôle nouvellement créé à l'utilisateur concerné.

RBAC

Puis connectez-vous avec cet utilisateur. Vous ne devriez alors voir sur la console web que l'accès à l'application Proxmox VE.

RBAC