Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 1116 minIntermédiaire

Sécuriser Proxmox VE : utilisateurs, droits, 2FA et pare-feu

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • lire et écrire un droit Proxmox : utilisateur, rôle, chemin ;
  • relier Proxmox à l'Active Directory et traduire une matrice d'habilitations ;
  • activer la double authentification ;
  • filtrer une VM avec le pare-feu de Proxmox et durcir l'hôte.

4 exercices corrigés

Sécuriser un hyperviseur, c'est contrôler qui peut agir sur les machines virtuelles et comment on y accède : des comptes nominatifs avec la double authentification, des droits limités au strict nécessaire, une interface d'administration joignable seulement depuis le réseau d'administration, et un pare-feu. Ce chapitre explique le modèle de droits de Proxmox VE (domaines, utilisateurs, groupes, rôles, chemins), le relie à l'Active Directory de Sorbier, met en place la double authentification et le pare-feu intégré, et termine par une liste de durcissement.

Pourquoi l'hyperviseur est la cible n° 1

Celui qui contrôle l'hyperviseur contrôle toutes les machines virtuelles : il peut les éteindre, copier leurs disques (et donc la base de l'annuaire et ses empreintes de mots de passe), supprimer leurs snapshots et leurs sauvegardes, puis chiffrer les disques d'un coup. Plusieurs familles de rançongiciels visent précisément les hyperviseurs pour cette raison : une seule compromission suffit à arrêter toute l'entreprise. Les symptômes typiques d'une telle attaque, à surveiller, sont des connexions d'administration à des heures inhabituelles, la suppression en série de snapshots ou de tâches de sauvegarde, et l'arrêt simultané de nombreuses VM. Les contre-mesures sont celles de ce chapitre : accès réservé au réseau d'administration, comptes nominatifs avec double authentification, moindre privilège, journaux envoyés hors de l'hyperviseur, sauvegardes hors de sa portée.

Le modèle de droits de Proxmox VE

Un droit, dans Proxmox VE, se lit comme une phrase : tel utilisateur (ou groupe, ou jeton) a tel rôle sur tel chemin.

ÉlémentCe que c'estExemples
Domaine d'authentification (realm)Qui vérifie le mot de passepam (comptes Linux de l'hôte), pve (comptes propres à Proxmox), un annuaire Active Directory ou LDAP, un fournisseur OpenID Connect
Utilisateurnom@domaineroot@pam, clambert@sorbier
GroupeUn ensemble d'utilisateurstechniciens, stagiaires
RôleUn ensemble de privilègesPVEVMAdmin, PVEAuditor
CheminL'objet sur lequel porte le droit/ (tout), /vms/177, /storage/truenas-nfs, /pool/lab, /sdn/zones/sorbier
Jeton d'APIUn identifiant pour un programme, rattaché à un utilisateurzabbix@pve!supervision
PoolUn regroupement de VM, de conteneurs et de stockagesLe pool lab, qui contient les VM de TP

