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 :
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) :
# 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.
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.
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
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.
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.
Cliquez sur le bouton "Launch" et vous arriverez alors sur l'interface web du serveur Promox VE.
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.
Cliquez sur CREATE NEW ROLE, effacez les lignes proposées et saisissez ceci :
La liaison se fera donc sur le label PVE.Dans la partie Utilisateur, attribuez le rôle nouvellement créé à l'utilisateur concerné.
Puis connectez-vous avec cet utilisateur. Vous ne devriez alors voir sur la console web que l'accès à l'application Proxmox VE.