Certificat SSL + 2FA avec Traefik et Authelia sur Proxmox VE
Au sommaire :
- Objectif
- Configurer le routeur
- Configurer le service
- Configurer le middleware
- Exposer Proxmox VE
1-Objectif
L'objectif est de rendre accessible sur le web public votre serveur PVE tout en chiffrant la traffic avec un certificat SSL et protéger l’accès avec la double authentification.
J'ai déjà aborder le sujet dans le tutoriel de Yunohost si ça vous intéresse dans la partie 8, méthode n°2.
PVE nécessite un réglage particulier car vous aurez besoin d'exposer votre serveur (port 8006) mais aussi le protocole SPICE pour la prise en main à distance de vos machines virtuelles.
De plus, je précise que je n'utilise pas l'intégration que propose Authelia pour PVE avec OpenID. Ça fera surement l'objet d'un prochain tutoriel car je n'ai pas encore creuser le sujet.
Et il y a également l'authentification avec une clé Yubikey mais faudra attendre que je m'en procure une.
2-Prérequis
Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.
Voici le guide pour ceux qui veulent repartir de zéro.
Si vous voulez gagner du temps, suivez ce guide pour préparer un template avec Cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Pour exposer et sécuriser l'application sur l'internet public, il vous faudra déployer Traefik et Authelia. Ce sont deux guides INDISPENSABLES, si vous ne les avez pas suivis, vous ne pourrez pas suivre ce tutoriel.
3-Configuration
Commencez par ouvrir le fichier "dynamic.yml" et allez dans la partie "router".
Configurer le routeur
Si vous avez suivi mon guide sur Traefik, vous avez surement déjà dans la partie "router" la configuration qui vous permet d'accéder à l'interface web de ce dernier.
Vous allez ajouter en dessous une nouvelle configuration, celle de PVE :
- name : donnez le nom que vous souhaitez (dom01 dans l'exemple pour dell optiplex mini 01, mon HomeLab).
- rule : indiquez le nom de domaine du serveur (référez-vous à la partie 7 du guide sur Traefik pour les noms de domaine si vous avez OVH et une Livebox).
- middlewares : dans certains cas, nous aurons besoin de middlewares (voir plus bas) donc c'est ici que vous devez spécifier ceux que vous allez utiliser. Nous allons utiliser celui de Authelia (voir la partie 5 du guide de Authelia).
- tls : indiquez que le trafic sera en HTTPS.
- service : nommez le nom du service que vous allez utiliser et que nous verrons plus bas (dom01-svc dans l'exemple).
http:
routers:
dom01:
rule: "Host(`dom01.<votre_nom_de_domaine>`)"
middlewares:
- middlewares-authelia
tls:
certResolver: https
service: dom01-svc
Configurer le service
Ensuite il va falloir créer un service
- name : indiquez le nom du service que vous avez indiqué dans la partie "router" (dom01-svc).
- loadBalancer : dans "servers", indiquez l'adresse I'IP (ou l'adresse résolue par votre DNS local) suivi du numéro de port.
services:
dom01-svc:
loadBalancer:
servers:
- url: "https://<ip_ou_dns_local>:8006"
Configurer le middleware
Si vous avez suivi le guide de Authelia (partie 5), vous devriez déjà avoir cette configuration du côté des middlewares.
middlewares:
middlewares-authelia:
forwardAuth:
address: "http://authelia:9091/api/verify?rd=https%3A%2F%2F<votrenomdedomaine>%2F"
chain-authelia:
chain:
middlewares:
- middlewares-authelia
Ensuite, retournez à la partie 3 du guide de Authelia puis dans le fichier "configuration.yml", dans la partie "access_control", indiquez le nom de domaine de votre serveur PVE.
access_control:
rules:
- domain:
- "dom01.votrenomdedomaine"
policy: two_factor
Redémarrez Traefik et Authelia.
docker restart authelia traefik
Et admirez le résultat!!!!!