Un droit posé sur un chemin s'applique aussi à tout ce qui est en dessous, si l'option Propagate est cochée (c'est le cas par défaut) : un rôle sur /vms vaut pour toutes les VM. Un droit posé plus bas remplace celui hérité d'en haut.

Les rôles prédéfinis à connaître :

RôleCe qu'il permet
AdministratorTout
PVEAdminPresque tout, sauf modifier les réglages système de l'hôte et les droits
PVEVMAdminAdministrer entièrement les VM et les conteneurs (créer, configurer, supprimer, sauvegarder)
PVEVMUserUtiliser les VM : démarrer, arrêter, console, sauvegarder, sans modifier leur matériel
PVEAuditorTout voir, en lecture seule
PVEDatastoreUserUtiliser un stockage : y créer des disques, y sauvegarder
PVEDatastoreAdminAdministrer les stockages
PVEPoolAdmin, PVEPoolUserAdministrer ou utiliser un pool
PVEUserAdminGérer les utilisateurs et les groupes
PVESDNAdmin, PVESDNUserAdministrer le SDN, ou brancher des VM sur un VNet
NoAccessInterdire explicitement l'accès

On peut créer ses propres rôles, avec exactement les privilèges voulus : pveum role add VM_Power-only --privs "VM.PowerMgmt VM.Console" crée un rôle qui ne permet que d'allumer, d'éteindre et d'ouvrir la console.

Les comptes : PAM, PVE ou l'annuaire

root@pam est le super-administrateur de Proxmox VE : il a tous les droits, ne peut pas être supprimé, et sert pour les opérations de l'hôte lui-même. On ne l'utilise pas au quotidien et on ne le partage pas : chaque administrateur a son compte nominatif, ce qui permet de savoir qui a fait quoi dans les journaux.

Chez Sorbier, les comptes viennent de l'Active Directory : un technicien qui quitte l'entreprise est désactivé une fois dans l'annuaire, et perd aussi l'accès à l'hyperviseur. Dans Datacenter > Permissions > Realms > Add > Active Directory Server :

ChampValeur
Realmsorbier
Domainad.sorbier.example
Server, Fallback Server192.168.10.177, 192.168.10.181
ModeLDAPS (port 636) : les mots de passe ne circulent pas en clair
Onglet Sync OptionsUn compte de lecture de l'annuaire, et le filtre des groupes à importer (par exemple les groupes GG_Proxmox_*)

Ou en ligne de commande, puis la synchronisation des utilisateurs et des groupes :

bash
pveum realm add sorbier --type ad --domain ad.sorbier.example \
  --server1 192.168.10.177 --server2 192.168.10.181 --mode ldaps
pveum realm sync sorbier --scope both

Les groupes importés gardent leur nom suivi du domaine (GG_Proxmox_Techniciens-sorbier). Il ne reste plus qu'à leur donner des droits.

Donner des droits : la matrice de Sorbier

Le service informatique de Sorbier a défini qui fait quoi sur le cluster :

QuiGroupeRôleCheminPourquoi
Antoine Mercier, responsableGG_Proxmox_AdminsAdministrator/Administre tout le cluster
Chloé Lambert, Moussa Diallo, techniciensGG_Proxmox_TechniciensPVEVMAdmin/vmsCréent et administrent les VM
Les mêmesGG_Proxmox_TechniciensPVEDatastoreUser/storagePeuvent placer les disques et les sauvegardes
Le stagiairestagiairesPVEVMUser/pool/labUtilise les VM du laboratoire, ne touche à rien d'autre
La supervision Zabbixjeton zabbix@pve!supervisionPVEAuditor/Lit l'état du cluster, sans rien pouvoir modifier

En ligne de commande :

bash
# Droits des groupes de l'annuaire
pveum acl modify / --groups GG_Proxmox_Admins-sorbier --roles Administrator
pveum acl modify /vms --groups GG_Proxmox_Techniciens-sorbier --roles PVEVMAdmin
pveum acl modify /storage --groups GG_Proxmox_Techniciens-sorbier --roles PVEDatastoreUser

# Un pool pour le laboratoire, et un compte local pour le stagiaire
pveum pool add lab --comment "VM de TP et de tests"
pveum group add stagiaires
pveum user add stagiaire1@pve --groups stagiaires --password
pveum acl modify /pool/lab --groups stagiaires --roles PVEVMUser

# Un utilisateur et un jeton en lecture seule pour la supervision
pveum user add zabbix@pve --comment "Supervision Zabbix"
pveum user token add zabbix@pve supervision --privsep 1
pveum acl modify / --tokens 'zabbix@pve!supervision' --roles PVEAuditor

# Vérifier ce qu'un compte peut réellement faire
pveum user permissions clambert@sorbier

pveum user token add affiche le secret du jeton une seule fois : copie-le immédiatement dans la configuration de l'outil qui l'utilise. Avec --privsep 1 (séparation des privilèges), le jeton n'a que les droits qu'on lui donne explicitement, et non tous ceux de son utilisateur. Le modèle Proxmox VE by HTTP de Zabbix utilise exactement ce type de jeton en lecture seule (cours Supervision).

La double authentification

Un mot de passe volé ne doit pas suffire pour entrer dans l'hyperviseur. Proxmox VE gère plusieurs seconds facteurs :

FacteurPrincipePour qui
TOTPUn code à six chiffres qui change toutes les 30 secondes, produit par une application (Aegis, FreeOTP, Google Authenticator…)Tout le monde
WebAuthnUne clé de sécurité physique (FIDO2) ou une clé d'accès du systèmeLes administrateurs ; le plus résistant à l'hameçonnage
Clés de récupérationUne liste de codes à usage uniqueLe secours, si le téléphone ou la clé est perdu
Yubico OTPUn code produit par une clé YubiKey, vérifié par un serveurLes organisations déjà équipées

Chaque utilisateur active son second facteur dans Datacenter > Permissions > Two Factor > Add (TOTP, WebAuthn ou Recovery Keys), en scannant le QR code et en saisissant un premier code pour valider. Après huit codes TOTP faux, le TOTP du compte est bloqué ; un administrateur le débloque avec pveum user tfa unlock <utilisateur>.

Pour un domaine Active Directory ou LDAP, l'administrateur peut imposer un second facteur à tous ses comptes, dans les options du domaine (Require TFA : TOTP ou Yubico OTP) : un utilisateur qui n'en a pas configuré ne peut plus se connecter.

Le pare-feu de Proxmox

Proxmox VE a un pare-feu intégré, à trois niveaux, qui filtre le trafic de l'hôte et celui de chaque VM, au plus près de la machine :

NiveauOùCe qu'il filtreFichier
DatacenterDatacenter > FirewallLes règles communes, les alias, les ensembles d'adresses (IPSet), les groupes de sécurité, et l'activation globale/etc/pve/firewall/cluster.fw
NodeNode > FirewallLe trafic vers l'hôte lui-même/etc/pve/nodes/<nœud>/host.fw
VM et CTVM > FirewallLe trafic de chaque carte dont l'option Firewall est cochée/etc/pve/firewall/<VMID>.fw

Le pare-feu est désactivé par défaut au niveau du centre de données. Une fois activé, la politique d'entrée est de tout refuser, à l'exception de l'interface web (TCP 8006) et de SSH (TCP 22) depuis le réseau local du cluster et depuis l'ensemble d'adresses spécial management. Crée donc cet IPSet avec le réseau d'administration avant d'activer le pare-feu, pour ne pas te couper l'accès :

  1. Datacenter > Firewall > IPSet > Create : nom management, puis Add 192.168.10.208/28 ;
  2. Datacenter > Firewall > Options : Firewall sur Yes.

Les règles d'une VM utilisent des macros (des services prédéfinis : HTTPS, SSH, DNS…). Pour srv-web, dans la DMZ, qui ne doit accepter que HTTPS de partout et SSH depuis le réseau d'administration :

text
# /etc/pve/firewall/225.fw
[OPTIONS]
enable: 1
policy_in: DROP
log_level_in: info

[RULES]
IN HTTPS(ACCEPT) -log nolog
IN SSH(ACCEPT) -source 192.168.10.208/28

Ce pare-feu ne remplace pas le pare-feu de périmètre (pfSense chez Sorbier) : il ajoute une micro-segmentation, un filtrage entre machines d'une même zone, que le pare-feu central ne voit pas. L'architecture complète des zones et des flux est dans le cours Cybersécurité des infrastructures.

Durcir l'hôte

MesureComment
Exposer l'administration au seul VLAN 99Adresse de gestion dans le VLAN 99, règles du pare-feu de périmètre qui n'autorisent TCP 8006 et 22 que depuis le poste d'administration et le bastion ; jamais d'accès depuis Internet
Mettre à jourapt update et apt full-upgrade chaque mois au moins, et dès qu'une faille de sécurité est publiée (suivre les annonces de Proxmox et les avis du CERT-FR)
SSH par clés uniquementPasswordAuthentication no dans la configuration de SSH, une fois les clés des administrateurs installées
Comptes nominatifs, double authentification, moindre privilègeCe chapitre
Jetons d'API à privilèges séparés--privsep 1, un jeton par outil, révoqué quand l'outil disparaît
JournauxLes connexions à l'interface sont dans /var/log/pveproxy/access.log, les tâches dans Datacenter > Tasks ; envoie les journaux de l'hôte vers le serveur de journaux, hors de l'hyperviseur
Sauvegardes hors de portéeProxmox Backup Server sur une machine séparée, compte des hôtes sans droit de suppression (chapitre 9)
CertificatUn certificat signé par l'autorité interne pour l'interface web, pour que les administrateurs ne prennent pas l'habitude d'accepter n'importe quel avertissement

Exercices

Exercice 1 sur 4 Traduire une matrice d'habilitations Réussi À revoir

Sorbier recrute une alternante, Inès, qui doit pouvoir démarrer, arrêter et ouvrir la console des VM de supervision (srv-journaux, VM 180), et seulement celle-ci. Elle a un compte dans l'annuaire, ibenali@sorbier. Le responsable veut aussi qu'un auditeur externe puisse consulter toute la configuration pendant une semaine, sans rien modifier.

Écris les commandes pveum correspondantes, en créant si besoin un rôle personnalisé.

Voir la réponseMasquer la réponse de l'exercice 1
bash
# Un rôle limité à l'alimentation et à la console
pveum role add VM_Power-only --privs "VM.PowerMgmt VM.Console"
pveum acl modify /vms/180 --users ibenali@sorbier --roles VM_Power-only

# L'auditeur : un compte local, en lecture seule sur tout, qui expire dans une semaine
pveum user add audit-externe@pve --expire 1794268800 --password
pveum acl modify / --users audit-externe@pve --roles PVEAuditor

PVEVMUser aurait aussi convenu pour Inès, mais il donne en plus le droit de sauvegarder et quelques réglages : le rôle personnalisé respecte mieux le moindre privilège. --expire attend une date au format horodatage Unix (secondes depuis le 1er janvier 1970) : 1794268800 correspond au 10 novembre 2026 à 0 h UTC, une semaine après le 3 novembre. Dans l'interface, le champ Expire propose un calendrier.

Tu avais trouvé ?

Exercice 2 sur 4 Trouver la faille Réussi À revoir

Voici les droits posés sur le cluster d'une autre PME. Relève trois problèmes et propose une correction pour chacun.

Utilisateur ou groupeRôleCheminPropagate
technicien@pve (compte partagé par les trois techniciens)Administrator/Oui
stagiaire@pvePVEVMAdmin/Oui
Jeton monitoring@pve!grafana sans séparation des privilèges, utilisateur monitoring@pve qui a PVEAdmin———
Voir la réponseMasquer la réponse de l'exercice 2
  1. Compte partagé : on ne sait pas qui a fait quoi, et un départ oblige à changer le mot de passe pour tous. Il faut un compte nominatif par technicien (idéalement dans l'annuaire), regroupés dans un groupe qui reçoit les droits, et un rôle plus limité que Administrator (PVEVMAdmin sur /vms, PVEDatastoreUser sur /storage).
  2. Stagiaire administrateur de toutes les VM : il peut supprimer n'importe quelle VM de production. Il faut un pool lab et le rôle PVEVMUser (ou PVEVMAdmin) sur /pool/lab seulement.
  3. Jeton sans séparation des privilèges : il hérite de tous les droits de monitoring@pve, donc de PVEAdmin. Un outil de tableaux de bord n'a besoin que de lire : recrée le jeton avec --privsep 1 et donne-lui PVEAuditor sur / ; retire PVEAdmin à l'utilisateur.

Tu avais trouvé ?

Exercice 3 sur 4 Les règles du pare-feu de srv-gestion Réussi À revoir

srv-gestion (VM 179) héberge l'application de gestion des stocks en HTTPS (TCP 443) pour les postes (192.168.10.64/26), une API sur TCP 8443 appelée par srv-web (192.168.10.225), et s'administre en SSH depuis le réseau d'administration. Écris le fichier /etc/pve/firewall/179.fw.

Voir la réponseMasquer la réponse de l'exercice 3
text
[OPTIONS]
enable: 1
policy_in: DROP
log_level_in: info

[RULES]
IN HTTPS(ACCEPT) -source 192.168.10.64/26
IN ACCEPT -source 192.168.10.225 -p tcp -dport 8443
IN SSH(ACCEPT) -source 192.168.10.208/28

Tout le reste, en entrée, est refusé par la politique DROP et journalisé. Il faut aussi que l'option Firewall soit cochée sur la carte réseau de la VM et que le pare-feu soit activé au niveau du centre de données. Ces règles s'ajoutent à celles du pare-feu de périmètre, qui filtre déjà le passage entre les VLAN.

Tu avais trouvé ?

Exercice 4 sur 4 Une connexion suspecte Réussi À revoir

Un dimanche à 3 h 12, la supervision signale que les snapshots de six VM ont été supprimés en deux minutes, puis que les tâches de sauvegarde planifiées ont été désactivées. Le journal /var/log/pveproxy/access.log montre des connexions réussies de clambert@sorbier depuis 192.168.10.71.

  1. Qu'est-ce que ces signaux évoquent ?
  2. Quelles sont les trois premières actions à mener ?
  3. Quelles mesures auraient empêché ou limité l'attaque ?
Voir la réponseMasquer la réponse de l'exercice 4
  1. La préparation d'une attaque par rançongiciel visant l'hyperviseur : l'attaquant supprime les moyens de retour arrière (snapshots, sauvegardes) avant de chiffrer ou de détruire les VM. Le compte d'une technicienne est utilisé depuis un poste du VLAN des postes, un dimanche à 3 h : compte probablement compromis.
  2. Désactiver immédiatement le compte clambert@sorbier (dans l'annuaire et dans Proxmox) et fermer ses sessions ; isoler le poste 192.168.10.71 du réseau ; vérifier que les sauvegardes sur PBS sont intactes (le compte des hôtes n'a pas le droit de les supprimer) et conserver les journaux comme preuves avant toute remise en état, puis déclencher la procédure de gestion d'incident.
  3. L'interface d'administration n'aurait jamais dû être joignable depuis le VLAN des postes (seulement depuis le VLAN 99 et le bastion) ; la double authentification aurait rendu le mot de passe volé inutile ; une alerte sur les connexions hors horaires et sur les suppressions en série aurait réveillé l'astreinte ; les sauvegardes sur un PBS séparé, avec un compte sans droit de suppression et une copie hors site, garantissent la reprise.

Tu avais trouvé ?

Chapitre terminé !

Fais les 4 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Dimensionner et superviser un hôte de virtualisationRevoir le sommaire du cours