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.

Virtualiser Yunohost sur Proxmox VE
Guide d’installation de YunoHost, une solution d’auto-hébergement.

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.

Proxmox - Integration
Integrating Proxmox with the Authelia OpenID Connect Provider.

Et il y a également l'authentification avec une clé Yubikey mais faudra attendre que je m'en procure une.

Yubico | YubiKey Strong Two Factor Authentication

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.

Virtualiser Ubuntu Server 22.04 LTS sur Proxmox VE
Guide d’installation de Ubuntu Server 22.04 LTS sur Proxmox VE avec mes meilleurs réglages.

Si vous voulez gagner du temps, suivez ce guide pour préparer un template avec Cloud-init.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.

Installer Docker
Guide d’installation de Docker.

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.

Installer Traefik avec Docker
Guide d’installation de Traefik.
Installer Authelia avec Docker
Guide d’installation de Authelia.

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!!!!!