Référence francophone de durcissement Proxmox VE 9 : 96 contrôles CIS sur 9 phases, mappings MITRE ATT&CK v16, ISO 27001:2022, PCI DSS v4.0, 3 profils Homelab/Production/Internet.
Présentation
Ce guide fournit des recommandations de durcissement prescriptives, vérifiables et opérationnelles pour Proxmox Virtual Environment 9.x (Debian 13 "Trixie"). Il est conçu pour les administrateurs systèmes, ingénieurs sécurité et auditeurs.
Ce qui le différencie
| Caractéristique | Ce guide | Guides existants |
|---|---|---|
| Format CIS hybride | Chaque contrôle suit la structure CIS (Audit/Remediation/Default Value) + mappings compliance | Formats variés, rarement alignés CIS |
| Mappings compliance intégrés | CIS Controls v8, MITRE ATT&CK, ISO 27001:2022, PCI DSS v4.0 | Peu ou pas de mappings |
| Threat model explicite | 10 scénarios d'attaque rattachés à chaque contrôle | Pas de threat model |
| 3 profils d'environnement | 🏠 Homelab, 🏢 Production, 🌐 Exposé internet | Pas de distinction |
| Contrôles validés | Testé sur PVE 9.x — pas de "non validé" dans le guide principal | Contrôles souvent non validés |
| Corrections d'erreurs | Corrige les erreurs des guides existants (syntaxe 2FA, Fail2Ban regex, firewall defaults, LUKS) | Erreurs propagées |
| Rollback documenté | Chaque contrôle risqué a sa procédure de retour arrière | Jamais documenté |
| Couverture hyperviseur | Isolation VM (seccomp, KSM, IOMMU), pas juste l'OS | Focalisé OS uniquement |
Base de référence
- CIS Debian Linux 13 Benchmark v1.0.0 (2025-12-16)
- MITRE ATT&CK v16
- CIS Controls v8
- ISO/IEC 27001:2022 Annex A
- PCI DSS v4.0
- BSI — Sicherheitsanalyse von KVM (KVMSec) v1.0.1
- QEMU Project — Security Documentation
Structure du guide
| # | Fichier | Phase | Description | Contrôles |
|---|---|---|---|---|
| 01 | 01-threat-model.md | — | Modèle de menaces (10 scénarios MITRE ATT&CK) | — |
| 02 | 02-pre-installation.md | Phase 0 | Avant l'installation (matériel, BIOS, chiffrement, réseau) | 8 |
| 03 | 03-os-debian-durci.md | Phase 1 | Durcissement OS Debian 13 (kernel, comptes, audit, services) | 15 |
| 04 | 04-proxmox-specifique.md | Phase 2 | Durcissement Proxmox (pveproxy, cluster, API, mises à jour) | 12 |
| 05 | 05-acces-authentification.md | Phase 3 | Accès et authentification (SSH, 2FA, RBAC, Fail2Ban, VPN) | 12 |
| 06 | 06-reseau-segmentation.md | Phase 4 | Réseau et segmentation (VLAN, firewall PVE, security groups) | 8 |
| 07 | 07-stockage-chiffrement.md | Phase 5 | Stockage et chiffrement (LUKS, ZFS, Ceph, NFS/iSCSI) | 5 |
| 08 | 08-isolation-vm-ct.md | Phase 6 | Isolation VM/CT (seccomp, KSM, IOMMU, LXC) | 6 |
| 09 | 09-monitoring-detection.md | Phase 7 | Monitoring et détection (AIDE, logs centralisés, audit) | 3 |
| 10 | 10-maintenance-backup.md | Phase 8+9 | Maintenance, backup, reprise d'activité (PBS, DR drills) | 8 |
Quickstart
Prérequis
- Proxmox VE 9.x installé (Debian 13 "Trixie")
- Accès root au(x) nœud(s)
- Accès console hors-bande (IPMI/iDRAC/KVM) ou physique
- Sauvegardes fonctionnelles des VM et du nœud
Par où commencer ?
🏠 Homelab — Top 5 actions à impact maximal :
- SSH : clés uniquement + Fail2Ban → Phase 3
- Mises à jour auto sécurité Debian → Phase 1
- 2FA sur le web UI → Phase 3
- Backups PBS chiffrées → Phase 9
- Firewall PVE activé → Phase 4
🏢 Production — Parcours recommandé :
- Lire le threat model (30 min)
- Appliquer la Phase 0 (pré-installation) si nouveau déploiement
- Phases 1 → 4 dans l'ordre (Level 1 d'abord)
- Phase 9 (backup) en priorité si pas encore fait
- Phases 5 → 8 pour la défense en profondeur
- Revenir sur les contrôles Level 2
🌐 Exposé internet — Ajouts critiques :
- VPN comme unique entrée management → Phase 3, 3.5
- WebAuthn/FIDO2 → Phase 3, 3.2.2
- LUKS full-disk encryption → Phase 0, 0.2.3
Règles d'or
- Toujours tester en lab avant d'appliquer en production
- Ne jamais fermer votre session SSH avant d'avoir testé la nouvelle configuration dans un second terminal
- Garder un accès console OOB en cas de lock-out
- Appliquer Level 1 d'abord, puis Level 2 quand Level 1 est stabilisé
- Documenter chaque déviation par rapport au guide (justification + acceptation du risque)
Corrections notables vs guides existants
| Erreur courante | Notre correction | Phase |
|---|---|---|
pveum realm modify <<pam>> --tfa type=<<oath>> (syntaxe invalide) |
Procédure via interface web documentée | 3 (3.2.1) |
Fail2Ban pointe vers /var/log/syslog (absent PVE 9) |
Backend systemd + journalmatch = _SYSTEMD_UNIT=pvedaemon.service |
3 (3.4.2) |
PermitRootLogin no (casse le cluster) |
PermitRootLogin prohibit-password + Match Address cluster |
3 (3.1.1) |
lockdown=integrity en production (casse ZFS/Ceph/GPU) |
Classé expérimental, exclu du guide principal | 1 (1.2.5) |
| Firewall PVE "INPUT=DROP par défaut" (faux) | Explication complète des règles anti-lockout cachées | 4 (4.2.1) |
| LUKS via installateur PVE (non disponible pour ext4) | Tableau comparatif ISO PVE vs Debian-first | 0 (0.2.1) |
KSM echo 2 > run (incomplet) |
Désactivation KSM + ksmtuned | 6 (6.1.2) |
| FORWARD=DROP sans règles cluster (casse les migrations) | Avertissement + prérequis réseau dédié | 4 (4.2.4) |
Format des contrôles
Chaque contrôle suit le format CIS Benchmark enrichi :
X.Y.Z — Titre du contrôle
| Profile Applicability | Level 1/2 — Server |
|---|---|
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | X.Y.Z |
| CIS Controls v8 | Safeguard mappé |
| MITRE ATT&CK | Techniques + Mitigations |
| ISO 27001:2022 | Annex A |
| PCI DSS v4.0 | Exigence |
| Scénario threat model | S1-S10 |
| Statut PVE 9 | ✅ Validé / ⚠️ Partiel / 🧪 Expérimental |
Description / Rationale / Impact / Audit / Remédiation
Valeur par défaut / Rollback / Spécificité PVE
---
Avertissements
⚠️ Ce guide est fourni « en l'état », sans garantie. Vous êtes seul responsable de l'évaluation, du test et de la validation de chaque recommandation dans votre environnement.
⚠️ Certaines procédures ne sont pas officiellement supportées par Proxmox GmbH. Tester et maintenir à vos propres risques.
⚠️ Ce guide ne constitue pas une certification de conformité. Il est conçu pour aider à la préparation d'audits et à l'amélioration de la posture de sécurité.
Contribuer
Les contributions sont bienvenues. Voir CONTRIBUTING.md.
Licence
Ce guide est publié sous licence Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
Vous pouvez copier, modifier et distribuer le contenu à condition de conserver l'attribution et de partager sous la même licence.
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format normalisé Licence : CC BY-SA 4.0 Base de référence : CIS Debian Linux 13 Benchmark v1.0.0, MITRE ATT&CK v16, CIS Controls v8 Sources : BSI KVMSec v1.0.1, QEMU Security Documentation, Proxmox Forum, CVE databases
1.1 — Objectif et portée
Pourquoi un modèle de menaces ?
La plupart des guides de durcissement démarrent par « exécutez ces commandes ». Sans modèle de menaces, on applique des contrôles au hasard — on chiffre des disques pendant que SSH accepte les mots de passe, on active auditd sur un nœud dont le BMC a encore le mot de passe usine.
Ce chapitre identifie :
- Les surfaces d'attaque spécifiques à un hyperviseur Proxmox VE
- Les scénarios d'attaque réalistes, classés par probabilité
- Les mappings vers les cadres de référence (MITRE ATT&CK, CIS Controls v8, ISO 27001, PCI DSS)
- Les contrôles préventifs et détectifs de ce guide rattachés à chaque scénario
Chaque contrôle des phases suivantes référence un ou plusieurs scénarios de ce chapitre. Si un scénario ne vous concerne pas, les contrôles associés deviennent optionnels. Si un scénario est votre cauchemar, vous savez exactement quoi prioriser.
Portée
| Élément | Inclus | Exclu |
|---|---|---|
| Hyperviseur Proxmox VE 9.x | ✅ | |
| OS hôte Debian 13 | ✅ | |
| Infrastructure réseau PVE (bridges, VLAN, firewall) | ✅ | |
| Stockage PVE (local, Ceph, NFS/iSCSI) | ✅ | |
| BMC/IPMI/iDRAC | ✅ | |
| Proxmox Backup Server | ✅ (interactions) | Guide dédié PBS hors périmètre |
| Sécurité des OS guests (VM/CT internes) | ❌ | |
| Sécurité applicative des workloads | ❌ | |
| Sécurité physique des locaux | ❌ (mentionnée, non couverte) |
1.2 — Surfaces d'attaque
Un hyperviseur est le pire point de compromission possible dans une infrastructure. Compromettre un hyperviseur donne accès simultanément à toutes les VM hébergées, à leur mémoire vive, à leurs disques, à leur trafic réseau. Proxmox VE expose quatre plans d'attaque distincts :
| Composant | Port/Protocole |
| pveproxy (Web UI + API REST) | TCP 8006 |
| SSH | TCP 22 |
| VNC/SPICE/noVNC | Tunnelés via pveproxy |
| pvedaemon | TCP 85 (local) |
Criticité : Quiconque contrôle le plan de management contrôle tout — création/destruction de VM, accès backups, lecture mémoire des VM, modification de la configuration cluster.
| Composant | Port/Protocole |
| Bridges Linux (vmbr*) | Variable |
| Stockage NFS | TCP 2049 |
| Stockage iSCSI | TCP 3260 |
| Ceph public | TCP 6789, 6800-7300 |
| Migration live | TCP 60000-60050 |
Criticité : Une VM compromise peut tenter de pivoter via le réseau partagé ou tenter une évasion vers l'hôte via les devices émulés QEMU.
Référence : La documentation officielle de sécurité QEMU définit explicitement les guests, les interfaces utilisateur (VNC, SPICE), les protocoles réseau (NBD, migration) et les fichiers fournis par l'utilisateur comme des entités non fiables (untrusted).
| Composant | Port/Protocole |
| Corosync | UDP 5405 |
| pmxcfs | — |
| SSH inter-nœuds | TCP 22 |
Criticité : Compromettre un nœud = accès au filesystem cluster partagé (configurations, certificats, tokens de tous les nœuds).
| Composant | Accès |
| BMC/IPMI/iDRAC/iLO | Réseau OOB (TCP 443, UDP 623) |
| Console physique | Local |
| Disques physiques | Local |
| Ports USB | Local |
Criticité : Un BMC compromis donne un accès console virtuel complet, invisible depuis l'OS. Des cas de ransomware via BMC vulnérable sont documentés dans la communauté Proxmox.
1.3 — Profils d'environnement
| Profil | Symbole | Description | Menaces principales |
|---|---|---|---|
| Homelab | 🏠 | Nœud unique ou petit cluster, réseau local, pas d'exposition internet directe | Rebond depuis poste LAN compromis, erreur de config, accès physique accidentel |
| Production | 🏢 | Cluster multi-nœuds, réseau d'entreprise segmenté, SLA internes, multi-administrateurs | Mouvement latéral, insider malveillant, ransomware, non-conformité réglementaire |
| Exposé internet | 🌐 | Nœuds accessibles depuis internet (hébergeur, cloud privé, VPS) | Brute-force, exploitation CVE, compromission BMC, attaques ciblées, supply chain |
Règle : en cas de doute entre deux profils, choisir le plus restrictif.
1.4 — Scénarios d'attaque
Chaque scénario suit un format normalisé avec mappings compliance intégrés. Les scénarios sont ordonnés par probabilité décroissante.
| Probabilité | 🔴 Très élevée |
| Impact | Critique — contrôle total de l'hyperviseur |
| Profils | 🏠🏢🌐 |
| Vecteur | Réseau — plan de management |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Accès initial | Initial Access | Exploit Public-Facing Application | T1190 |
| Accès initial | Initial Access | Valid Accounts | T1078 |
| Accès initial | Initial Access | Brute Force | T1110 |
| Exécution | Execution | Command and Scripting Interpreter | T1059 |
| Persistance | Persistence | Account Manipulation | T1098 |
CIS Controls v8 : 4.1, 5.2, 5.4, 6.3, 6.4, 6.5, 13.1
ISO 27001:2022 : A.5.15, A.5.17, A.8.5, A.8.20
PCI DSS v4.0 : 2.2.1, 6.3.3, 8.2.1, 8.3.1, 8.3.6
Description :
Description :
Chaîne d'attaque type :
- Scan de ports → détection SSH (22) et/ou pveproxy (8006)
- Brute-force ou credential stuffing sur SSH/web UI
- Ou : exploitation d'une CVE pveproxy (ex : CVE-2023-43320 bypass 2FA, CVE-2025-57538/39/40 XSS stocké)
- Obtention d'un shell root ou d'une session web admin
- Contrôle total : création/suppression VM, accès backups, modification cluster
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Désactivation auth par mot de passe SSH | 3 | 3.1.1 | 🔴 Critique |
| 2FA obligatoire (TOTP ou WebAuthn) | 3 | 3.2 | 🔴 Critique |
| Fail2Ban SSH + Web UI (regex corrigé) | 3 | 3.4 | 🔴 Critique |
| Restriction IP sur pveproxy :8006 | 2 | 2.1.3 | 🔴 Critique |
| VPN comme unique entrée management | 3 | 3.5 | 🟡 Important (🌐) |
| Mise à jour régulière PVE | 2 | 2.4 | 🔴 Critique |
| RBAC moindre privilège | 3 | 3.3 | 🟡 Important |
Contrôles détectifs :
| Contrôle | Phase | Réf. |
|---|---|---|
| Centralisation logs auth | 7 | 7.2.3 |
| Alerting échecs auth multiples | 7 | 7.1.3 |
| Audit appels API | 2 | 2.2.3 |
CVE historiques pertinentes :
| CVE | Année | Type | CVSS |
|---|---|---|---|
| CVE-2023-43320 | 2023 | Bypass 2FA (PVE 5.4–8.0) | N/A |
| CVE-2025-57538/39/40 | 2025 | XSS stocké config Datacenter | N/A |
| CVE-2022-31358 | 2022 | XSS stocké | N/A |
| Probabilité | 🔴 Élevée |
| Impact | Critique — perte totale des données et des VM |
| Profils | 🏠🏢🌐 |
| Vecteur | Post-compromission (rebond après S1 ou poste admin compromis) |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Impact | Impact | Data Encrypted for Impact | T1486 |
| Impact | Impact | Inhibit System Recovery | T1490 |
| Impact | Impact | Data Destruction | T1485 |
| Mouvement | Lateral Movement | Remote Services: SSH | T1021.004 |
| Collection | Collection | Data from Local System | T1005 |
CIS Controls v8 : 3.4, 11.1, 11.2, 11.3, 11.4, 11.5
ISO 27001:2022 : A.8.13 (Information backup), A.8.14 (Redundancy), A.5.29 (Business continuity)
PCI DSS v4.0 : 3.5.1, 9.4.1, 12.10.1
Description :
Description :
Chaîne d'attaque type :
- Compromission initiale (S1, phishing admin, rebond LAN)
- Reconnaissance : stockage, backups PBS, snapshots
- Suppression des snapshots ZFS/LVM
- Suppression ou chiffrement des backups PBS
- Chiffrement des images disque VM
- Demande de rançon
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Backups PBS chiffrés client-side + clé escrow hors ligne | 9 | 9.1.2, 9.1.3 | 🔴 Critique |
| Immutabilité backups (retention lock PBS) | 9 | 9.1.3 | 🔴 Critique |
| Tokens PBS avec privilèges minimaux (pas de suppression) | 9 | 9.1.2 | 🔴 Critique |
| Backup hors site / hors ligne (3-2-1-1-0) | 9 | 9.1.1 | 🔴 Critique |
| Snapshots ZFS out-of-band | 5 | 5.3 | 🟡 Important |
| RBAC : séparer admin-VM et admin-backup | 3 | 3.3 | 🟡 Important |
Contrôles détectifs :
| Contrôle | Phase | Réf. |
|---|---|---|
| Monitoring espace stockage (suppression massive = alerte) | 7 | 7.1 |
| AIDE (intégrité fichiers) | 7 | 7.2.1 |
| Alerting suppression backups PBS | 7 | 7.1.3 |
| Probabilité | 🟡 Moyenne (en augmentation) |
| Impact | Critique — compromission de l'hôte depuis un guest |
| Profils | 🏢🌐 |
| Vecteur | VM compromise → exploitation QEMU/KVM → accès hôte |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Évasion | Privilege Escalation | Escape to Host | T1611 |
| Exploitation | Execution | Exploitation for Client Execution | T1203 |
| Découverte | Discovery | System Information Discovery | T1082 |
| Accès | Privilege Escalation | Exploitation for Privilege Escalation | T1068 |
CIS Controls v8 : 4.1, 7.1, 7.3, 10.5, 16.13
ISO 27001:2022 : A.8.7, A.8.8, A.8.9
PCI DSS v4.0 : 6.2.4, 6.3.3, 11.3.1
Description :
Description :
Particularité Proxmox : Contrairement à libvirt/sVirt qui confine chaque processus QEMU avec des labels SELinux automatiques, Proxmox ne génère pas de profils AppArmor par VM automatiquement. Les processus QEMU tournent en tant que root sans confinement mandatory access control par défaut. C'est une différence architecturale majeure documentée par le BSI.
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Profils AppArmor pour QEMU | 6 | 6.1.1 | 🟡 Important |
| Filtres seccomp QEMU | 6 | 6.1.2 | 🟡 Important |
| Suppression devices émulés inutiles | 6 | 6.1.5 | 🟡 Important |
| Machine type q35 (meilleure isolation) | 6 | 6.1.5 | 🟡 Important |
| KSM désactivé (side-channel multi-tenant) | 6 | 6.1.4 | 🟡 Important |
| IOMMU vérifié pour PCI passthrough | 6 | 6.1.3 | 🔴 Critique si passthrough |
| Mise à jour kernel + QEMU prioritaire | 2 | 2.4 | 🔴 Critique |
| Paramètres boot kernel durcis | 1 | 1.2.5 | 🟡 Important |
Contrôles détectifs :
| Contrôle | Phase | Réf. |
|---|---|---|
| auditd modules kernel + syscalls | 1 | 1.4.1 |
| Monitoring processus anormaux sur l'hôte | 7 | 7.2 |
Références :
- BSI — Sicherheitsanalyse von KVM (KVMSec) v1.0.1, 2017
- QEMU Project — Security Documentation (modèle d'entités non fiables)
- Red Hat — Hardening QEMU through continuous security testing
| Probabilité | 🟡 Moyenne |
| Impact | Critique — compromission de tous les nœuds |
| Profils | 🏢🌐 |
| Vecteur | Réseau interne — plan cluster |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Mouvement | Lateral Movement | Remote Services: SSH | T1021.004 |
| Mouvement | Lateral Movement | Exploitation of Remote Services | T1210 |
| Collecte | Credential Access | Unsecured Credentials: Private Keys | T1552.004 |
| Collecte | Collection | Data from Information Repositories | T1213 |
CIS Controls v8 : 4.1, 6.1, 6.4, 12.2, 13.1
ISO 27001:2022 : A.8.20, A.8.22, A.8.24
PCI DSS v4.0 : 1.2.1, 1.3.1, 4.2.1
Description :
Description :
Chaîne d'attaque type :
- Compromission d'un nœud (via S1 ou S3)
- Lecture
/etc/pve→ certificats cluster, clés SSH, tokens API - SSH root vers les autres nœuds (confiance implicite)
- Interception/injection Corosync si non chiffré
- Contrôle de l'ensemble du cluster
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Réseau dédié Corosync (VLAN isolé) | 4 | 4.1.1 | 🔴 Critique |
| Chiffrement Corosync | 2 | 2.3.1 | 🔴 Critique |
| Segmentation VLAN management/cluster/VM | 4 | 4.1 | 🔴 Critique |
| Restriction SSH inter-nœuds au réseau cluster | 3 | 3.1.1 | 🟡 Important |
| Firewall PVE FORWARD=DROP + règles explicites | 4 | 4.2 | 🟡 Important |
Contrôles détectifs :
| Contrôle | Phase | Réf. |
|---|---|---|
| Monitoring connexions SSH inter-nœuds | 7 | 7.2.4 |
| Alerting changements config cluster | 7 | 7.2 |
| auditd sur /etc/pve | 1 | 1.4.1 |
| Probabilité | 🟡 Moyenne (🔴 si BMC exposé internet) |
| Impact | Critique — contrôle physique total du serveur |
| Profils | 🏢🌐 |
| Vecteur | Réseau — plan physique/OOB |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Accès initial | Initial Access | External Remote Services | T1133 |
| Accès initial | Initial Access | Valid Accounts: Default Accounts | T1078.001 |
| Persistance | Persistence | Pre-OS Boot: Component Firmware | T1542.002 |
| Accès | Privilege Escalation | Hardware Additions | T1200 |
CIS Controls v8 : 1.1, 2.2, 4.1, 4.6, 12.2
ISO 27001:2022 : A.5.15, A.7.2, A.8.9, A.8.20
PCI DSS v4.0 : 2.2.1, 9.2.1, 11.3.1
Description :
Description :
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Isolation BMC sur VLAN OOB dédié | 0 | 0.1.2 | 🔴 Critique |
| Changement credentials par défaut | 0 | 0.1.2 | 🔴 Critique |
| Désactivation protocoles non chiffrés | 0 | 0.1.2 | 🔴 Critique |
| Mise à jour firmware BMC | 0 | 0.1.1 | 🔴 Critique |
| Certificats TLS sur interface web BMC | 0 | 0.1.2 | 🟡 Important |
| Probabilité | 🟡 Moyenne |
| Impact | Variable — fuite de données à destruction |
| Profils | 🏢 |
| Vecteur | Accès légitime — plan de management |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Collection | Collection | Data from Local System | T1005 |
| Exfiltration | Exfiltration | Exfiltration Over Web Service | T1567 |
| Impact | Impact | Data Destruction | T1485 |
| Évasion | Defense Evasion | Indicator Removal: Clear Linux Logs | T1070.002 |
CIS Controls v8 : 3.3, 5.3, 5.4, 6.1, 6.2, 8.2, 8.5
ISO 27001:2022 : A.5.10, A.5.15, A.6.1, A.8.15
PCI DSS v4.0 : 7.2.1, 8.2.1, 10.2.1
Description :
Description :
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| RBAC strict moindre privilège | 3 | 3.3 | 🔴 Critique |
| Comptes nommés individuels | 3 | 3.3.1 | 🔴 Critique |
| 2FA sur tous les comptes | 3 | 3.2.3 | 🔴 Critique |
| Séparation des rôles | 3 | 3.3.2 | 🟡 Important |
| Revue trimestrielle des accès | 8 | 8.2.1 | 🟡 Important |
Contrôles détectifs :
| Contrôle | Phase | Réf. |
|---|---|---|
| Journalisation appels API | 2 | 2.2.3 |
| auditd fichiers sensibles | 1 | 1.4.1 |
| Logs centralisés hors contrôle admin PVE | 7 | 7.2.3 |
| Probabilité | 🟠 Faible-Moyenne |
| Impact | Critique — backdoor persistante sur tous les nœuds |
| Profils | 🏠🏢🌐 |
| Vecteur | Réseau — mises à jour |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Accès initial | Initial Access | Supply Chain Compromise: Software | T1195.002 |
| Exécution | Execution | System Services: Service Execution | T1569.002 |
| Persistance | Persistence | Compromise Client Software Binary | T1554 |
CIS Controls v8 : 2.2, 2.5, 7.3, 16.4
ISO 27001:2022 : A.8.8, A.8.10
PCI DSS v4.0 : 6.3.2, 6.3.3
Description :
Description :
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Vérification signatures GPG (ne pas désactiver) | 1 | 1.1.1 | 🔴 Critique |
| Dépôt enterprise (signé Proxmox GmbH) | 1 | 1.1.1 | 🟡 Important |
| Vérification intégrité paquets installés | 1 | 1.1.3 | 🟡 Important |
| Pas de dépôts tiers non vérifiés | 1 | 1.1.1 | 🔴 Critique |
Contrôles détectifs :
| Contrôle | Phase | Réf. |
|---|---|---|
| Vérification périodique intégrité (debsums) | 7 | 7.2 |
| AIDE (changements binaires) | 7 | 7.2.1 |
| Probabilité | 🟠 Faible |
| Impact | Critique — accès mémoire hôte |
| Profils | 🏢🌐 |
| Vecteur | VM compromise + device passthrough → DMA → mémoire hôte |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Évasion | Privilege Escalation | Escape to Host | T1611 |
| Accès | Privilege Escalation | Exploitation for Privilege Escalation | T1068 |
CIS Controls v8 : 4.1, 4.8
ISO 27001:2022 : A.8.9
Description :
Description :
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| IOMMU activé et vérifié (VT-d / AMD-Vi) | 6 | 6.1.3 | 🔴 Critique |
| IOMMU groups isolés | 6 | 6.1.3 | 🔴 Critique |
| Pas de passthrough vers VM non fiables | 6 | 6.1.3 | 🔴 Critique |
Paramètres kernel intel_iommu=on iommu=pt |
1 | 1.2.5 | 🔴 Critique |
| Probabilité | 🟠 Faible (accès réseau interne requis) |
| Impact | Élevé — vol de données, injection |
| Profils | 🏢 |
| Vecteur | Réseau interne — plan données/cluster |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Collecte | Credential Access | Adversary-in-the-Middle | T1557 |
| Collecte | Collection | Data from Network Shared Drive | T1039 |
CIS Controls v8 : 3.10, 12.2, 12.6
ISO 27001:2022 : A.8.20, A.8.24
PCI DSS v4.0 : 4.2.1
Description :
Description :
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Réseaux dédiés Ceph et migration | 4 | 4.1.1 | 🔴 Critique |
| Chiffrement Ceph en transit (Messenger v2) | 5 | 5.2.1 | 🟡 Important |
| Migration chiffrée | 2 | 2.3.3 | 🟡 Important |
| VLAN isolation stricte | 4 | 4.1 | 🔴 Critique |
| Probabilité | Variable |
| Impact | Critique — compromission totale |
| Profils | 🏠🏢 |
| Vecteur | Physique |
MITRE ATT&CK :
| Phase | Tactique | Technique | ID |
|---|---|---|---|
| Accès initial | Initial Access | Hardware Additions | T1200 |
| Accès initial | Initial Access | Replication Through Removable Media | T1091 |
| Persistance | Persistence | Pre-OS Boot | T1542 |
| Collecte | Collection | Data from Local System | T1005 |
CIS Controls v8 : 3.6, 4.1, 4.6
ISO 27001:2022 : A.7.1, A.7.2, A.7.4, A.8.24
PCI DSS v4.0 : 9.1.1, 9.2.1, 9.4.1
Description :
Description :
Contrôles préventifs :
| Contrôle | Phase | Réf. | Priorité |
|---|---|---|---|
| Chiffrement disques (LUKS2 / ZFS encryption) | 0 | 0.2.3 | 🔴 Critique (🌐) |
| Mot de passe GRUB | 1 | 1.2.1 | 🟡 Important |
| Secure Boot | 0 | 0.1.3 | 🟡 Important |
| Désactivation boot USB dans BIOS | 0 | 0.1.1 | 🟡 Important |
| TPM 2.0 pour scellement clés | 0 | 0.1.4 | 🟡 Important |
1.5 — Matrice menaces ↔ phases du guide
| Scénario | Ph.0 | Ph.1 | Ph.2 | Ph.3 | Ph.4 | Ph.5 | Ph.6 | Ph.7 | Ph.8 | Ph.9 |
|---|---|---|---|---|---|---|---|---|---|---|
| S1 SSH/Web | ● | ●●● | ● | ●● | ● | |||||
| S2 Ransomware | ● | ●● | ● | ●● | ●●● | |||||
| S3 VM escape | ● | ●● | ●●● | ● | ||||||
| S4 Cluster | ●● | ● | ●●● | ●● | ||||||
| S5 BMC | ●●● | ● | ||||||||
| S6 Insider | ●●● | ●●● | ●● | ● | ||||||
| S7 Supply chain | ●●● | ● | ●● | |||||||
| S8 PCI/DMA | ● | ●●● | ||||||||
| S9 Interception | ●● | ●●● | ●● | |||||||
| S10 Physique | ●●● | ● | ●● |
Légende : ● pertinent, ●● important, ●●● critique pour ce scénario
1.6 — Priorisation par profil
🏠 Homelab — Top 5 actions
| # | Action | Scénario | Phase |
|---|---|---|---|
| 1 | SSH clés uniquement + Fail2Ban | S1 | 3 |
| 2 | Mises à jour auto sécurité Debian | S7 | 1 |
| 3 | 2FA sur le web UI | S1, S6 | 3 |
| 4 | Backups PBS chiffrées + hors site | S2 | 9 |
| 5 | Firewall PVE politique restrictive | S1 | 4 |
🏢 Production — Top 10
| # | Action | Scénario | Phase |
|---|---|---|---|
| 1-5 | Tout le Top 5 homelab | — | — |
| 6 | RBAC strict comptes nommés | S6 | 3 |
| 7 | Segmentation VLAN complète | S4, S9 | 4 |
| 8 | Chiffrement Corosync | S4 | 2 |
| 9 | Logs centralisés hors contrôle admin PVE | S6 | 7 |
| 10 | BMC isolé VLAN OOB | S5 | 0 |
🌐 Exposé internet — Ajouts critiques
| # | Action | Scénario | Phase |
|---|---|---|---|
| 11 | VPN unique entrée management | S1 | 3 |
| 12 | WebAuthn/FIDO2 (résistant phishing) | S1 | 3 |
| 13 | Profils AppArmor QEMU | S3 | 6 |
| 14 | BMC jamais exposé internet | S5 | 0 |
| 15 | Chiffrement disques complet (LUKS2) | S10 | 0 |
| 16 | Secure Boot | S10 | 0 |
| 17 | IOMMU vérifié pour tout passthrough | S8 | 6 |
1.7 — Références
| Source | Description | Date |
|---|---|---|
| BSI — Sicherheitsanalyse von KVM (KVMSec) v1.0.1 | Analyse de sécurité KVM/QEMU avec recommandations (AppArmor/sVirt, seccomp, devices) | 2017 |
| QEMU Project — Security Documentation | Modèle de sécurité QEMU, entités non fiables, principe de moindre privilège | En cours |
| Red Hat — Hardening QEMU through continuous security testing | Mécanismes de durcissement continu (fuzzing, Coverity, analyse statique) | 2025 |
| OpenStack Security Guide — Hardening the Virtualization Layers | Recommandations minimisation QEMU, compiler hardening, sVirt/AppArmor | En cours |
| CIS — Debian Linux 13 Benchmark v1.0.0 | Benchmark de configuration sécurisée Debian 13 | 2025-12-16 |
| MITRE — ATT&CK Framework v16 | Tactiques, techniques et procédures adversaires | 2025 |
| CIS — Controls v8 | Contrôles de sécurité prioritisés | 2021 |
| Proxmox Forum — Security Hardening threads | Retours communautaires, cas BMC/ransomware | 2021-2026 |
| CVE databases (OpenCVE, CVEDetails, Akaoma) | Vulnérabilités Proxmox VE documentées | Continu |
Navigation : ← 00-introduction.md | 02-pre-installation.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Base de référence : CIS Debian Linux 13 Benchmark v1.0.0 (2025-12-16) Scénarios du threat model : S5, S7, S10
Conventions du format
Chaque contrôle suit la structure du CIS Benchmark, enrichie de champs spécifiques à Proxmox VE :
| Champ | Description |
|---|---|
| Profile Applicability | Level 1 (baseline) / Level 2 (defense-in-depth) — conforme au CIS |
| Applicabilité PVE | 🏠 Homelab / 🏢 Production / 🌐 Exposé internet |
| Réf. CIS Debian 13 | Numéro de section CIS correspondant (si applicable) |
| CIS Controls v8 | Safeguard CIS Controls v8 mappé |
| MITRE ATT&CK | Techniques / Tactics / Mitigations |
| ISO 27001:2022 | Contrôle Annex A mappé |
| PCI DSS v4.0 | Exigence PCI DSS mappée |
| Scénario threat model | Référence S1-S10 du chapitre 01 |
| Statut PVE 9 | ✅ Validé / ⚠️ Partiel / 🧪 Expérimental |
| Description | Ce que fait le contrôle |
| Rationale | Pourquoi ce contrôle est nécessaire |
| Impact | Conséquences opérationnelles |
| Audit | Commande(s) de vérification + résultat attendu |
| Remédiation | Commande(s) d'application |
| Valeur par défaut | Valeur sur une installation fraîche |
| Rollback | Procédure de retour arrière (ajout Proxmox) |
| Spécificité PVE | Notes spécifiques à Proxmox (ajout Proxmox) |
| Références | Sources additionnelles |
0.1 — Préparation matérielle
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Hors périmètre CIS (prérequis matériel) |
| CIS Controls v8 | 2.2 — Ensure Authorized Software is Currently Supported |
| MITRE ATT&CK | T1542 (Pre-OS Boot), T1195 (Supply Chain Compromise) |
| ISO 27001:2022 | A.8.8 — Management of technical vulnerabilities |
| PCI DSS v4.0 | 6.3.3 — Install security patches within one month |
| Scénario threat model | S5 (BMC), S10 (accès physique) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact :
Reboot nécessaire. Un flash de BIOS raté peut bricker le serveur — prévoir un accès console physique ou IPMI. Certaines mises à jour de microcode peuvent réduire très légèrement les performances (~1-3%) sur les workloads affectés par les mitigations Spectre.
🔍 Audit
Audit :
dmidecode -t bios | grep -E "Vendor|Version|Release Date"
journalctl -k | grep -i microcode
cat /proc/cpuinfo | grep -m1 microcode
cat /sys/devices/system/cpu/vulnerabilities/*
**Remédiation** :
apt update
apt install -y intel-microcode
apt install -y amd64-microcode
reboot
**Valeur par défaut** : Microcode distribué avec le kernel Debian. Peut ne pas être la dernière version.
**Rollback** : Pour le microcode Debian : `apt purge intel-microcode` ou `amd64-microcode` et reboot. Pour le BIOS : procédure de flash-back constructeur (si disponible).
**Spécificité PVE** : Le kernel Proxmox (basé sur Ubuntu) charge le microcode depuis l'initramfs. Les paquets `intel-microcode` et `amd64-microcode` de Debian fonctionnent normalement avec le kernel PVE.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 (N/A si matériel sans BMC) |
| Réf. CIS Debian 13 | Hors périmètre CIS (couche matérielle) |
| CIS Controls v8 | 4.1 — Establish and Maintain a Secure Configuration Process |
| MITRE ATT&CK | T1200 (Hardware Additions), T1133 (External Remote Services), T1078 (Valid Accounts) |
| ISO 27001:2022 | A.8.9 — Configuration management, A.5.15 — Access control |
| PCI DSS v4.0 | 2.2.1 — Develop configuration standards for system components |
| Scénario threat model | S5 (Compromission BMC) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact :
Faible. Nécessite un accès au réseau BMC pour la configuration initiale.
🔍 Audit
Audit :
nmap -sV <adresse_IP_BMC> -p 80,443,623,5900 --max-retries 1
ipmitool -I lanplus -H <BMC_IP> -U admin -P <password> lan print 1
**Remédiation** :
| Action | Priorité | Détail |
|--------|----------|--------|
| Changer les credentials par défaut | 🔴 Critique | Mot de passe ≥ 16 caractères, unique par serveur, stocké dans un gestionnaire de MDP |
| Isoler sur VLAN OOB dédié | 🔴 Critique | VLAN non routable vers internet ni vers le réseau VM/management PVE |
| Désactiver HTTP (forcer HTTPS) | 🔴 Critique | Via l'interface web BMC ou CLI ipmitool |
| Désactiver SNMP v1/v2c | 🟡 Important | Migrer vers SNMPv3 si monitoring nécessaire |
| Désactiver Telnet | 🔴 Critique | Via l'interface web BMC |
| Désactiver IPMI-over-LAN | 🟡 Important | Si non utilisé pour le monitoring |
| Mettre à jour le firmware BMC | 🔴 Critique | Depuis le site constructeur |
| Installer certificat TLS | 🟡 Important | Si le BMC supporte l'import de certificats |
| Activer le System Event Log | 🟡 Important | Pour la traçabilité des accès BMC |
**Valeur par défaut** : Credentials usine (`admin`/`admin`, `ADMIN`/`ADMIN`, ou similaire). HTTP actif. SNMP v1/v2c actif. Pas d'isolation réseau.
**Rollback** : Reset usine du BMC via le bouton physique ou la procédure constructeur.
**Spécificité PVE** : Proxmox n'a aucune interaction directe avec le BMC. La sécurisation du BMC est entièrement indépendante de PVE mais critique pour la sécurité globale de l'infrastructure.
**Références** :
- Forum Proxmox — cas documentés de ransomware via BMC
- NIST SP 800-123 — Guide to General Server Security
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Hors périmètre CIS |
| CIS Controls v8 | 4.1 — Establish and Maintain a Secure Configuration Process |
| MITRE ATT&CK | T1542.003 (Bootkit), T1014 (Rootkit) |
| ISO 27001:2022 | A.8.9 — Configuration management |
| PCI DSS v4.0 | 2.2.1 |
| Scénario threat model | S10 (accès physique) |
| Statut PVE 9 | ⚠️ Partiel — fonctionnel mais incompatible avec certains modules tiers |
Description :
Description :
Rationale :
Rationale :
Impact :
Moyen à élevé. Les modules kernel non signés ne se chargeront pas. Cela affecte :
- Drivers NVIDIA propriétaires (GPU passthrough) — ❌ ne fonctionneront pas sans signature personnalisée
- Certains modules DRBD — ⚠️ vérifier la compatibilité
- Modules kernel out-of-tree tiers — ❌ bloqués
- ZFS (inclus dans le kernel PVE) — ✅ fonctionne
- Modules kernel Proxmox standard — ✅ fonctionnent
🔍 Audit
Audit :
mokutil --sb-state
dmesg | grep -i "secure boot"
**Remédiation** :
1. Activer Secure Boot dans le BIOS/UEFI
2. Installer PVE normalement (ou redémarrer si déjà installé)
3. Vérifier que le système démarre et que tous les modules nécessaires se chargent :
lsmod | grep -E "zfs|kvm|vhost"
**Valeur par défaut** : Dépend du matériel et du BIOS. Souvent désactivé sur les serveurs.
**Rollback** : Désactiver Secure Boot dans le BIOS/UEFI.
**Spécificité PVE** : Proxmox VE 9 supporte Secure Boot. Le kernel PVE et ses modules intégrés (ZFS, KVM) sont signés. Cependant, les modules tiers non signés sont bloqués. **Tester impérativement en lab avant activation en production.**
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Hors périmètre CIS |
| CIS Controls v8 | 3.6 — Encrypt Data on End-User Devices |
| MITRE ATT&CK | T1542 (Pre-OS Boot), M1026 (Privileged Account Management) |
| ISO 27001:2022 | A.8.24 — Use of cryptography |
| PCI DSS v4.0 | 3.5.1 |
| Scénario threat model | S10 (accès physique) |
| Statut PVE 9 | ✅ Validé (vTPM pour VM), ⚠️ Partiel (auto-unlock LUKS) |
Description :
Description :
Rationale :
Rationale :
Impact :
Faible. Le TPM est transparent une fois configuré. L'auto-unlock via TPM protège contre le vol de disques mais PAS contre un attaquant ayant accès à l'ensemble du serveur (le TPM est sur la carte mère).
🔍 Audit
Audit :
cat /sys/class/tpm/tpm0/tpm_version_major 2>/dev/null
dmesg | grep -i tpm
**Remédiation** :
1. Activer le TPM 2.0 dans le BIOS/UEFI
2. Vérifier la détection par le kernel
Pour l'auto-unlock LUKS via TPM (si LUKS est utilisé) :
apt install -y systemd-cryptenroll tpm2-tools
systemd-cryptenroll /dev/sdX3 --tpm2-device=auto --tpm2-pcrs=0+1+7
systemd-cryptenroll /dev/sdX3 --recovery-key
**Valeur par défaut** : TPM souvent désactivé dans le BIOS par défaut sur les serveurs.
**Rollback** : Supprimer l'enrollment TPM : `systemd-cryptenroll /dev/sdX3 --wipe-slot=tpm2`. La passphrase LUKS reste fonctionnelle.
**Spécificité PVE** :
- PVE 9 supporte le vTPM (TPM virtuel) pour les VM guests — utile pour Windows 11 et les OS exigeant un TPM
- L'auto-unlock LUKS via TPM est une fonctionnalité Debian/systemd standard, indépendante de PVE
- **Alternatives sans TPM** : `dropbear-initramfs` (unlock SSH dans l'initramfs), `tang`/`clevis` (Network-Bound Disk Encryption — NBDE)
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Hors périmètre CIS |
| CIS Controls v8 | 1.1 — Establish and Maintain Detailed Enterprise Asset Inventory |
| MITRE ATT&CK | T1082 (System Information Discovery) — contrôle défensif |
| ISO 27001:2022 | A.5.9 — Inventory of information and other associated assets |
| PCI DSS v4.0 | 9.9.1 — Maintain a listing of devices |
| Scénario threat model | Tous |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Nul.
🔍 Audit
Audit :
echo "=== SYSTEM ===" && dmidecode -t system | grep -E "Manufacturer|Product|Serial" && \
echo "=== BIOS ===" && dmidecode -t bios | grep -E "Vendor|Version|Release" && \
echo "=== CPU ===" && lscpu | grep -E "Model name|Socket|Thread" && \
echo "=== RAM ===" && free -h | grep Mem && \
echo "=== STORAGE ===" && lsblk -d -o NAME,SIZE,MODEL,SERIAL && \
echo "=== NETWORK ===" && ip -br link show && \
echo "=== PVE ===" && pveversion -v 2>/dev/null && \
echo "=== KERNEL ===" && uname -r
**Remédiation** :
Créer et maintenir un fichier d'inventaire par nœud. Modèle :
| Champ | Valeur |
|---|---|
| Hostname | pve-node01 |
| Modèle | Dell PowerEdge R750 |
| N° série | [À renseigner] |
| CPU | 2x Intel Xeon Gold 6338 |
| RAM | 256 Go DDR4 ECC |
| Disques OS | 2x 480 Go SSD SATA (RAID1) |
| Disques VM | 4x 1.92 To NVMe |
| Réseau | 2x 25 GbE + 2x 1 GbE |
| BIOS | v2.12.2 (2025-10-15) |
| BMC | iLO 5 v3.10 |
| PVE | 9.1-3 |
| Kernel | 6.12.6-1-pve |
| Emplacement | Rack A, U12-14 |
| VLAN Mgmt | 10 — 10.0.10.11/24 |
| VLAN BMC | 99 — 10.0.99.11/24 |
| Dernier audit | 2026-03-20 |
Mettre à jour après **chaque** changement de matériel ou de configuration.
**Valeur par défaut** : Aucun inventaire.
---
0.2 — Choix d'installation
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Prérequis global (conditionne 1.1.x partitionnement) |
| CIS Controls v8 | 4.1 — Establish and Maintain a Secure Configuration Process |
| ISO 27001:2022 | A.8.9 — Configuration management |
| Scénario threat model | S7 (supply chain), S10 (accès physique) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact :
Décision architecturale irréversible. L'installateur ISO Proxmox ne propose pas d'option LUKS pour ext4/XFS. Les options de chiffrement dans l'installateur PVE n'existent que pour ZFS.
| Critère | ISO Proxmox | Debian 13 + dépôt PVE |
|---|---|---|
| Simplicité | ✅ Assistée | ❌ Manuelle |
| Support Proxmox GmbH | ✅ Méthode principale | ⚠️ Supportée |
| Partitionnement CIS (1.1.x) | ❌ Schéma fixe | ✅ Contrôle total |
| LUKS sur ext4/LVM | ❌ Non disponible | ✅ Via installateur Debian |
| ZFS encryption | ✅ Disponible | ⚠️ Installation manuelle |
| Conformité CIS complète | ❌ Partitions non séparées | ✅ Possible |
| Risque opérationnel | Faible | Moyen |
Remédiation (recommandation par profil) :
| Profil | Recommandation |
|---|---|
| 🏠 Homelab | ISO Proxmox — simple, fiable |
| 🏢 Prod sans exigence CIS strict | ISO Proxmox + ZFS encryption si chiffrement requis |
| 🏢🌐 Prod avec conformité CIS ou LUKS obligatoire | Debian 13 + dépôt Proxmox |
Si Debian 13 + dépôt PVE : suivre https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_13_Trixie
Pièges documentés :
- Ne PAS installer d'environnement de bureau
- Sélectionner uniquement
Standard system utilities+SSH server - Configurer un hostname FQDN résolvable (requis par Proxmox)
- Retirer le kernel Debian APRÈS vérification du boot sur kernel PVE
Valeur par défaut : N/A (choix initial).
Spécificité PVE : L'installateur ISO PVE utilise un partitionnement prédéfini : une partition EFI, un VG LVM avec root + swap (ou ZFS avec root pool + data pool). Ce schéma ne crée PAS de partitions séparées pour /tmp, /var, /var/log, /var/log/audit, /home.
| Profile Applicability | Level 1 — Server (partitions de base), Level 2 — Server (toutes) |
| Applicabilité PVE | 🏠 (simplifié) 🏢🌐 (complet) |
| Réf. CIS Debian 13 | 1.1.2.1 à 1.1.2.7 |
| CIS Controls v8 | 4.8 — Uninstall or Disable Unnecessary Services |
| MITRE ATT&CK | T1499.001 (OS Exhaustion Flood), M1022 (Restrict File and Directory Permissions) |
| ISO 27001:2022 | A.8.9 — Configuration management |
| PCI DSS v4.0 | 2.2.1, 2.2.4 |
| Scénario threat model | S2 (ransomware), S7 (supply chain) |
| Statut PVE 9 | ✅ Validé (si Debian-first) / ⚠️ Non conforme (si ISO PVE) |
Description :
Description :
Rationale :
Rationale :
Impact :
Nul si fait à l'installation. Irréversible après installation (réinstallation nécessaire pour le partitionnement, options de montage modifiables à chaud).
🔍 Audit
Audit :
for mp in /tmp /var /var/log /var/log/audit /home /var/tmp; do
findmnt -n "$mp" > /dev/null 2>&1 && echo "PASS: $mp est une partition séparée" \
| echo "FAIL: $mp n'est PAS une partition séparée" |
done
for mp in /tmp /dev/shm /var/tmp; do
opts=$(findmnt -n -o OPTIONS "$mp" 2>/dev/null)
echo "$mp: $opts"
echo "$opts" | grep -q "nosuid" && echo " nosuid: PASS" || echo " nosuid: FAIL"
echo "$opts" | grep -q "nodev" && echo " nodev: PASS" || echo " nodev: FAIL"
echo "$opts" | grep -q "noexec" && echo " noexec: PASS" || echo " noexec: FAIL"
done
**Remédiation** :
Schéma complet (installateur Debian, conformité CIS Level 1+2) :
| Point de montage | CIS | Level | Taille recommandée | Options de montage |
|-----------------|-----|-------|--------------------|--------------------|
| `/` | — | — | 20-50 Go | `defaults` |
| `/boot` | — | — | 1 Go | `defaults,nosuid,nodev,noexec` |
| `/boot/efi` | — | — | 512 Mo | `defaults,nosuid,nodev,noexec` |
| `/tmp` | 1.1.2.1 | L1 | 5-10 Go | `defaults,nosuid,nodev,noexec` |
| `/dev/shm` | 1.1.2.2 | L1 | tmpfs | `defaults,nosuid,nodev,noexec` |
| `/home` | 1.1.2.3 | L1 | 5-10 Go | `defaults,nosuid,nodev` |
| `/var` | 1.1.2.4 | L1 | 20-50 Go | `defaults,nosuid,nodev` |
| `/var/tmp` | 1.1.2.5 | L1 | 5-10 Go | `defaults,nosuid,nodev,noexec` |
| `/var/log` | 1.1.2.6 | L1 | 10-20 Go | `defaults,nosuid,nodev,noexec` |
| `/var/log/audit` | 1.1.2.7 | L1 | 5-10 Go | `defaults,nosuid,nodev,noexec` |
| `/var/lib/vz` | PVE | — | Max ou volume dédié | `defaults,nosuid,nodev` |
| swap | — | — | 1-2x RAM (max 32 Go) | `sw` |
**Valeur par défaut** : L'installateur ISO PVE crée une partition unique root + swap (LVM) ou un pool ZFS sans séparation. Non conforme CIS 1.1.2.x.
**Rollback** : Les options de montage sont modifiables dans `/etc/fstab` + `mount -o remount`. Le partitionnement lui-même n'est pas modifiable sans réinstallation.
**Spécificité PVE** : `/var/lib/vz` est le répertoire de stockage local par défaut de Proxmox (images ISO, templates, snippets). Sur l'installateur ISO, il est créé comme un volume LVM-thin ou un dataset ZFS. Le séparer du root filesystem prévient l'épuisement de l'espace disque root par les images VM.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Hors périmètre CIS (recommandation complémentaire) |
| CIS Controls v8 | 3.6 — Encrypt Data on End-User Devices, 3.9 — Encrypt Data on Removable Media |
| MITRE ATT&CK | T1005 (Data from Local System), T1025 (Data from Removable Media), M1041 (Encrypt Sensitive Information) |
| ISO 27001:2022 | A.8.24 — Use of cryptography |
| PCI DSS v4.0 | 3.5.1 — Render PAN unreadable anywhere it is stored |
| Scénario threat model | S10 (accès physique) |
| Statut PVE 9 | ⚠️ Partiel — ZFS encryption natif dans l'installateur, LUKS uniquement via Debian-first |
Description :
Description :
Rationale :
Rationale :
Impact :
- Surcoût performance : 3-5% (LUKS2 + AES-NI), 5-8% (ZFS encryption) sur I/O séquentiel
- Nécessite une intervention au boot (saisie de passphrase) ou une configuration auto-unlock (TPM, dropbear, tang/clevis)
- Complexité accrue de la gestion des clés et de la recovery
🔍 Audit
Audit :
lsblk -f | grep -i crypt
zfs get encryption -r rpool 2>/dev/null | grep -v off
cryptsetup status cryptlvm 2>/dev/null || echo "Pas de LUKS actif"
**Remédiation** :
Trois options (voir 0.2.1 pour le choix d'installation) :
**Option A — ZFS native encryption (via installateur PVE)** :
Sélectionner ZFS dans l'installateur et activer le chiffrement. Pour un chiffrement per-dataset post-installation :
zfs create -o encryption=aes-256-gcm \
-o keylocation=prompt \
-o keyformat=passphrase \
rpool/encrypted-vms
**Option B — LUKS2 (via installateur Debian)** :
Choisir « Guided — use entire disk and set up encrypted LVM » dans l'installateur Debian 13. Puis installer Proxmox par-dessus.
**Option C — LUKS sous ZFS (post-installation, avancé)** :
Conversion in-place via live boot. Réservé aux experts.
**Impératifs communs** :
cryptsetup luksHeaderBackup /dev/sdX3 --header-backup-file /root/luks-header-sdX3.img
systemd-cryptenroll /dev/sdX3 --recovery-key 2>/dev/null
**Valeur par défaut** : Aucun chiffrement.
**Rollback** : Le chiffrement une fois appliqué n'est pas réversible sans réinstallation ou procédure de déchiffrement destructive.
**Spécificité PVE** :
- L'installateur ISO PVE **ne propose PAS LUKS pour ext4/XFS**. Le chiffrement dans l'installateur n'est disponible que pour ZFS.
- ZFS native encryption ne chiffre pas le root pool facilement (le boot doit lire le pool).
- Pour un chiffrement total (full disk encryption), la méthode Debian-first + LUKS est nécessaire.
- Le déverrouillage distant via `dropbear-initramfs` est recommandé pour les serveurs en datacenter :
apt install dropbear-initramfs
echo 'DROPBEAR_OPTIONS="-s -c cryptroot-unlock"' > /etc/dropbear/initramfs/dropbear.conf
update-initramfs -u
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠 (simplifié) 🏢🌐 (complet) |
| Réf. CIS Debian 13 | Hors périmètre CIS (architecture) |
| CIS Controls v8 | 12.2 — Establish and Maintain a Secure Network Architecture |
| MITRE ATT&CK | T1557 (Adversary-in-the-Middle), T1021 (Remote Services), M1030 (Network Segmentation) |
| ISO 27001:2022 | A.8.22 — Segregation of networks |
| PCI DSS v4.0 | 1.2.1 — Restrict inbound and outbound traffic |
| Scénario threat model | S1, S4, S5, S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Nul (planification uniquement).
🔧 Remédiation
Remédiation :
Architecture VLAN de référence (🏢🌐) :
| VLAN | Nom | Rôle | Plage exemple | Ports PVE |
|---|---|---|---|---|
| 10 | Management | Web UI :8006, SSH, API | 10.0.10.0/24 | 8006/tcp, 22/tcp |
| 20 | VM/CT | Trafic applicatif guests | 10.0.20.0/24+ | Variable |
| 30 | Stockage | NFS, iSCSI, Ceph public | 10.0.30.0/24 | 2049, 3260, 6789 |
| 40 | Cluster | Corosync, migration, réplication | 10.0.40.0/24 | 5405/udp, 60000-60050/tcp |
| 41 | Ceph cluster | Réplication OSD (si Ceph) | 10.0.41.0/24 | 6800-7300/tcp |
| 99 | OOB | BMC/IPMI | 10.0.99.0/24 | 443/tcp (BMC web) |
Architecture simplifiée (🏠) :
Réseau plat avec firewall PVE pour restreindre l'accès aux ports management. Pas de VLAN nécessaire.
Valeur par défaut : Pas de segmentation. Un seul bridge vmbr0 sur l'interface principale.
Spécificité PVE : Proxmox utilise des bridges Linux (vmbr0, vmbr1...) pour la connectivité réseau. Chaque VLAN peut être associé à un bridge dédié ou utiliser des VLAN-aware bridges. La configuration détaillée est couverte en Phase 4.
0.3 — Checklist pré-installation
MATÉRIEL
[ ] 0.1.1 — Firmware/BIOS à jour
[ ] 0.1.1 — Microcode CPU installé
[ ] 0.1.2 — Credentials BMC changés
[ ] 0.1.2 — BMC isolé sur VLAN OOB
[ ] 0.1.2 — Protocoles non chiffrés BMC désactivés
[ ] 0.1.3 — Secure Boot : décision documentée (activé/désactivé)
[ ] 0.1.4 — TPM 2.0 : décision documentée
[ ] 0.1.5 — Inventaire matériel rempli
ARCHITECTURE
[ ] 0.2.1 — Méthode d'installation choisie (ISO PVE / Debian-first)
[ ] 0.2.2 — Schéma de partitionnement défini
[ ] 0.2.3 — Stratégie de chiffrement définie + clés générées et stockées
[ ] 0.2.4 — Architecture réseau VLAN planifiée et documentée
PRÉREQUIS
[ ] Accès console hors-bande vérifié
[ ] ISO d'installation préparée (checksum SHA256 vérifié)
[ ] Procédure de déverrouillage distant planifiée (si LUKS)
Navigation : ← 01-threat-model.md | 03-os-debian-durci.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Base de référence : CIS Debian Linux 13 Benchmark v1.0.0 (2025-12-16) Scénarios du threat model : S1, S2, S3, S6, S7
1.1 — Gestion des paquets et dépôts
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 1.2.1.1 — Ensure GPG keys are configured |
| CIS Controls v8 | 2.2 — Ensure Authorized Software is Currently Supported |
| MITRE ATT&CK | T1195.002 (Compromise Software Supply Chain), M1051 (Update Software) |
| ISO 27001:2022 | A.8.8 — Management of technical vulnerabilities, A.8.10 — Information deletion |
| PCI DSS v4.0 | 6.3.3 |
| Scénario threat model | S7 (supply chain) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Sans abonnement, les mises à jour via le dépôt no-subscription sont fonctionnelles mais n'ont pas le même niveau de test que le dépôt enterprise.
🔍 Audit
Audit :
apt update 2>&1 | grep -E "Err:|401|Failed"
apt-key list 2>/dev/null | grep -A1 "proxmox" || \
ls /etc/apt/trusted.gpg.d/proxmox-*
grep -r "AllowUnauthenticated\|AllowInsecureRepositories" /etc/apt/ 2>/dev/null
**Remédiation** :
Avec abonnement enterprise (🏢🌐 recommandé) :
cat /etc/apt/sources.list.d/pve-enterprise.list
apt update # Doit fonctionner sans erreur 401
Sans abonnement (🏠) :
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
echo "deb http://download.proxmox.com/debian/pve trixie pve-no-subscription" \
/etc/apt/sources.list.d/pve-no-subscription.list
apt update
**Valeur par défaut** : Dépôt enterprise activé (échoue sans licence). Clés GPG Proxmox installées.
**Rollback** :
sed -i 's/^#deb/deb/' /etc/apt/sources.list.d/pve-enterprise.list
rm -f /etc/apt/sources.list.d/pve-no-subscription.list
**Spécificité PVE** : Ne jamais ajouter de dépôts tiers non vérifiés sur un hyperviseur. Le dépôt enterprise est préférable en production (paquets testés plus rigoureusement, signés par Proxmox GmbH).
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 1.2.2.1 — Ensure updates, patches, and additional security software are installed |
| CIS Controls v8 | 7.3 — Perform Automated Operating System Patch Management |
| MITRE ATT&CK | T1190 (Exploit Public-Facing Application), M1051 (Update Software) |
| ISO 27001:2022 | A.8.8 — Management of technical vulnerabilities |
| PCI DSS v4.0 | 6.3.3 — Install security patches within one month |
| Scénario threat model | S3 (VM escape via CVE QEMU), S7 (supply chain) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Les correctifs de sécurité Debian sont stables. Un reboot peut être nécessaire (kernel) mais Automatic-Reboot est désactivé.
🔍 Audit
Audit :
dpkg -l unattended-upgrades | grep -q "^ii" && echo "PASS: installé" || echo "FAIL: non installé"
systemctl is-enabled unattended-upgrades && echo "PASS: activé" || echo "FAIL: désactivé"
grep -v "^//" /etc/apt/apt.conf.d/50unattended-upgrades | grep -q "Debian-Security" \
&& echo "PASS: sécurité Debian configurée" || echo "FAIL: non configuré"
**Remédiation** :
apt install -y unattended-upgrades apt-listchanges
dpkg-reconfigure -plow unattended-upgrades
Contenu de `/etc/apt/apt.conf.d/50unattended-upgrades` :
Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
// NE PAS ajouter de ligne pour les dépôts Proxmox
};
Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::MailReport "on-change";
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Contenu de `/etc/apt/apt.conf.d/20auto-upgrades` :
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
**Valeur par défaut** : `unattended-upgrades` non installé.
**Rollback** : `apt purge unattended-upgrades`
**Spécificité PVE** : **Ne JAMAIS inclure les dépôts Proxmox dans unattended-upgrades.** Les mises à jour PVE (kernel, qemu-server, pve-manager) doivent être testées manuellement. Un kernel PVE qui ne démarre plus = downtime total. Procédure de mise à jour PVE manuelle → Phase 2 (2.4.1).
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 2.1.x — Ensure [service] is not installed |
| CIS Controls v8 | 4.8 — Uninstall or Disable Unnecessary Services |
| MITRE ATT&CK | T1543 (Create or Modify System Process), M1042 (Disable or Remove Feature or Program) |
| ISO 27001:2022 | A.8.9 — Configuration management |
| PCI DSS v4.0 | 2.2.4 — Only necessary services are enabled |
| Scénario threat model | S1, S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible.
🔍 Audit
Audit :
for pkg in telnet rsh-client rsh-server xinetd tftp-server nis \
avahi-daemon cups talk inetutils-talk postfix exim4; do
dpkg -l "$pkg" 2>/dev/null | grep -q "^ii" && echo "FAIL: $pkg installé" \
| echo "PASS: $pkg absent" |
done
**Remédiation** :
apt purge -y telnet rsh-client rsh-server xinetd tftp-server nis \
avahi-daemon cups cups-client talk inetutils-talk 2>/dev/null
apt autoremove -y
**Valeur par défaut** : Varie selon la méthode d'installation. L'installateur ISO PVE installe un minimum. L'installateur Debian peut inclure des paquets supplémentaires selon les sélections tasksel.
---
1.2 — Noyau et paramètres de démarrage
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | 1.4.1 — Ensure bootloader password is set |
| CIS Controls v8 | 4.1 |
| MITRE ATT&CK | T1542.003 (Bootkit), M1046 (Boot Integrity) |
| ISO 27001:2022 | A.8.5 — Secure authentication |
| PCI DSS v4.0 | 2.2.1 |
| Scénario threat model | S10 (accès physique) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Le boot normal ne demande pas le mot de passe (paramètre --unrestricted). Le mot de passe n'est demandé que pour l'édition des entrées GRUB.
🔍 Audit
Audit :
grep -q "^set superusers" /boot/grub/grub.cfg && echo "PASS" || echo "FAIL"
grep -q "^password_pbkdf2" /boot/grub/grub.cfg && echo "PASS" || echo "FAIL"
**Remédiation** :
grub-mkpasswd-pbkdf2
cat >> /etc/grub.d/40_custom << 'EOF'
set superusers="grubadmin"
password_pbkdf2 grubadmin grub.pbkdf2.sha512.10000.<VOTRE_HASH>
EOF
sed -i 's/class gnu-linux/class gnu-linux --unrestricted/' /etc/grub.d/10_linux
update-grub
**Valeur par défaut** : Pas de mot de passe GRUB.
**Rollback** : Supprimer les lignes ajoutées dans `/etc/grub.d/40_custom` et `update-grub`.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 3.3.1 à 3.3.11 |
| CIS Controls v8 | 4.1, 4.8 |
| MITRE ATT&CK | T1557 (AitM), T1499 (Endpoint DoS), M1037 (Filter Network Traffic) |
| ISO 27001:2022 | A.8.20 — Network security, A.8.22 — Segregation of networks |
| PCI DSS v4.0 | 1.2.1, 1.3.1 |
| Scénario threat model | S1, S4, S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Exception critique : net.ipv4.ip_forward est nécessaire pour le réseau des VM. Ne PAS le désactiver si des VM ont un accès réseau.
🔍 Audit
Audit :
declare -A expected=(
["net.ipv4.conf.all.rp_filter"]="1"
["net.ipv4.conf.all.accept_redirects"]="0"
["net.ipv4.conf.all.send_redirects"]="0"
["net.ipv4.conf.all.accept_source_route"]="0"
["net.ipv4.conf.all.log_martians"]="1"
["net.ipv4.tcp_syncookies"]="1"
["net.ipv4.icmp_echo_ignore_broadcasts"]="1"
["net.ipv6.conf.all.accept_redirects"]="0"
["net.ipv6.conf.all.accept_source_route"]="0"
)
for key in "${!expected[@]}"; do
val=$(sysctl -n "$key" 2>/dev/null)
[ "$val" = "${expected[$key]}" ] && echo "PASS: $key = $val" \
| echo "FAIL: $key = $val (attendu: ${expected[$key]})" |
done
**Remédiation** :
Créer `/etc/sysctl.d/90-cis-network.conf` :
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
sysctl --system
**Valeur par défaut** : La plupart de ces paramètres sont à des valeurs permissives (accept_redirects=1, log_martians=0, etc.). `ip_forward` est activé par Proxmox.
**Rollback** : `rm /etc/sysctl.d/90-cis-network.conf && sysctl --system`
**Spécificité PVE** : **`net.ipv4.ip_forward = 1` est requis par Proxmox** pour le réseau des VM (bridges, NAT). Ne le désactivez PAS. Le CIS recommande de le mettre à 0 « si le système n'est pas un routeur » mais un hyperviseur Proxmox EST effectivement un routeur pour ses VM.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | 1.5.1 à 1.5.4 |
| CIS Controls v8 | 4.1 |
| MITRE ATT&CK | T1068 (Exploitation for Privilege Escalation), M1050 (Exploit Protection) |
| ISO 27001:2022 | A.8.9 — Configuration management |
| PCI DSS v4.0 | 2.2.1 |
| Scénario threat model | S3 (VM escape), S6 (insider) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible pour la plupart des workloads. ptrace_scope=2 empêche strace et gdb pour les utilisateurs non-root.
🔍 Audit
Audit :
declare -A expected=(
["kernel.kptr_restrict"]="2"
["kernel.dmesg_restrict"]="1"
["kernel.perf_event_paranoid"]="3"
["kernel.yama.ptrace_scope"]="2"
["kernel.unprivileged_bpf_disabled"]="1"
["kernel.kexec_load_disabled"]="1"
["fs.suid_dumpable"]="0"
)
for key in "${!expected[@]}"; do
val=$(sysctl -n "$key" 2>/dev/null)
[ "$val" = "${expected[$key]}" ] && echo "PASS: $key = $val" \
| echo "FAIL: $key = $val (attendu: ${expected[$key]})" |
done
**Remédiation** :
Créer `/etc/sysctl.d/90-cis-kernel.conf` :
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.perf_event_paranoid = 3
kernel.yama.ptrace_scope = 2
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2
kernel.kexec_load_disabled = 1
vm.unprivileged_userfaultfd = 0
fs.suid_dumpable = 0
sysctl --system
**Valeur par défaut** : La plupart à 0 ou 1 (permissif). `kptr_restrict=0`, `dmesg_restrict=0`, `ptrace_scope=0`.
**Rollback** : `rm /etc/sysctl.d/90-cis-kernel.conf && sysctl --system`
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | 1.1.1.1 à 1.1.1.8 |
| CIS Controls v8 | 4.8 |
| MITRE ATT&CK | T1068 (Exploitation for Privilege Escalation), M1042 (Disable or Remove Feature) |
| ISO 27001:2022 | A.8.9 |
| PCI DSS v4.0 | 2.2.4 |
| Scénario threat model | S3, S10 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Ces modules ne sont pas utilisés sur un hyperviseur standard.
🔍 Audit
Audit :
for mod in cramfs freevxfs hfs hfsplus jffs2 udf dccp sctp rds tipc; do
result=$(modprobe -n -v "$mod" 2>&1)
echo "$result" | grep -q "install /bin/true\|install /bin/false" \
&& echo "PASS: $mod désactivé" || echo "FAIL: $mod chargeable"
done
**Remédiation** :
Créer `/etc/modprobe.d/cis-hardening.conf` :
install cramfs /bin/false
blacklist cramfs
install freevxfs /bin/false
blacklist freevxfs
install hfs /bin/false
blacklist hfs
install hfsplus /bin/false
blacklist hfsplus
install jffs2 /bin/false
blacklist jffs2
install udf /bin/false
blacklist udf
install dccp /bin/false
blacklist dccp
install sctp /bin/false
blacklist sctp
install rds /bin/false
blacklist rds
install tipc /bin/false
blacklist tipc
install bluetooth /bin/false
blacklist bluetooth
install firewire-core /bin/false
blacklist firewire-core
update-initramfs -u
**Valeur par défaut** : Modules chargeables à la demande.
**Rollback** : `rm /etc/modprobe.d/cis-hardening.conf && update-initramfs -u`
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Complémentaire (hardening kernel avancé) |
| CIS Controls v8 | 4.1 |
| MITRE ATT&CK | T1068, T1014 (Rootkit), M1050 (Exploit Protection) |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S3 |
| Statut PVE 9 | ✅ Validé (paramètres listés), 🧪 Expérimental (lockdown=integrity) |
Description :
Description :
Rationale :
Rationale :
Impact : Surcoût performance ~1-5% selon le workload (principalement init_on_alloc/free).
🔧 Remédiation
Remédiation :
Dans /etc/default/grub :
GRUB_CMDLINE_LINUX_DEFAULT="quiet init_on_alloc=1 init_on_free=1 page_alloc.shuffle=1 slab_nomerge pti=on randomize_kstack_offset=on"
⚠️ NE PAS AJOUTER lockdown=integrity — ce paramètre empêche le chargement de modules kernel même par root. Il casse ZFS, Ceph, GPU passthrough et d'autres fonctionnalités Proxmox. Voir 12-experimental.md.
update-grub
**Audit** :
cat /proc/cmdline | grep -o "init_on_alloc=1" && echo "PASS" || echo "FAIL"
**Valeur par défaut** : `quiet` uniquement.
---
1.3 — Comptes et authentification locale
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 5.3.1 — Configure PAM software packages, 5.4.1 — Ensure password creation requirements |
| CIS Controls v8 | 5.2 — Use Unique Passwords |
| MITRE ATT&CK | T1110 (Brute Force), M1027 (Password Policies) |
| ISO 27001:2022 | A.5.17 — Authentication information |
| PCI DSS v4.0 | 8.3.6 — Minimum password complexity |
| Scénario threat model | S1, S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
grep -E "^minlen|^minclass|^dcredit|^ucredit" /etc/security/pwquality.conf 2>/dev/null
**Remédiation** :
apt install -y libpam-pwquality
Configurer `/etc/security/pwquality.conf` :
minlen = 14
minclass = 3
maxrepeat = 3
dictcheck = 1
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
**Valeur par défaut** : Aucune politique de complexité.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 5.3.2 — Ensure lockout for failed password attempts |
| CIS Controls v8 | 5.6 — Centralize Account Management |
| MITRE ATT&CK | T1110 (Brute Force), M1036 (Account Use Policies) |
| ISO 27001:2022 | A.8.5 — Secure authentication |
| PCI DSS v4.0 | 8.3.4 — Lockout after 10 invalid attempts |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
grep -E "^deny|^unlock_time|^fail_interval" /etc/security/faillock.conf 2>/dev/null
**Remédiation** :
Configurer `/etc/security/faillock.conf` :
deny = 5
unlock_time = 900
fail_interval = 900
**Valeur par défaut** : Pas de verrouillage.
**Spécificité PVE** : **`even_deny_root` peut bloquer le cluster.** Les migrations et la réplication Proxmox utilisent SSH root entre les nœuds. Si l'authentification échoue plusieurs fois (ex : clé expirée), le compte root se verrouille sur le nœud distant → cluster cassé. Préférer Fail2Ban (Phase 3) pour la protection brute-force de root.
---
| Profile Applicability | Level 1 — Server |
| Réf. CIS Debian 13 | 5.5.5 — Ensure default user shell timeout is configured |
| CIS Controls v8 | 4.3 — Configure Automatic Session Locking |
| MITRE ATT&CK | T1078 (Valid Accounts) |
| ISO 27001:2022 | A.8.5 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
Créer /etc/profile.d/cis-timeout.sh :
readonly TMOUT=900
export TMOUT
Valeur par défaut : Pas de timeout.
| Profile Applicability | Level 1 — Server |
| Réf. CIS Debian 13 | 1.7.1 à 1.7.6 |
| CIS Controls v8 | N/A |
| MITRE ATT&CK | N/A (contrôle juridique, pas technique) |
| ISO 27001:2022 | A.8.5 |
| PCI DSS v4.0 | 2.2.1 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
cat > /etc/issue.net << 'EOF'
- Acces autorise uniquement. Toute activite est journalisee. *
- Les acces non autorises seront poursuivis conformement a la loi.*
EOF
cp /etc/issue.net /etc/issue
/etc/motd
**Valeur par défaut** : Informations système dans `/etc/issue` (version Debian, hostname).
---
1.4 — Journalisation et audit
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 (🟡 N2 pour 🏠) |
| Réf. CIS Debian 13 | 6.2.1 à 6.2.4 |
| CIS Controls v8 | 8.2 — Collect Audit Logs, 8.5 — Collect Detailed Audit Logs |
| MITRE ATT&CK | T1070 (Indicator Removal), T1078 (Valid Accounts), M1028 (Operating System Configuration) |
| ISO 27001:2022 | A.8.15 — Logging |
| PCI DSS v4.0 | 10.2.1 — Audit logs capture defined events |
| Scénario threat model | S1, S3, S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Surcoût CPU ~2-4%, I/O supplémentaire selon le volume de logs. Surveiller la taille de /var/log/audit.
🔍 Audit
Audit :
systemctl is-active auditd && echo "PASS" || echo "FAIL"
auditctl -l | wc -l
**Remédiation** :
apt install -y auditd audispd-plugins
systemctl enable --now auditd
Créer `/etc/audit/rules.d/cis-hardening.rules` :
-D
-b 8192
-f 1
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
-w /etc/hosts -p wa -k network
-w /etc/network/ -p wa -k network
-w /etc/sysctl.conf -p wa -k sysctl
-w /etc/sysctl.d/ -p wa -k sysctl
-w /etc/ssh/sshd_config -p wa -k sshd
-w /etc/ssh/sshd_config.d/ -p wa -k sshd
-w /etc/pam.d/ -p wa -k pam
-w /etc/security/ -p wa -k pam
-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k time-change
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /etc/cron.daily/ -p wa -k cron
-w /etc/cron.hourly/ -p wa -k cron
-w /etc/cron.weekly/ -p wa -k cron
-w /etc/cron.monthly/ -p wa -k cron
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k privilege_escalation
-a always,exit -F arch=b64 -S mount,umount2 -F auid>=1000 -F auid!=4294967295 -k mounts
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F auid>=1000 -F auid!=4294967295 -k delete
-a always,exit -F arch=b64 -S init_module,finit_module,delete_module -k modules
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-w /sbin/rmmod -p x -k modules
-w /etc/pve/ -p wa -k proxmox-config
-e 2
augenrules --load
**Valeur par défaut** : `auditd` non installé.
**Rollback** : `systemctl stop auditd && apt purge auditd`
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 6.1.1 à 6.1.3 |
| CIS Controls v8 | 8.2 |
| MITRE ATT&CK | T1070.002 (Clear Linux Logs) |
| ISO 27001:2022 | A.8.15 |
| PCI DSS v4.0 | 10.2.1 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
Dans /etc/systemd/journald.conf :
[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=2G
SystemKeepFree=1G
ForwardToSyslog=yes
systemctl restart systemd-journald
Valeur par défaut : Storage=auto (persistant si /var/log/journal existe, sinon volatile).
1.5 — Services et processus
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 2.1.x à 2.3.x |
| CIS Controls v8 | 4.8 |
| MITRE ATT&CK | T1543 (Create or Modify System Process), M1042 |
| ISO 27001:2022 | A.8.9 |
| PCI DSS v4.0 | 2.2.4 |
| Scénario threat model | S1, S3 |
| Statut PVE 9 | ✅ Validé |
🔍 Audit
Audit :
ss -tlnp | grep LISTEN
**Remédiation** :
systemctl disable --now avahi-daemon.service 2>/dev/null
systemctl disable --now cups.service 2>/dev/null
systemctl disable --now rpcbind.service rpcbind.socket 2>/dev/null
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox (hors CIS) |
| CIS Controls v8 | 4.8 |
| MITRE ATT&CK | M1042 |
| Scénario threat model | S1, S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
systemctl mask --now spiceproxy.service
systemctl mask --now ceph.target
**Valeur par défaut** : Tous les services PVE actifs.
**Rollback** : `systemctl unmask <service>`
**Spécificité PVE** : Sur un nœud membre d'un cluster, ne JAMAIS masquer `corosync.service`, `pve-ha-lrm.service`, `pve-ha-crm.service`.
---
1.6 — AppArmor
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 1.3.1.1 — Ensure AppArmor is installed, 1.3.1.2 — Ensure AppArmor is enabled |
| CIS Controls v8 | 4.1, 10.5 |
| MITRE ATT&CK | T1068 (Exploitation for Privilege Escalation), M1050 (Exploit Protection) |
| ISO 27001:2022 | A.8.7 — Protection against malware |
| PCI DSS v4.0 | 2.2.1 |
| Scénario threat model | S3 (VM escape) |
| Statut PVE 9 | ✅ Validé |
🔍 Audit
Audit :
aa-status --enabled && echo "PASS" || echo "FAIL"
aa-status 2>/dev/null | head -5
**Remédiation** :
apt install -y apparmor apparmor-utils
grep -qE "apparmor=1|security=apparmor" /proc/cmdline || {
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="apparmor=1 security=apparmor /' /etc/default/grub
update-grub
echo "Reboot nécessaire pour activer AppArmor"
}
**Valeur par défaut** : AppArmor installé et actif sur Debian 13 et PVE 9.
**Spécificité PVE** : AppArmor est utilisé par PVE pour confiner les conteneurs LXC. Les profils par défaut sont fonctionnels. ⚠️ Régressions connues sur kernel 6.17 avec LXC nested — tester si nesting est utilisé.
---
1.7 — Checklist post-Phase 1
DÉPÔTS & PAQUETS
[ ] 1.1.1 — Dépôts Proxmox configurés, apt update sans erreur
[ ] 1.1.2 — unattended-upgrades configuré (sécurité Debian uniquement)
[ ] 1.1.3 — Paquets inutiles supprimés
KERNEL & BOOT
[ ] 1.2.1 — Mot de passe GRUB configuré (Level 2)
[ ] 1.2.2 — Sysctl réseau CIS 3.3.x appliqués
[ ] 1.2.3 — Sysctl kernel appliqués (Level 2)
[ ] 1.2.4 — Modules kernel inutiles blacklistés
[ ] 1.2.5 — Paramètres boot kernel appliqués (Level 2)
COMPTES & AUTH
[ ] 1.3.1 — Politique mots de passe (pwquality)
[ ] 1.3.2 — Verrouillage après échecs (faillock)
[ ] 1.3.3 — Timeout shell (TMOUT=900)
[ ] 1.3.4 — Bannière de connexion
JOURNALISATION
[ ] 1.4.1 — auditd installé + règles CIS + règle /etc/pve
[ ] 1.4.2 — journald en mode persistent
SERVICES
[ ] 1.5.1 — Services inutiles désactivés
[ ] 1.5.2 — Services PVE non utilisés masqués
APPARMOR
[ ] 1.6.1 — AppArmor actif et fonctionnel
VALIDATION
[ ] Reboot effectué
[ ] SSH fonctionnel
[ ] Web UI :8006 accessible
[ ] VM/CT de test démarrable
[ ] En cluster : migration live testée
[ ] ss -tlnp : uniquement les ports attendus
Navigation : ← 02-pre-installation.md | 04-proxmox-specifique.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Base de référence : CIS Debian Linux 13 Benchmark v1.0.0, Documentation Proxmox VE 9 Scénarios du threat model : S1, S3, S4, S6, S9
2.1 — Interface web (pveproxy)
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox (hors CIS) |
| CIS Controls v8 | 3.10 — Encrypt Sensitive Data in Transit |
| MITRE ATT&CK | T1557 (Adversary-in-the-Middle), T1040 (Network Sniffing), M1041 (Encrypt Sensitive Information) |
| ISO 27001:2022 | A.8.24 — Use of cryptography |
| PCI DSS v4.0 | 4.2.1 — Strong cryptography for transmission |
| Scénario threat model | S1, S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact :
Faible. Les navigateurs modernes supportent tous TLS 1.2+ avec AES-GCM et ChaCha20. Seuls les clients très anciens (IE < 11, Android < 5) seraient affectés.
🔍 Audit
Audit :
cat /etc/default/pveproxy 2>/dev/null
nmap --script ssl-enum-ciphers -p 8006 <PVE_IP>
openssl s_client -connect <PVE_IP>:8006 -tls1_1 2>&1 | grep -i "handshake"
**Remédiation** :
Créer ou modifier `/etc/default/pveproxy` :
CIPHERS="ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
CIPHERSUITES="TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
HONOR_CIPHER_ORDER=1
systemctl restart pveproxy
**Valeur par défaut** : Le fichier `/etc/default/pveproxy` n'existe pas par défaut. Pveproxy utilise les ciphers par défaut d'OpenSSL (incluant des ciphers CBC SHA-256/SHA-384).
**Rollback** : `rm /etc/default/pveproxy && systemctl restart pveproxy`
**Spécificité PVE** : Pveproxy est un daemon Perl utilisant AnyEvent::TLS. La configuration se fait exclusivement via `/etc/default/pveproxy` — il n'y a pas de fichier de configuration Apache/Nginx.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 3.10 |
| MITRE ATT&CK | T1557, M1041 |
| ISO 27001:2022 | A.8.24 |
| PCI DSS v4.0 | 4.2.1 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Nécessite un FQDN résolvable et un accès réseau pour la validation ACME (HTTP-01 ou DNS-01).
🔍 Audit
Audit :
openssl x509 -in /etc/pve/local/pve-ssl.pem -text -noout | grep -E "Issuer:|Not After"
pvenode acme account list 2>/dev/null
**Remédiation** :
pvenode acme account register default <email@example.com> --directory https://acme-v02.api.letsencrypt.org/directory
pvenode config set --acme domains=<fqdn>
pvenode acme cert order
**Valeur par défaut** : Certificats auto-signés générés à l'installation.
**Spécificité PVE** : Proxmox intègre nativement le support ACME dans l'interface web (Datacenter > ACME, puis Node > System > Certificates). Le renouvellement automatique est géré par un timer systemd (`pve-daily-update.timer`).
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 4.2 — Establish and Maintain a Firewall Rule Set, 13.1 — Centralize Security Event Alerting |
| MITRE ATT&CK | T1190 (Exploit Public-Facing Application), M1030 (Network Segmentation), M1035 (Limit Access to Resource) |
| ISO 27001:2022 | A.8.20 — Network security |
| PCI DSS v4.0 | 1.2.1 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible, mais risque de lock-out si l'IP d'administration change. Toujours conserver un accès console hors-bande.
🔍 Audit
Audit :
grep -E "ALLOW_FROM|DENY_FROM|POLICY" /etc/default/pveproxy 2>/dev/null
pvesh get /cluster/firewall/rules 2>/dev/null | grep 8006
**Remédiation** :
**Méthode 1 — ACL pveproxy** (simple, appliquée au niveau applicatif) :
Dans `/etc/default/pveproxy` :
ALLOW_FROM="10.0.10.0/24,192.168.1.0/24"
DENY_FROM="all"
POLICY="deny"
systemctl restart pveproxy
**Méthode 2 — Firewall PVE** (recommandée, plus granulaire) :
Voir Phase 4 (4.2.2) pour la configuration complète des règles firewall par nœud.
**Méthode combinée** (🌐 recommandée) : Les deux méthodes sont complémentaires — la défense en profondeur.
**Valeur par défaut** : Aucune restriction. Pveproxy accepte les connexions de toutes les IP.
**Rollback** : Supprimer les lignes ALLOW_FROM/DENY_FROM/POLICY de `/etc/default/pveproxy` et `systemctl restart pveproxy`. Si lock-out : accéder via console et modifier le fichier.
**Spécificité PVE** : La syntaxe ALLOW_FROM accepte les notations CIDR, les plages IP, et les adresses individuelles séparées par des virgules. `LISTEN_IP` peut aussi restreindre l'interface d'écoute mais ne supporte qu'une seule IP.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 4.8 |
| MITRE ATT&CK | T1021.005 (VNC), M1042 (Disable or Remove Feature) |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S1, S3 |
| Statut PVE 9 | ⚠️ Partiel — spiceproxy masquable, noVNC intégré à pveproxy |
Description :
Description :
Rationale :
Rationale :
Impact : Moyen. Plus de console graphique pour les VM depuis l'interface web PVE. L'accès SSH aux VM reste fonctionnel.
🔧 Remédiation
Remédiation :
systemctl mask --now spiceproxy.service
**Valeur par défaut** : spiceproxy actif et en écoute sur le port 3128.
**Rollback** : `systemctl unmask spiceproxy.service && systemctl start spiceproxy`
---
2.2 — API Proxmox
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 5.2 — Use Unique Passwords, 5.4 — Restrict Administrator Privileges |
| MITRE ATT&CK | T1078 (Valid Accounts), T1552 (Unsecured Credentials), M1026 (Privileged Account Management) |
| ISO 27001:2022 | A.5.17, A.8.5 |
| PCI DSS v4.0 | 8.3.1, 8.6.1 |
| Scénario threat model | S1, S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Nécessite de reconfigurer les outils d'automatisation existants.
🔍 Audit
Audit :
pveum user token list <user>@<realm>
grep -rn "password\|PVE_PASSWORD" /root/ /home/ /opt/ /etc/cron* 2>/dev/null
**Remédiation** :
pveum user token add ansible@pve ansible-token --privsep 1
pveum acl modify / --token 'ansible@pve!ansible-token' --role PVEVMAdmin
**Valeur par défaut** : Aucun token API créé.
**Spécificité PVE** : Avec `--privsep 1`, le token a des privilèges indépendants de l'utilisateur parent, ce qui permet le moindre privilège. La rotation des tokens se fait par suppression + recréation (`pveum user token remove` puis `add`).
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 4.2, 13.1 |
| MITRE ATT&CK | T1190, M1030 |
| ISO 27001:2022 | A.8.20 |
| PCI DSS v4.0 | 1.2.1 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Remédiation : Voir 2.1.3 (même mécanisme ALLOW_FROM/DENY_FROM).
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 8.2, 8.5 |
| MITRE ATT&CK | T1070 (Indicator Removal), M1028 (OS Configuration) |
| ISO 27001:2022 | A.8.15 |
| PCI DSS v4.0 | 10.2.1 |
| Scénario threat model | S6 (insider) |
| Statut PVE 9 | ✅ Validé (logs pveproxy natifs) |
Description :
Description :
Rationale :
Rationale :
🔍 Audit
Audit :
ls -la /var/log/pveproxy/access.log
tail -5 /var/log/pveproxy/access.log
cat /etc/logrotate.d/pveproxy 2>/dev/null
**Remédiation** :
Les logs API sont actifs par défaut. S'assurer de leur centralisation :
**Valeur par défaut** : Logs actifs dans `/var/log/pveproxy/access.log`. Rotation via logrotate.
**Spécificité PVE** : Le format des logs pveproxy est spécifique (pas du Common Log Format standard). Les parseurs Fail2Ban doivent être adaptés (voir Phase 3 — 3.4.2).
---
2.3 — Cluster Proxmox
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢 (clusters uniquement) |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 3.10, 12.6 |
| MITRE ATT&CK | T1557 (AitM), T1040 (Network Sniffing), M1041 (Encrypt Sensitive Information) |
| ISO 27001:2022 | A.8.24 |
| PCI DSS v4.0 | 4.2.1 |
| Scénario threat model | S4 (mouvement latéral cluster) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Surcoût CPU négligeable avec AES-NI.
🔍 Audit
Audit :
grep -E "crypto_cipher|crypto_hash" /etc/corosync/corosync.conf
**Remédiation** :
**Lors de la création du cluster** (méthode recommandée) :
Le chiffrement est activé par défaut lors de la création d'un cluster PVE 9 via l'interface web ou `pvecm create`.
**Sur un cluster existant** (nécessite un redémarrage de Corosync sur tous les nœuds) :
Modifier `/etc/corosync/corosync.conf` dans la section `totem` :
totem {
crypto_cipher: aes256
crypto_hash: sha256
}
systemctl restart corosync
**Valeur par défaut** : Sur PVE 9, le chiffrement Corosync est activé par défaut à la création du cluster (`aes256` + `sha256`). Sur les clusters migrés depuis PVE 7/8, il peut être désactivé.
**Rollback** : Remettre `crypto_cipher: none` et `crypto_hash: none`, redémarrer Corosync sur tous les nœuds.
**Spécificité PVE** : Le réseau Corosync doit être sur un VLAN dédié (voir Phase 4). Même avec le chiffrement activé, un réseau partagé expose le trafic à des attaques de déni de service ciblant Corosync.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 3.3, 4.1 |
| MITRE ATT&CK | T1552.004 (Private Keys), T1213 (Data from Information Repositories) |
| ISO 27001:2022 | A.8.3, A.8.12 |
| PCI DSS v4.0 | 3.5.1, 7.2.1 |
| Scénario threat model | S4, S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
🔍 Audit
Audit :
ls -la /etc/pve/
ls -la /var/lib/pve-cluster/backup/ 2>/dev/null
cd /etc/pve && git log --oneline -5 2>/dev/null
**Remédiation** :
tar czf /root/pve-config-backup-$(date +%Y%m%d).tar.gz /etc/pve/
apt install -y etckeeper
cd /etc/pve
git init
git add -A
git commit -m "Initial PVE config snapshot"
cat > /etc/cron.daily/backup-pve-config << 'EOF'
#!/bin/bash
tar czf /var/backups/pve-config-$(date +%Y%m%d).tar.gz /etc/pve/ 2>/dev/null
find /var/backups/ -name "pve-config-*.tar.gz" -mtime +30 -delete
EOF
chmod +x /etc/cron.daily/backup-pve-config
**Valeur par défaut** : `/etc/pve` géré par pmxcfs, pas de sauvegarde automatique dédiée.
**Spécificité PVE** : `/etc/pve` est un mount FUSE. Il n'est pas accessible si `pve-cluster` n'est pas actif. Les modifications sont propagées automatiquement à tous les nœuds du cluster. La surveillance via auditd (configurée en Phase 1, 1.4.1) détecte les modifications.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 3.10 |
| MITRE ATT&CK | T1557, T1040 |
| ISO 27001:2022 | A.8.24 |
| PCI DSS v4.0 | 4.2.1 |
| Scénario threat model | S9 (interception trafic) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Moyen. Le chiffrement de la migration augmente la durée de migration et la charge CPU. L'impact dépend de la taille de la mémoire VM et de la bande passante réseau.
🔍 Audit
Audit :
grep -E "migration:|migration_type" /etc/pve/datacenter.cfg 2>/dev/null
**Remédiation** :
Via l'interface web : Datacenter > Options > Migration Settings
Via la CLI, modifier `/etc/pve/datacenter.cfg` :
migration: secure
migration_network: 10.0.40.0/24
**Valeur par défaut** : `migration: secure` est le défaut sur PVE 9 (vérifier sur les clusters migrés depuis des versions antérieures).
**Rollback** : Modifier `migration: insecure` dans `/etc/pve/datacenter.cfg`.
**Spécificité PVE** : Le mode `secure` utilise un tunnel SSH chiffré pour le transfert mémoire. Le mode `insecure` envoie les données en clair sur un port TCP éphémère (60000-60050). Même en mode `secure`, isoler le trafic de migration sur un VLAN dédié est recommandé pour la performance et la sécurité.
---
2.4 — Gestion des mises à jour Proxmox
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 1.2.2.1 (complémentaire) |
| CIS Controls v8 | 7.1, 7.3, 7.4 |
| MITRE ATT&CK | T1190, T1068, M1051 (Update Software) |
| ISO 27001:2022 | A.8.8 |
| PCI DSS v4.0 | 6.3.3 |
| Scénario threat model | S1, S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : La procédure elle-même n'a pas d'impact. L'application des mises à jour nécessite une fenêtre de maintenance avec reboot potentiel.
🔧 Remédiation
Remédiation :
Procédure de mise à jour recommandée :
- Veille : s'abonner aux listes de diffusion Proxmox et surveiller les advisories
apt update
apt list --upgradable 2>/dev/null | grep pve
2. **Test en lab** : appliquer les mises à jour sur un nœud de test ou un PVE nested
apt dist-upgrade # Sur le nœud de test
3. **Rolling update en production** (un nœud à la fois) :
apt dist-upgrade
reboot
pveversion -v # Version PVE
uname -r # Kernel
systemctl status pveproxy pvedaemon corosync
pvecm status # Statut cluster
4. **Documentation** : noter les versions avant/après dans le journal des changements
**Valeur par défaut** : Pas de procédure définie. Les mises à jour sont à l'initiative de l'administrateur.
**Spécificité PVE** : Sur PVE 9, les breaking changes kernel 6.17 incluent le renommage d'interfaces réseau, des incompatibilités NVIDIA vGPU/DRBD, et des régressions AppArmor LXC. Toujours consulter les release notes avant une mise à jour kernel.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 2.2 |
| MITRE ATT&CK | T1068, M1051 |
| ISO 27001:2022 | A.8.8 |
| Scénario threat model | S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
🔍 Audit
Audit :
dpkg -l | grep pve-kernel | grep "^ii"
uname -r
**Remédiation** :
apt-mark hold pve-kernel-<version>
apt-mark hold pve-kernel-6.12.6-1-pve
apt-mark unhold pve-kernel-<version>
**Valeur par défaut** : Proxmox conserve les anciens kernels installés. Pas d'épinglage.
---
2.5 — Configuration PVE sécurisée
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 4.1, 8.2 |
| MITRE ATT&CK | T1070 (Indicator Removal), M1028 |
| ISO 27001:2022 | A.8.9, A.8.15 |
| PCI DSS v4.0 | 10.2.1 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
🔍 Audit
Audit :
dpkg -l etckeeper | grep -q "^ii" && echo "PASS" || echo "FAIL"
cd /etc && git log --oneline -3 2>/dev/null && echo "PASS: historique git" || echo "FAIL: pas d'historique"
**Remédiation** :
apt install -y etckeeper
**Valeur par défaut** : etckeeper non installé.
---
2.6 — Checklist post-Phase 2
INTERFACE WEB
[ ] 2.1.1 — Ciphers TLS durcis dans /etc/default/pveproxy
[ ] 2.1.2 — Certificats Let's Encrypt / ACME configurés (🏢🌐)
[ ] 2.1.3 — Accès Web UI restreint par IP
[ ] 2.1.4 — spiceproxy masqué si non utilisé (Level 2)
API
[ ] 2.2.1 — Tokens API utilisés (pas de mots de passe dans les scripts)
[ ] 2.2.2 — Accès API restreint par IP (Level 2)
[ ] 2.2.3 — Logs API collectés et centralisés
CLUSTER
[ ] 2.3.1 — Chiffrement Corosync activé (aes256 + sha256)
[ ] 2.3.2 — /etc/pve sauvegardé régulièrement
[ ] 2.3.3 — Migration configurée en mode secure + réseau dédié
MISES À JOUR
[ ] 2.4.1 — Procédure de mise à jour PVE documentée
[ ] 2.4.2 — Au moins 2 kernels installés
CONFIGURATION
[ ] 2.5.1 — etckeeper installé et fonctionnel (Level 2)
VALIDATION
[ ] Web UI accessible sur HTTPS avec certificat valide
[ ] sslscan/<PVE_IP>:8006 : uniquement TLS 1.2+ et ciphers AEAD
[ ] API fonctionnelle avec tokens
[ ] Cluster : pvecm status OK
[ ] Migration test : réussie en mode secure
Navigation : ← 03-os-debian-durci.md | 05-acces-authentification.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Base de référence : CIS Debian Linux 13 Benchmark v1.0.0, Documentation Proxmox VE 9 Scénarios du threat model : S1, S4, S6
3.1 — Durcissement SSH
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 5.1.1 à 5.1.22 |
| CIS Controls v8 | 4.1, 5.2, 5.4 |
| MITRE ATT&CK | T1021.004 (SSH), T1110 (Brute Force), T1078 (Valid Accounts), M1032 (Multi-factor Authentication), M1035 (Limit Access) |
| ISO 27001:2022 | A.5.17, A.8.5, A.8.20 |
| PCI DSS v4.0 | 2.2.1, 8.2.1, 8.3.1 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact :
Moyen. Nécessite de configurer les clés SSH avant de désactiver l'authentification par mot de passe. Risque de lock-out si mal exécuté.
⚠️ SPÉCIFICITÉ PVE CRITIQUE — PermitRootLogin :
Proxmox utilise SSH root entre les nœuds du cluster pour les migrations live, la réplication, et les opérations cluster. Désactiver complètement le login root SSH casse le cluster.
La configuration recommandée est :
PermitRootLogin prohibit-password
Match Address 10.0.40.0/24
PermitRootLogin prohibit-password
**Audit** :
sshd -T 2>/dev/null | grep -Ei "permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries|x11forwarding|protocol"
**Remédiation** :
**Étape 1 — Préparer les clés SSH AVANT de modifier sshd** :
ssh-keygen -t ed25519 -C "admin@pve"
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<PVE_IP>
ssh -i ~/.ssh/id_ed25519 root@<PVE_IP>
**Étape 2 — Modifier la configuration sshd** :
Créer `/etc/ssh/sshd_config.d/hardening.conf` :
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
PermitEmptyPasswords no
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitUserEnvironment no
DisableForwarding yes
Banner /etc/issue.net
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
**Étape 3 — Tester et appliquer** :
sshd -t
systemctl restart sshd
ssh -i ~/.ssh/id_ed25519 root@<PVE_IP>
**Valeur par défaut** : `PasswordAuthentication yes`, `PermitRootLogin yes`, `MaxAuthTries 6`, `X11Forwarding yes`.
**Rollback** : `rm /etc/ssh/sshd_config.d/hardening.conf && systemctl restart sshd`
**Spécificité PVE** :
- **Ne JAMAIS mettre `PermitRootLogin no`** sur un nœud cluster — casse les migrations et la réplication
- `prohibit-password` autorise les clés SSH root (nécessaire au cluster) mais interdit les mots de passe
- Pour la configuration SSH client des peers cluster (compatibilité clés RSA PVE), voir la section ssh-audit ci-dessous
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 5.1.6 à 5.1.10 |
| CIS Controls v8 | 3.10 |
| MITRE ATT&CK | T1557, M1041 |
| ISO 27001:2022 | A.8.24 |
| PCI DSS v4.0 | 4.2.1 |
| Scénario threat model | S1, S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Les clients SSH modernes supportent tous les algorithmes recommandés. Les clients très anciens (PuTTY < 0.75, OpenSSH < 7.6) pourraient être impactés.
🔍 Audit
Audit :
apt install -y ssh-audit 2>/dev/null || pip install ssh-audit --break-system-packages
ssh-audit localhost
**Remédiation** :
Ajouter dans `/etc/ssh/sshd_config.d/hardening.conf` :
KexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group18-sha512,diffie-hellman-group16-sha512
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-ed25519,sk-ssh-ed25519@openssh.com,rsa-sha2-512,rsa-sha2-256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
**Configuration SSH client pour les peers cluster** :
Proxmox stocke des clés hôte RSA dans `/etc/pve/nodes/*/ssh_known_hosts`. Pour éviter les warnings lors des opérations cluster tout en utilisant Ed25519 pour l'accès externe :
Créer `/root/.ssh/config` sur chaque nœud :
Host pve-node 10.0.40.
HostKeyAlgorithms rsa-sha2-512,rsa-sha2-256
PubkeyAcceptedAlgorithms rsa-sha2-512,rsa-sha2-256
Host *
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
systemctl restart sshd
**Valeur par défaut** : Algorithmes par défaut d'OpenSSL/OpenSSH incluant des options legacy.
---
3.2 — Authentification multi-facteurs (2FA)
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 6.3 — Require MFA for Externally-Exposed Applications, 6.4 — Require MFA for Remote Network Access, 6.5 — Require MFA for Administrative Access |
| MITRE ATT&CK | T1078 (Valid Accounts), T1110 (Brute Force), M1032 (Multi-factor Authentication) |
| ISO 27001:2022 | A.8.5 — Secure authentication |
| PCI DSS v4.0 | 8.4.1, 8.4.2, 8.4.3 |
| Scénario threat model | S1, S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Nécessite une app TOTP (FreeOTP, Google Authenticator, Aegis, etc.) et une procédure de récupération documentée.
⚠️ CORRECTION vs guide HomeSecExplorer : La syntaxe pveum realm modify <<pam>> --tfa type=<<oath>> est incorrecte et échoue. La bonne procédure est via l'interface web ou /etc/pve/domains.cfg.
🔍 Audit
Audit :
cat /etc/pve/priv/tfa.cfg 2>/dev/null | head -5
grep -i "tfa" /etc/pve/domains.cfg 2>/dev/null
**Remédiation** :
**Procédure recommandée (via interface web)** :
1. Se connecter à l'interface web PVE (`https://<PVE_IP>:8006`)
2. Aller dans **Datacenter > Permissions > Two Factor**
3. Cliquer **Add > TOTP**
4. Scanner le QR code avec votre app authenticator
5. Entrer le code de vérification
6. **Générer des Recovery Keys** (IMPÉRATIF — les stocker hors ligne)
**Pour imposer le 2FA au niveau du realm** :
- Via l'interface web : **Datacenter > Permissions > Realms** > sélectionner `pam` > **Edit** > **TFA** : sélectionner "OATH (TOTP)"
- ⚠️ Si vous sélectionnez "OATH (TOTP)" comme exigence du realm, **seul** TOTP sera accepté (pas WebAuthn). Pour autoriser TOTP ou WebAuthn au choix de l'utilisateur, laisser le champ TFA du realm à "none" et imposer le 2FA par politique organisationnelle.
**Procédure de récupération en cas de perte du token** :
**Valeur par défaut** : Aucun 2FA configuré.
**Spécificité PVE** : Le 2FA PVE est indépendant du 2FA PAM système. Il protège l'interface web et l'API REST, mais PAS l'accès SSH (qui est protégé par les clés SSH). C'est la combinaison des deux (clés SSH + 2FA web) qui assure la protection complète.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 6.3, 6.4, 6.5 |
| MITRE ATT&CK | T1078, T1110, T1566 (Phishing), M1032 |
| ISO 27001:2022 | A.8.5 |
| PCI DSS v4.0 | 8.4.1 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Nécessite un certificat TLS valide (pas auto-signé) et la configuration WebAuthn dans PVE.
Prérequis :
- Certificat TLS valide sur le nœud PVE (voir Phase 2, 2.1.2)
- Hardware key (YubiKey, SoloKeys) ou platform authenticator (Touch ID, Windows Hello, Android)
🔧 Remédiation
Remédiation :
- Origin :
https://<votre-fqdn>:8006 - Relying Party :
<votre-fqdn> - ID :
<votre-domaine>
- Datacenter > Permissions > Two Factor > Add > WebAuthn
- Enregistrer votre clé ou authenticator
Valeur par défaut : WebAuthn non configuré.
Spécificité PVE : En cluster, le WebAuthn Relying Party doit correspondre au domaine par lequel vous accédez au cluster. Si vous accédez via des noms différents par nœud, WebAuthn ne fonctionnera que pour le domaine configuré. Un load balancer ou DNS round-robin avec un FQDN unique est recommandé.
3.3 — RBAC Proxmox (contrôle d'accès basé sur les rôles)
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 5.4 — Restrict Administrator Privileges, 6.1 — Establish an Access Granting Process, 6.8 — Define and Maintain Role-Based Access Control |
| MITRE ATT&CK | T1078 (Valid Accounts), M1026 (Privileged Account Management), M1018 (User Account Management) |
| ISO 27001:2022 | A.5.15, A.5.18, A.8.2 |
| PCI DSS v4.0 | 7.2.1, 7.2.2 |
| Scénario threat model | S6 (insider) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Nécessite la création de comptes et l'attribution de rôles.
🔍 Audit
Audit :
pveum user list
pveum acl list
journalctl -u pvedaemon --since "7 days ago" | grep "root@pam" | grep "successful" | tail -5
**Remédiation** :
pveum group add admins --comment "Administrateurs PVE"
pveum user add alice@pve --firstname Alice --lastname Dupont --email alice@example.com --groups admins
pveum passwd alice@pve
pveum acl modify / --group admins --role Administrator
**Rôles prédéfinis utiles PVE** :
| Rôle | Privilèges | Usage type |
|------|-----------|------------|
| `Administrator` | Tous | Admin infra (à limiter au strict nécessaire) |
| `PVEVMAdmin` | Gestion VM complète | Opérateur VM |
| `PVEVMUser` | Console, start/stop | Utilisateur VM |
| `PVEAuditor` | Lecture seule | Auditeur, monitoring |
| `PVEDatastoreUser` | Backup, restore | Opérateur backup |
**Valeur par défaut** : Seul `root@pam` existe avec tous les privilèges.
**Spécificité PVE** :
- Les nouveaux privilèges PVE 9 incluent `VM.Replicate` (ajouté) et `VM.Monitor` (supprimé). Vérifier les rôles custom après une mise à jour majeure.
- Préférer les groupes aux ACL individuelles pour faciliter la maintenance.
- Les ACL PVE supportent les chemins : `/`, `/vms/<vmid>`, `/storage/<storage>`, `/pool/<pool>`.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 6.8 |
| MITRE ATT&CK | M1026 |
| ISO 27001:2022 | A.5.15, A.5.18 |
| PCI DSS v4.0 | 7.2.2 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
pveum role add VMOperator --privs "VM.Console VM.PowerMgmt VM.Monitor VM.Audit"
pveum role add BackupAdmin --privs "Datastore.AllocateSpace Datastore.Audit VM.Backup"
pveum role add NetAuditor --privs "SDN.Audit Sys.Audit"
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢 |
| CIS Controls v8 | 5.6, 6.1, 6.7 |
| MITRE ATT&CK | T1078.002 (Domain Accounts), M1026 |
| ISO 27001:2022 | A.5.16, A.5.17 |
| PCI DSS v4.0 | 7.2.1, 8.2.1 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Impact : Moyen. Dépendance à l'infrastructure LDAP/AD.
🔧 Remédiation
Remédiation :
pveum realm add myldap --type ldap \
--base-dn "ou=People,dc=example,dc=com" \
--bind-dn "cn=pve-readonly,dc=example,dc=com" \
--server1 ldap.example.com \
--port 636 \
--secure 1 \
--user-attr uid
pveum realm sync myldap
**Valeur par défaut** : Seuls les realms `pam` et `pve` sont configurés.
**Spécificité PVE** : La synchronisation LDAP importe les utilisateurs et groupes dans `/etc/pve/user.cfg`. Les mots de passe ne sont PAS stockés dans PVE (authentification relayée vers le serveur LDAP).
---
3.4 — Protection brute-force
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Complémentaire |
| CIS Controls v8 | 4.1, 13.1 |
| MITRE ATT&CK | T1110 (Brute Force), M1036 (Account Use Policies) |
| ISO 27001:2022 | A.8.5, A.8.16 |
| PCI DSS v4.0 | 8.3.4 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
apt install -y fail2ban
cat > /etc/fail2ban/jail.d/sshd.conf << 'EOF'
[sshd]
enabled = true
maxretry = 3
findtime = 2d
bantime = 1h
bantime.increment = true
bantime.factor = 24
bantime.maxtime = 30d
EOF
systemctl enable --now fail2ban
**Notes** : Le `bantime.increment` est crucial — après le premier ban de 1h, le deuxième sera de 24h, le troisième de 48h, etc. Rend le brute-force véritablement impraticable.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | Spécifique Proxmox |
| CIS Controls v8 | 4.1, 13.1 |
| MITRE ATT&CK | T1110, T1190, M1036 |
| ISO 27001:2022 | A.8.5, A.8.16 |
| PCI DSS v4.0 | 8.3.4 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
⚠️ CORRECTION CRITIQUE : Sur PVE 9, syslog n'est plus installé par défaut. La configuration Fail2Ban doit utiliser le backend systemd (journal), PAS /var/log/daemon.log ou /var/log/syslog. Les guides qui pointent vers ces fichiers ne fonctionnent PAS sur PVE 9.
Impact : Faible. Risque de faux positif si findtime est trop court.
🔍 Audit
Audit :
fail2ban-client status proxmox 2>/dev/null
fail2ban-regex systemd-journal /etc/fail2ban/filter.d/proxmox.conf
**Remédiation** :
**Filtre** — Créer `/etc/fail2ban/filter.d/proxmox.conf` :
[INCLUDES]
before = common.conf
[Definition]
failregex = pvedaemon\[.authentication failure; rhost=<HOST> user=. msg=.*
journalmatch = _SYSTEMD_UNIT=pvedaemon.service
ignoreregex =
**Jail** — Créer `/etc/fail2ban/jail.d/proxmox.conf` :
[proxmox]
enabled = true
port = https,http,8006
filter = proxmox
backend = systemd
maxretry = 3
findtime = 2d
bantime = 1h
bantime.increment = true
bantime.factor = 24
bantime.maxtime = 30d
systemctl restart fail2ban
fail2ban-client status proxmox
**Validation** :
fail2ban-regex systemd-journal /etc/fail2ban/filter.d/proxmox.conf
**Valeur par défaut** : Fail2Ban non installé. Aucune protection brute-force sur le port 8006.
**Rollback** : `apt purge fail2ban`
**Spécificité PVE** :
- Le `journalmatch = _SYSTEMD_UNIT=pvedaemon.service` est essentiel pour la performance — sans lui, Fail2Ban scanne TOUT le journal systemd.
- Penser aussi à protéger le realm PAM : si PAM est un realm de login disponible, ajouter le jail `pam-generic` standard de Fail2Ban.
- En cluster, Fail2Ban doit être installé sur **chaque nœud** individuellement (la configuration n'est pas synchronisée via pmxcfs).
---
3.5 — Accès VPN
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🌐 |
| Réf. CIS Debian 13 | Spécifique infrastructure |
| CIS Controls v8 | 12.7 — Ensure Remote Devices Use a VPN |
| MITRE ATT&CK | T1133 (External Remote Services), M1030 (Network Segmentation), M1037 (Filter Network Traffic) |
| ISO 27001:2022 | A.8.20, A.8.22 |
| PCI DSS v4.0 | 1.2.1, 2.2.7, 4.2.1 |
| Scénario threat model | S1 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Moyen. Nécessite une configuration VPN sur chaque poste d'administration. Si le VPN est inaccessible, l'administration du serveur l'est aussi (prévoir un accès console OOB de secours).
🔧 Remédiation
Remédiation :
apt install -y wireguard
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
chmod 600 /etc/wireguard/server.key
Créer `/etc/wireguard/wg0.conf` :
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = <contenu de /etc/wireguard/server.key>
PostUp = iptables -A INPUT -i wg0 -j ACCEPT
PostDown = iptables -D INPUT -i wg0 -j ACCEPT
[Peer]
PublicKey = <clé publique du client>
AllowedIPs = 10.10.10.2/32
systemctl enable --now wg-quick@wg0
wg show
Puis restreindre l'accès SSH et web UI au VPN uniquement (via firewall PVE ou pveproxy ALLOW_FROM, voir Phase 2 et Phase 4).
**Valeur par défaut** : WireGuard non installé.
**Spécificité PVE** :
- Idéalement, WireGuard ne devrait PAS tourner sur l'hyperviseur lui-même mais dans une VM ou un conteneur dédié, ou sur un routeur externe. Cela évite qu'un bug WireGuard compromette directement l'hyperviseur. En pratique pour un serveur unique chez un hébergeur, le faire tourner sur l'hôte est acceptable.
- **Alternatives** : OpenVPN, Tailscale/Headscale (mesh VPN sans configuration NAT), ZeroTier.
---
3.6 — Checklist post-Phase 3
SSH
[ ] 3.1.1 — Clés SSH configurées et testées AVANT modification sshd
[ ] 3.1.1 — PasswordAuthentication no
[ ] 3.1.1 — PermitRootLogin prohibit-password (pas 'no' en cluster !)
[ ] 3.1.1 — MaxAuthTries 3, X11Forwarding no
[ ] 3.1.2 — Algorithmes ssh-audit appliqués
[ ] 3.1.2 — Config SSH client pour peers cluster (/root/.ssh/config)
2FA
[ ] 3.2.1 — TOTP configuré pour tous les comptes admin
[ ] 3.2.1 — Recovery keys générées et stockées hors ligne
[ ] 3.2.2 — WebAuthn configuré (Level 2, 🏢🌐)
RBAC
[ ] 3.3.1 — Comptes nominatifs créés (root@pam non utilisé quotidiennement)
[ ] 3.3.1 — Groupes et rôles attribués
[ ] 3.3.2 — Rôles custom créés si nécessaire (Level 2)
[ ] 3.3.3 — LDAP/AD intégré si applicable (Level 2, 🏢)
FAIL2BAN
[ ] 3.4.1 — Jail SSH active et testée
[ ] 3.4.2 — Jail Proxmox web UI active avec backend systemd
[ ] 3.4.2 — Regex validé : fail2ban-regex systemd-journal proxmox.conf
VPN (🌐)
[ ] 3.5.1 — WireGuard déployé (si serveur exposé internet)
[ ] 3.5.1 — SSH et web UI accessibles uniquement via VPN
VALIDATION
[ ] Connexion SSH par clé fonctionnelle
[ ] Connexion web UI avec 2FA fonctionnelle
[ ] Fail2Ban : tester un échec d'auth et vérifier le ban
[ ] En cluster : migration live fonctionnelle (SSH root entre nœuds)
[ ] Procédure de récupération 2FA documentée et testée
Navigation : ← 04-proxmox-specifique.md | 06-reseau-segmentation.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Base de référence : CIS Debian Linux 13 Benchmark v1.0.0, Documentation Proxmox VE Firewall Scénarios du threat model : S1, S4, S8, S9
4.1 — Architecture réseau
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 (🏠 simplifié) |
| Réf. CIS Debian 13 | Spécifique infrastructure |
| CIS Controls v8 | 12.2 — Establish and Maintain a Secure Network Architecture |
| MITRE ATT&CK | T1557 (Adversary-in-the-Middle), T1021 (Remote Services), T1040 (Network Sniffing), M1030 (Network Segmentation) |
| ISO 27001:2022 | A.8.22 — Segregation of networks |
| PCI DSS v4.0 | 1.2.1 — Restrict inbound/outbound traffic, 1.3.1 — Restrict inbound to CDE |
| Scénario threat model | S4 (cluster), S5 (BMC), S9 (interception) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Nécessite un switch manageable supportant les VLAN 802.1Q. Configuration à faire idéalement avant la mise en production.
🔍 Audit
Audit :
cat /etc/network/interfaces
ip -br link show
ip -br addr show
ip route show
**Remédiation** :
Architecture VLAN de référence (🏢🌐) :
| VLAN | Nom | Bridge PVE | Rôle | Ports |
|------|-----|-----------|------|-------|
| 10 | Management | vmbr0 | Web UI, SSH, API | 8006, 22 |
| 20 | VM/CT | vmbr1 | Trafic applicatif guests | Variable |
| 30 | Stockage | vmbr2 | NFS, iSCSI, Ceph public | 2049, 3260, 6789 |
| 40 | Cluster | vmbr3 | Corosync, migration | 5405/udp, 60000-60050 |
| 41 | Ceph cluster | vmbr4 | Réplication OSD (si Ceph) | 6800-7300 |
| 99 | OOB | — | BMC/IPMI (port physique dédié) | 443 |
Exemple `/etc/network/interfaces` (2 interfaces physiques, VLAN tagging) :
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet manual
auto eno1.10
iface eno1.10 inet static
auto vmbr0
iface vmbr0 inet static
address 10.0.10.11/24
gateway 10.0.10.1
bridge-ports eno1.10
bridge-stp off
bridge-fd 0
auto eno1.20
iface eno1.20 inet manual
auto vmbr1
iface vmbr1 inet manual
bridge-ports eno1.20
bridge-stp off
bridge-fd 0
auto eno2
iface eno2 inet manual
auto vmbr3
iface vmbr3 inet static
address 10.0.40.11/24
bridge-ports eno2
bridge-stp off
bridge-fd 0
**Alternative — VLAN-aware bridge** (plus flexible, recommandé PVE 9) :
auto vmbr0
iface vmbr0 inet static
address 10.0.10.11/24
gateway 10.0.10.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 10 20 30 40
Avec un VLAN-aware bridge, les VM se voient attribuer un VLAN tag dans leur configuration réseau (ex: `tag=20`).
Architecture simplifiée (🏠) :
auto vmbr0
iface vmbr0 inet static
address 192.168.1.100/24
gateway 192.168.1.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
**Valeur par défaut** : L'installateur PVE crée un seul bridge `vmbr0` avec l'IP de management.
**Rollback** : Modifier `/etc/network/interfaces` et `ifreload -a`. ⚠️ Tester via console OOB — une erreur réseau rend le serveur inaccessible par SSH.
**Spécificité PVE** : Les VLAN-aware bridges sont la méthode recommandée par Proxmox. Chaque VM peut recevoir un tag VLAN dans sa config réseau sans créer de bridges supplémentaires.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 12.2 |
| MITRE ATT&CK | M1030 |
| ISO 27001:2022 | A.8.22 |
| Scénario threat model | S4, S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
🔍 Audit
Audit :
grep -r "bridge=vmbr0" /etc/pve/qemu-server/ /etc/pve/lxc/ 2>/dev/null
**Remédiation** : Migrer les VM du bridge management vers un bridge VM dédié. Modifier la configuration réseau de chaque VM dans l'interface PVE (Hardware > Network Device > Bridge).
**Valeur par défaut** : Toutes les VM sur `vmbr0` (même bridge que le management).
---
4.2 — Firewall Proxmox VE
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 4.1.x à 4.3.x (firewall) |
| CIS Controls v8 | 4.2 — Establish and Maintain a Firewall Rule Set, 4.4 — Implement and Manage a Host-Based Firewall, 4.5 — Implement Application Layer Filtering |
| MITRE ATT&CK | T1190 (Exploit Public-Facing Application), T1021 (Remote Services), M1037 (Filter Network Traffic) |
| ISO 27001:2022 | A.8.20 — Network security, A.8.21 — Security of network services |
| PCI DSS v4.0 | 1.2.1, 1.3.1, 1.3.2, 1.4.1 |
| Scénario threat model | S1, S4 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Élevé si mal exécuté. Risque de lock-out. Toujours conserver un accès console OOB. Le firewall PVE dispose de règles anti-lockout cachées qui autorisent automatiquement certains trafics depuis les « management hosts ».
⚠️ CORRECTION vs guide HomeSecExplorer : Le guide HSE affirme que la politique INPUT est DROP par défaut quand le firewall est activé. C'est partiellement vrai : la politique est bien DROP, mais les règles anti-lockout automatiques autorisent SSH (22), Web UI (8006), VNC (5900-5999), SPICE (3128) et Corosync (5405-5412) depuis le réseau local management. Ces règles sont invisibles dans l'interface mais présentes dans les iptables.
Comportement du firewall PVE à l'activation :
| Trafic | Politique par défaut | Règles anti-lockout |
|---|---|---|
| INPUT depuis management LAN → SSH (22) | DROP | ✅ Autorisé (anti-lockout) |
| INPUT depuis management LAN → Web UI (8006) | DROP | ✅ Autorisé (anti-lockout) |
| INPUT depuis management LAN → VNC (5900-5999) | DROP | ✅ Autorisé (anti-lockout) |
| INPUT cluster → Corosync (5405-5412) | DROP | ✅ Autorisé (anti-lockout) |
| INPUT depuis AUTRE réseau → n'importe quoi | DROP | ❌ Bloqué |
| OUTPUT → tout | ACCEPT | — |
| FORWARD (VM) | — | Géré par les firewall VM individuels |
Point critique : les règles DC et les règles VM sont indépendantes. Les règles Datacenter s'appliquent aux nœuds. Les règles VM s'appliquent uniquement aux VM. Il n'y a PAS de cascading automatique.
🔍 Audit
Audit :
cat /etc/pve/firewall/cluster.fw 2>/dev/null | grep "enable"
cat /etc/pve/firewall/cluster.fw 2>/dev/null | grep "policy"
iptables -L -n -v | head -30
systemctl is-active pve-firewall
**Remédiation** :
**Procédure pas à pas (anti lock-out)** :
**Étape 1** — Préparer les règles AVANT d'activer le firewall :
Créer `/etc/pve/firewall/cluster.fw` :
[OPTIONS]
enable: 0
policy_in: DROP
policy_out: ACCEPT
[RULES]
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 8006 -log nolog
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 22 -log nolog
IN ACCEPT -source 10.0.40.0/24 -p udp -dport 5405:5412 -log nolog
IN ACCEPT -source 10.0.40.0/24 -p tcp -dport 60000:60050 -log nolog
IN ACCEPT -p icmp -log nolog
**Étape 2** — Vérifier l'accès OOB (IPMI/iDRAC/console) — en cas de lock-out.
**Étape 3** — Activer le firewall :
pvesh set /cluster/firewall/options --enable 1
**Étape 4** — Tester IMMÉDIATEMENT :
ssh root@<PVE_IP>
**Étape 5** — Activer le firewall par nœud :
Créer `/etc/pve/nodes/<hostname>/host.fw` :
[OPTIONS]
enable: 1
**Valeur par défaut** : Firewall **désactivé**. Aucune règle.
**Rollback** :
pvesh set /cluster/firewall/options --enable 0
**Spécificité PVE** :
- Le firewall PVE est basé sur **iptables** (backend classique) ou **nftables** (nouveau backend `proxmox-firewall`, activable dans Host > Firewall > Options).
- Les règles sont stockées dans `/etc/pve/firewall/` (cluster) et distribuées automatiquement à tous les nœuds.
- Les **management hosts** sont définis par l'IPSet `management` qui inclut automatiquement le réseau du cluster. Cet IPSet peut être personnalisé.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.2 |
| MITRE ATT&CK | M1037 |
| ISO 27001:2022 | A.8.20 |
| PCI DSS v4.0 | 1.2.1 |
| Scénario threat model | S1, S4 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
Ports à autoriser par nœud (dans /etc/pve/nodes/<hostname>/host.fw) :
| Port | Protocole | Source | Rôle | Obligatoire |
|---|---|---|---|---|
| 22 | TCP | Réseau admin | SSH | ✅ |
| 8006 | TCP | Réseau admin | Web UI / API | ✅ |
| 5405-5412 | UDP | Réseau cluster | Corosync | ✅ (cluster) |
| 60000-60050 | TCP | Réseau cluster | Migration live | ✅ (cluster) |
| 5900-5999 | TCP | Réseau admin | Console VNC | ⚠️ Si noVNC utilisé |
| 3128 | TCP | Réseau admin | Console SPICE | ⚠️ Si SPICE utilisé |
| 6789 | TCP | Réseau stockage | Ceph monitor | ⚠️ Si Ceph |
| 6800-7300 | TCP | Réseau stockage/Ceph | Ceph OSD | ⚠️ Si Ceph |
| 2049 | TCP | Réseau stockage | NFS | ⚠️ Si NFS |
| 3260 | TCP | Réseau stockage | iSCSI | ⚠️ Si iSCSI |
| 111 | TCP/UDP | Réseau stockage | rpcbind (NFS) | ⚠️ Si NFS v3 |
Exemple /etc/pve/nodes/pve-node01/host.fw :
[OPTIONS]
enable: 1
[RULES]
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 22
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 8006
IN ACCEPT -source 10.0.40.0/24 -p udp -dport 5405:5412
IN ACCEPT -source 10.0.40.0/24 -p tcp -dport 60000:60050
IN ACCEPT -p icmp
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.2, 4.4 |
| MITRE ATT&CK | M1030, M1037 |
| ISO 27001:2022 | A.8.20, A.8.22 |
| PCI DSS v4.0 | 1.2.1, 1.3.1 |
| Scénario threat model | S1, S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Faible. Nécessite de définir les groupes et de les assigner.
🔍 Audit
Audit :
pvesh get /cluster/firewall/groups
for vmid in $(qm list 2>/dev/null | tail -n+2 | awk '{print $1}'); do
fw=$(qm config $vmid | grep "firewall=" | head -1)
echo "VM $vmid: $fw"
done
**Remédiation** :
Créer des Security Groups via l'interface web (Datacenter > Firewall > Security Group) ou via `/etc/pve/firewall/cluster.fw` :
[group web-server]
IN ACCEPT -p tcp -dport 80
IN ACCEPT -p tcp -dport 443
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 22
[group db-server]
IN ACCEPT -source 10.0.20.0/24 -p tcp -dport 3306
IN ACCEPT -source 10.0.20.0/24 -p tcp -dport 5432
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 22
[group management-only]
IN ACCEPT -source 10.0.10.0/24 -p tcp -dport 22
IN ACCEPT -p icmp
Appliquer à une VM : VM > Firewall > Insert: Security Group
**Valeur par défaut** : Aucun Security Group. Firewall VM désactivé par défaut.
**Spécificité PVE** : Les Security Groups sont définis au niveau Datacenter mais appliqués au niveau VM. Ils sont réutilisables sur toutes les VM du cluster.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢 |
| CIS Controls v8 | 4.2 |
| MITRE ATT&CK | M1037 |
| Scénario threat model | S4 |
| Statut PVE 9 | ⚠️ Partiel — tester soigneusement |
Description :
Description :
Rationale :
Rationale :
Impact : Élevé. FORWARD=DROP sans règles explicites casse la communication inter-VM, y compris les migrations live et la réplication si les VM utilisent le même bridge que le cluster.
⚠️ CORRECTION vs guide HomeSecExplorer : Le guide HSE recommande FORWARD=DROP sans documenter suffisamment les règles nécessaires pour le cluster. En pratique, cette modification casse les migrations si le réseau de migration passe par un bridge qui a aussi des VM.
🔧 Remédiation
Remédiation :
Seul mettre FORWARD=DROP si :
- Le réseau de migration est sur un bridge/VLAN séparé des VM
- Des règles FORWARD explicites sont configurées pour chaque flux inter-VM nécessaire
- Le changement a été testé en lab avec des migrations live
[OPTIONS]
policy_forward: DROP
**Valeur par défaut** : `policy_forward: ACCEPT`
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.2 |
| Scénario threat model | S1 |
| Statut PVE 9 | ⚠️ Partiel — fonctionnel mais plus récent |
Description :
Description :
Avantages du backend nftables :
- Pas de bridges firewall supplémentaires (fwbrX) créés pour les bridges Linux
- Architecture plus moderne et performante
- Meilleur support futur
Limitations :
- REJECT n'est pas disponible pour le trafic guest (trafic droppé à la place)
- Plus récent, moins de retour d'expérience communautaire
🔧 Remédiation
Remédiation :
[OPTIONS]
nftables: 1
Valeur par défaut : Backend iptables (pve-firewall).
Spécificité PVE : Ne PAS confondre le backend nftables PVE avec le passage du système de iptables-legacy à nftables au niveau Debian. Le firewall PVE gère sa propre couche, indépendamment du backend nftables Debian.
4.3 — Protection réseau avancée
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| Réf. CIS Debian 13 | 3.3.11 |
| CIS Controls v8 | 4.8, 12.2 |
| MITRE ATT&CK | T1557, M1037 |
| ISO 27001:2022 | A.8.20 |
| Scénario threat model | S4, S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
⚠️ Rappel : ip_forward = 1 est requis par Proxmox. Le CIS recommande de le désactiver « si le système n'est pas un routeur », mais un hyperviseur PVE est un routeur pour ses VM. Ne PAS désactiver.
🔍 Audit
Audit :
sysctl net.ipv4.ip_forward
sysctl net.ipv4.conf.all.rp_filter
**Remédiation** : Voir Phase 1 (1.2.2) pour la configuration complète des sysctl réseau.
---
4.4 — Checklist post-Phase 4
ARCHITECTURE RÉSEAU
[ ] 4.1.1 — Segmentation VLAN implémentée (🏢🌐)
[ ] 4.1.1 — Bridges configurés dans /etc/network/interfaces
[ ] 4.1.2 — VM sur bridge séparé du management
FIREWALL PVE
[ ] 4.2.1 — Firewall activé au niveau Datacenter (policy_in: DROP)
[ ] 4.2.1 — Règles d'accès management configurées (SSH, :8006)
[ ] 4.2.1 — Règles cluster configurées (Corosync, migration)
[ ] 4.2.2 — Firewall activé par nœud (host.fw)
[ ] 4.2.3 — Security Groups créés et appliqués aux VM
[ ] 4.2.4 — FORWARD policy évalué (Level 2)
[ ] 4.2.5 — Backend nftables évalué (Level 2)
RÉSEAU
[ ] 4.3.1 — ip_forward = 1 (requis PVE), rp_filter = 1
VALIDATION
[ ] Accès SSH fonctionnel depuis le réseau admin
[ ] Web UI accessible depuis le réseau admin
[ ] VM accessible depuis le réseau VM (pas management)
[ ] En cluster : Corosync fonctionnel (pvecm status)
[ ] En cluster : migration live réussie
[ ] Ceph fonctionnel (si applicable)
[ ] Test : accès Web UI depuis un réseau non-admin → bloqué
[ ] iptables -L -n | grep PVEFW : chaînes présentes
Navigation : ← 05-acces-authentification.md | 07-stockage-chiffrement.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Scénarios du threat model : S2, S9, S10
5.1 — Chiffrement au repos
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 3.6 — Encrypt Data on End-User Devices |
| MITRE ATT&CK | T1005 (Data from Local System), M1041 (Encrypt Sensitive Information) |
| ISO 27001:2022 | A.8.24 — Use of cryptography |
| PCI DSS v4.0 | 3.5.1 |
| Scénario threat model | S10 (accès physique) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
lsblk -f | grep -i crypt && echo "LUKS: PASS" || echo "LUKS: non détecté"
zfs get encryption -r rpool 2>/dev/null | grep -v "off" | grep -v "NAME" && echo "ZFS encryption: PASS" || echo "ZFS encryption: non détecté"
df /var/lib/vz | tail -1
**Spécificité PVE** : Même si le root filesystem n'est pas chiffré, les données VM peuvent l'être via ZFS native encryption per-dataset. C'est un compromis acceptable pour les environnements où le FDE compliquerait trop les reboots.
---
5.2 — Chiffrement en transit
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢 (clusters Ceph uniquement) |
| CIS Controls v8 | 3.10 — Encrypt Sensitive Data in Transit |
| MITRE ATT&CK | T1040 (Network Sniffing), T1557 (AitM), M1041 |
| ISO 27001:2022 | A.8.24 |
| PCI DSS v4.0 | 4.2.1 |
| Scénario threat model | S9 (interception trafic) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Surcoût performance ~5-10% sur le throughput Ceph (dépend du CPU et de la bande passante réseau).
🔍 Audit
Audit :
ceph config get mon ms_cluster_mode 2>/dev/null
ceph config get osd ms_cluster_mode 2>/dev/null
**Remédiation** :
ceph config set global ms_cluster_mode secure
ceph config set global ms_service_mode secure
ceph config set global ms_client_mode secure
ceph config dump | grep ms_
**Valeur par défaut** : `crc` (intégrité uniquement, pas de chiffrement).
**Rollback** : `ceph config set global ms_cluster_mode crc`
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 3.10 |
| MITRE ATT&CK | T1557, M1041 |
| ISO 27001:2022 | A.8.24 |
| PCI DSS v4.0 | 4.2.1 |
| Scénario threat model | S9 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
NFS :
- Restreindre les exports par IP :
/etc/exportssur le serveur NFS ne doit lister que les IPs des nœuds PVE - Utiliser NFS v4 (pas v3) — supporte Kerberos pour l'authentification
- Isoler le trafic NFS sur le VLAN stockage (Phase 4)
iSCSI :
- Activer CHAP mutuel (authentification bidirectionnelle)
- Restreindre les initiateurs autorisés (LUN masking/zoning)
- Isoler sur le VLAN stockage
5.3 — Stockage Proxmox
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 4.8 |
| MITRE ATT&CK | T1499.001 (OS Exhaustion), M1022 |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S2 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
findmnt /var/lib/vz && echo "PASS: partition séparée" || echo "INFO: sur le root fs"
df -h /var/lib/vz /
**Remédiation** : Si `/var/lib/vz` est sur le root filesystem (cas de l'installateur ISO avec LVM-thin), envisager de le déplacer sur un volume dédié lors de la prochaine maintenance.
**Spécificité PVE** : L'installateur ISO PVE crée un LVM-thin pool séparé pour les données VM (`data`), mais `/var/lib/vz` (ISOs, templates) reste sur le root LV par défaut. Pour ZFS, un dataset séparé est créé automatiquement.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 3.3, 6.1 |
| MITRE ATT&CK | T1005, M1022 |
| ISO 27001:2022 | A.8.3 |
| PCI DSS v4.0 | 7.2.1 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
ls -la /var/lib/vz/
ls -la /var/lib/vz/images/ /var/lib/vz/dump/ 2>/dev/null
---
5.4 — Checklist post-Phase 5
CHIFFREMENT AU REPOS
[ ] 5.1.1 — Chiffrement vérifié (LUKS ou ZFS encryption)
CHIFFREMENT EN TRANSIT
[ ] 5.2.1 — Ceph Messenger v2 en mode secure (si Ceph)
[ ] 5.2.2 — NFS/iSCSI sécurisé (exports restreints, VLAN stockage)
STOCKAGE PVE
[ ] 5.3.1 — /var/lib/vz isolé ou surveillance espace disque
[ ] 5.3.2 — Permissions datastores vérifiées
Navigation : ← 06-reseau-segmentation.md | 08-isolation-vm-ct.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Scénarios du threat model : S3, S8 Sources : BSI KVMSec v1.0.1, QEMU Security Documentation, OpenStack Security Guide
Ce chapitre couvre un domaine que les autres guides Proxmox ne traitent pas : le durcissement de la couche de virtualisation elle-même.
6.1 — Isolation QEMU/KVM
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.1, 10.5 |
| MITRE ATT&CK | T1611 (Escape to Host), T1068 (Exploitation for Privilege Escalation), M1050 (Exploit Protection) |
| ISO 27001:2022 | A.8.7, A.8.9 |
| PCI DSS v4.0 | 6.2.4 |
| Scénario threat model | S3 (VM escape) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Nul. Seccomp est activé par défaut dans QEMU sur Proxmox.
🔍 Audit
Audit :
QEMU_PID=$(pgrep -f "qemu-system" | head -1)
[ -n "$QEMU_PID" ] && grep -c "Seccomp" /proc/$QEMU_PID/status && echo "Seccomp mode:" && grep "Seccomp" /proc/$QEMU_PID/status || echo "Aucune VM en cours"
ps aux | grep qemu | grep -c "sandbox off"
**Valeur par défaut** : Seccomp activé par défaut dans QEMU sur PVE 9.
**Spécificité PVE** : Proxmox n'expose pas de paramètre pour désactiver seccomp dans la configuration VM standard. Seul l'ajout d'arguments QEMU custom (`-sandbox off`) via `args:` dans la config VM pourrait le désactiver — auditer les configurations pour s'en assurer.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.1 |
| MITRE ATT&CK | T1003 (OS Credential Dumping — side channel), M1050 |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S3 (VM escape — side channel) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Augmentation de la consommation mémoire (pas de déduplication). Pertinent uniquement en multi-tenant ou si les VM hébergent des tenants non fiables.
⚠️ CORRECTION vs guide HomeSecExplorer : Le guide HSE recommande echo 2 > /sys/kernel/mm/ksm/run mais oublie de désactiver ksmtuned qui peut réactiver KSM automatiquement.
🔍 Audit
Audit :
cat /sys/kernel/mm/ksm/run
systemctl is-active ksmtuned 2>/dev/null
**Remédiation** :
echo 0 > /sys/kernel/mm/ksm/run
systemctl disable --now ksmtuned 2>/dev/null
echo "KSM_ENABLED=0" > /etc/default/ksm 2>/dev/null
cat > /etc/tmpfiles.d/disable-ksm.conf << 'EOF'
w /sys/kernel/mm/ksm/run - - - - 0
EOF
**Valeur par défaut** : KSM activé (`run = 1`) sur PVE pour économiser la mémoire.
**Rollback** : `echo 1 > /sys/kernel/mm/ksm/run`
---
| Profile Applicability | Level 1 — Server (si passthrough utilisé) |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.1 |
| MITRE ATT&CK | T1611 (Escape to Host), T1068, M1050 |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S8 (PCI/DMA) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
Impact : Nul si IOMMU est déjà activé. Peut nécessiter une modification BIOS + paramètre kernel.
🔍 Audit
Audit :
dmesg | grep -i "IOMMU enabled\|DMAR\|AMD-Vi"
find /sys/kernel/iommu_groups/ -type l | head -20
cat /proc/cmdline | grep -o "intel_iommu=on\|amd_iommu=on\|iommu=pt"
**Remédiation** :
1. Activer VT-d (Intel) ou AMD-Vi dans le BIOS
2. Ajouter dans `/etc/default/grub` :
GRUB_CMDLINE_LINUX_DEFAULT="... intel_iommu=on iommu=pt"
GRUB_CMDLINE_LINUX_DEFAULT="... amd_iommu=on iommu=pt"
update-grub && reboot
**Règle** : Ne JAMAIS passer un device PCI à une VM non fiable sans IOMMU vérifié fonctionnel.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 4.8, 16.13 |
| MITRE ATT&CK | T1611, M1042 (Disable or Remove Feature) |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
| Paramètre | Recommandation | Justification |
|---|---|---|
| Machine type | q35 |
Meilleure isolation que i440fx, support IOMMU natif |
| Floppy | Retirer | Device legacy inutile, surface d'attaque |
| Serial/Parallel ports | Retirer si non utilisés | Réduction surface d'attaque |
| USB tablet | Remplacer par tablet: 0 + VirtIO |
Évite l'émulation USB |
| CPU type | host ou modèle spécifique |
host = meilleure performance ; modèle = meilleure compatibilité migration |
| Ballooning | Désactiver si multi-tenant | Évite les fuites d'info mémoire |
qm config <VMID> | grep -E "machine|cpu|balloon|serial|parallel"
---
6.2 — Isolation LXC
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 4.1, 5.4 |
| MITRE ATT&CK | T1611, M1026 |
| ISO 27001:2022 | A.8.7, A.8.9 |
| Scénario threat model | S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
for ctid in $(pct list 2>/dev/null | tail -n+2 | awk '{print $1}'); do
unpriv=$(pct config $ctid | grep "unprivileged" | awk '{print $2}')
echo "CT $ctid: unprivileged=$unpriv"
done
**Remédiation** : Lors de la création, toujours cocher « Unprivileged container ». Pour convertir un conteneur existant : recréer (pas de conversion in-place possible).
**Spécificité PVE** :
- Les conteneurs privilégiés sont parfois nécessaires pour NFS mounts, certains modules kernel, ou Docker-in-LXC. Documenter et justifier chaque exception.
- **Docker dans LXC** : préférer Docker dans une VM en environnement sensible. Si LXC est nécessaire, utiliser un conteneur non privilégié avec nesting activé + keyctl.
- ⚠️ Régressions AppArmor + LXC nested sur kernel 6.17 — tester.
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 4.1 |
| MITRE ATT&CK | T1499 (Endpoint DoS), M1038 (Execution Prevention) |
| ISO 27001:2022 | A.8.9 |
| Scénario threat model | S3 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔍 Audit
Audit :
qm config <VMID> | grep -E "memory|cores|cpulimit|bwlimit"
**Remédiation** : Configurer pour chaque VM/CT :
- `memory` : limite mémoire maximale
- `cores` : nombre de vCPU
- `cpulimit` : limite CPU en pourcentage (ex: `cpulimit: 2` = 2 cœurs max)
- `bwlimit` : limite bande passante réseau et I/O (via Options > Bandwidth Limit)
---
6.3 — Checklist post-Phase 6
QEMU/KVM
[ ] 6.1.1 — Seccomp actif sur les processus QEMU
[ ] 6.1.2 — KSM désactivé (multi-tenant)
[ ] 6.1.3 — IOMMU actif et vérifié (si PCI passthrough)
[ ] 6.1.4 — VM en machine type q35, devices inutiles retirés
LXC
[ ] 6.2.1 — Tous les conteneurs en mode unprivileged
[ ] 6.2.2 — Limites cgroup configurées sur chaque VM/CT
VALIDATION
[ ] Vérifier seccomp : grep Seccomp /proc/<QEMU_PID>/status → 2
[ ] Vérifier KSM : cat /sys/kernel/mm/ksm/run → 0
[ ] Vérifier IOMMU : dmesg | grep IOMMU → enabled
[ ] Aucune VM avec args: contenant "-sandbox off"
Navigation : ← 07-stockage-chiffrement.md | 09-monitoring-detection.md →
-e
Version : 0.2.0 Date : 2026-03-20 Statut : Rédaction initiale — Format CIS hybride Licence : CC BY-SA 4.0 Scénarios du threat model : S1-S10 (détection transversale)
7.1 — Collecte de métriques et alerting
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 (🟡 recommandé 🏠) |
| CIS Controls v8 | 8.2 — Collect Audit Logs, 8.11 — Conduct Audit Log Reviews |
| MITRE ATT&CK | T1070 (Indicator Removal), M1028 (OS Configuration) |
| ISO 27001:2022 | A.8.15, A.8.16 — Monitoring activities |
| PCI DSS v4.0 | 10.4.1 |
| Scénario threat model | Tous |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
**Alertes critiques à configurer** :
| Alerte | Seuil | Scénario |
|--------|-------|----------|
| Espace disque root < 10% | Warning à 20%, Critical à 10% | S2 |
| Espace stockage VM < 15% | Warning à 25% | S2 |
| Échecs auth > 10/h | Rate | S1 |
| CPU hôte > 90% soutenu 15min | Sustained | S3 |
| Certificat TLS expire < 14j | Days | S1 |
| Nœud cluster unreachable | Quorum | S4 |
| Backup PBS échoué | Boolean | S2 |
| Suppression massive de fichiers | Rate | S2 (ransomware) |
---
7.2 — Détection d'intrusion
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 8.5 — Collect Detailed Audit Logs |
| MITRE ATT&CK | T1070 (Indicator Removal), T1554 (Compromise Client Software), M1028 |
| ISO 27001:2022 | A.8.15, A.8.16 |
| PCI DSS v4.0 | 11.5.2 |
| Scénario threat model | S6, S7 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
apt install -y aide aide-common
aideinit
cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
cat > /etc/cron.daily/aide-check << 'EOF'
#!/bin/bash
/usr/bin/aide --check | mail -s "AIDE report $(hostname)" admin@example.com
EOF
chmod +x /etc/cron.daily/aide-check
**Spécificité PVE** : Initialiser AIDE **après** avoir terminé toutes les phases de hardening. Sinon, la base de référence contiendra l'état non durci et les modifications de hardening seront signalées comme des altérations.
---
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 8.2, 8.9 — Centralize Audit Logs |
| MITRE ATT&CK | T1070.002 (Clear Linux Logs), M1029 (Remote Data Storage) |
| ISO 27001:2022 | A.8.15 |
| PCI DSS v4.0 | 10.3.3 |
| Scénario threat model | S6 (insider) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
Rationale :
Rationale :
🔧 Remédiation
Remédiation :
Option A — rsyslog vers un serveur distant :
. @@logserver.example.com:514
**Option B — Promtail + Loki** (plus moderne) :
Déployer Promtail dans une VM dédiée, configurer la collecte des journaux systemd et des fichiers de log PVE.
**Point critique** : Le serveur de centralisation ne doit PAS être administrable par les mêmes comptes que les nœuds PVE.
---
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 4.1 |
| Scénario threat model | Tous |
| Statut PVE 9 | 🧪 En développement |
Description :
Description :
🔧 Remédiation
Remédiation :
---
7.3 — Checklist post-Phase 7
MONITORING
[ ] 7.1.1 — Solution de monitoring déployée
[ ] 7.1.1 — Alertes critiques configurées (disque, auth, backup, cluster)
DÉTECTION
[ ] 7.2.1 — AIDE initialisé (après hardening complet)
[ ] 7.2.2 — Logs centralisés vers serveur externe
[ ] 7.2.3 — Script audit.sh planifié mensuellement
Navigation : ← 08-isolation-vm-ct.md | 10-maintenance-continue.md →
-e
Version : 0.2.0 Date : 2026-03-20 Licence : CC BY-SA 4.0 Scénarios du threat model : Tous
8.1 — Gestion des patches
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 7.1, 7.4 |
| MITRE ATT&CK | M1051 (Update Software) |
| ISO 27001:2022 | A.8.8 |
| PCI DSS v4.0 | 6.3.1 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
- Liste de diffusion Proxmox :
pve-announce@lists.proxmox.com - Forum Proxmox — section Security
- Flux RSS Debian Security Advisories : https://www.debian.org/security/dsa
- CVE tracking : https://app.opencve.io (filtrer sur
proxmox,qemu,linux kernel)
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 7.3 |
| Scénario threat model | S1, S3, S7 |
| Statut PVE 9 | ✅ Validé |
Remédiation : Voir Phase 2 (2.4.1) pour la procédure de rolling update détaillée.
Fréquences recommandées :
| Type de mise à jour | Fréquence | Procédure |
|---|---|---|
| Sécurité Debian (via unattended-upgrades) | Automatique quotidien | Automatisé Phase 1 |
| Paquets Proxmox (non-security) | Mensuel | Test lab → rolling update |
| Kernel PVE | Trimestriel ou sur CVE critique | Test lab → rolling update → reboot |
| Mise à jour majeure (PVE 9 → 10) | Annuel | Test complet → migration planifiée |
8.2 — Revue périodique
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 5.1, 6.1, 6.2 |
| MITRE ATT&CK | M1026, M1018 |
| ISO 27001:2022 | A.5.15, A.5.18 |
| PCI DSS v4.0 | 7.2.4, 8.6.3 |
| Scénario threat model | S6 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
Checklist de revue trimestrielle :
pveum user list
pveum acl list
for user in $(pveum user list --output-format json 2>/dev/null | jq -r '.[].userid'); do
echo "=== $user ==="
pveum user token list "$user" 2>/dev/null
done
cat /etc/pve/firewall/cluster.fw
cat /etc/pve/priv/tfa.cfg 2>/dev/null | wc -l
Actions à prendre :
- Désactiver les comptes inutilisés : `pveum user modify <user> --enable 0`
- Révoquer les tokens API inutilisés : `pveum user token remove <user> <token>`
- Documenter les déviations
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 5.2 |
| MITRE ATT&CK | T1552, M1027 |
| ISO 27001:2022 | A.5.17 |
| PCI DSS v4.0 | 8.3.9, 8.6.3 |
| Scénario threat model | S1, S6 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
| Secret | Fréquence de rotation | Méthode |
|---|---|---|
| Tokens API | Annuelle ou sur incident | pveum user token remove + add |
| Clés SSH admin | Annuelle | Régénérer + redistribuer |
| Mots de passe root | Semestrielle | passwd sur chaque nœud |
| Certificats TLS (ACME) | Automatique (90j) | Géré par PVE |
| Certificats auto-signés | Annuelle | pvecm updatecerts --force |
8.3 — Documentation vivante
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 1.1, 2.1 |
| ISO 27001:2022 | A.5.9 |
| Statut PVE 9 | ✅ Validé |
Remédiation : Mettre à jour après chaque changement :
- Inventaire matériel (Phase 0, 0.1.5)
- Schéma réseau / VLAN
- Journal des changements (etckeeper, voir Phase 2, 2.5.1)
- Liste des déviations par rapport à ce guide (avec justification, acceptation du risque, approbation)
8.4 — Checklist post-Phase 8
PATCHES
[ ] 8.1.1 — Veille sécurité activée (mailing list, RSS, CVE tracking)
[ ] 8.1.2 — Procédure de mise à jour documentée et suivie
REVUE
[ ] 8.2.1 — Revue trimestrielle accès/permissions effectuée
[ ] 8.2.2 — Rotation des secrets planifiée
DOCUMENTATION
[ ] 8.3.1 — Inventaire à jour
[ ] 8.3.1 — Schéma réseau à jour
[ ] 8.3.1 — Journal des changements tenu
Navigation : ← 09-monitoring-detection.md | 11-backup-dr.md →
Version : 0.2.0 Date : 2026-03-20 Licence : CC BY-SA 4.0 Scénarios du threat model : S2 (ransomware), S10
9.1 — Stratégie de sauvegarde
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 11.1 — Establish and Maintain a Data Recovery Process, 11.2 — Perform Automated Backups, 11.3 — Protect Recovery Data |
| MITRE ATT&CK | T1486 (Data Encrypted for Impact), T1490 (Inhibit System Recovery), M1053 (Data Backup) |
| ISO 27001:2022 | A.8.13 — Information backup |
| PCI DSS v4.0 | 9.4.1, 12.10.1 |
| Scénario threat model | S2 (ransomware) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
- 3 copies des données
- 2 types de supports différents
- 1 copie hors site
- 1 copie hors ligne ou immuable
- 0 erreur de restauration vérifiée
🔧 Remédiation
Remédiation :
Architecture de backup recommandée :
| Copie | Support | Emplacement | Immutabilité | Rétention |
|---|---|---|---|---|
| 1 — Primaire | PBS local | Même site | ⚠️ Non | 7 jours |
| 2 — Réplica | PBS distant | Site secondaire | ✅ Retention lock | 30 jours |
| 3 — Archive | Stockage objet (S3) ou bandes | Hors site | ✅ WORM/immutable | 90+ jours |
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 3.6, 11.3 |
| MITRE ATT&CK | T1486, T1490, M1053, M1041 |
| ISO 27001:2022 | A.8.13, A.8.24 |
| PCI DSS v4.0 | 3.5.1 |
| Scénario threat model | S2, S10 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
proxmox-backup-client key create /etc/pve/priv/backup-encryption-key.json
proxmox-backup-client key show /etc/pve/priv/backup-encryption-key.json
**⚠️ Point critique** : L'escrow de la clé de chiffrement est **non négociable**. Le jour de la recovery n'est pas le moment d'improviser. Tester la restauration avec la clé escrow AVANT d'en avoir besoin.
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 11.3, 11.4 |
| MITRE ATT&CK | T1490 (Inhibit System Recovery), M1053 |
| ISO 27001:2022 | A.8.13 |
| PCI DSS v4.0 | 9.4.1 |
| Scénario threat model | S2 (ransomware) |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
Sur le serveur PBS :
proxmox-backup-manager datastore update <datastore> --keep-last 7 --keep-daily 30
**Mesures complémentaires** :
- Le token PVE utilisé pour les backups ne doit PAS avoir le privilège de suppression sur PBS
- PBS doit être sur un réseau/serveur séparé du cluster PVE
- L'accès admin PBS doit utiliser des credentials différents de PVE
---
9.2 — Sauvegardes hôte
| Profile Applicability | Level 1 — Server |
| Applicabilité PVE | 🏠🏢🌐 |
| CIS Controls v8 | 11.2 |
| ISO 27001:2022 | A.8.13 |
| Scénario threat model | S2, S4 |
| Statut PVE 9 | ✅ Validé |
🔧 Remédiation
Remédiation :
tar czf /var/backups/network-config-$(date +%Y%m%d).tar.gz \
/etc/network/interfaces \
/etc/pve/firewall/ \
/etc/ssh/sshd_config.d/ \
/etc/sysctl.d/ \
/etc/fail2ban/ \
/etc/default/pveproxy \
2>/dev/null
---
9.3 — Tests de reprise
| Profile Applicability | Level 2 — Server |
| Applicabilité PVE | 🏢🌐 |
| CIS Controls v8 | 11.5 — Test Data Recovery |
| MITRE ATT&CK | M1053 |
| ISO 27001:2022 | A.5.29, A.5.30 |
| PCI DSS v4.0 | 12.10.2 |
| Scénario threat model | S2 |
| Statut PVE 9 | ✅ Validé |
Description :
Description :
🔧 Remédiation
Remédiation :
Protocole de drill trimestriel :
- Sélectionner une VM de test (ou clone d'une VM de production)
- Restaurer depuis PBS vers un nœud de test
- Vérifier le démarrage de la VM
- Vérifier l'intégrité des données applicatives
- Mesurer le temps total de restauration (RTO)
- Documenter les résultats :
- Date du drill
- VM restaurée
- Source du backup (local/distant/archive)
- Clé de chiffrement utilisée (escrow vérifié)
- RTO mesuré
- Résultat : succès/échec + notes
Point critique : Le drill DOIT tester la restauration avec la clé escrow (pas la clé sur le nœud PVE). C'est la seule façon de vérifier que l'escrow fonctionne.
9.4 — Checklist post-Phase 9
STRATÉGIE
[ ] 9.1.1 — Règle 3-2-1-1-0 implémentée
[ ] 9.1.2 — PBS configuré avec chiffrement client-side
[ ] 9.1.2 — Clé de chiffrement escrow hors du cluster PVE
[ ] 9.1.3 — Immutabilité activée sur PBS (anti-ransomware)
CONFIGS
[ ] 9.2.1 — /etc/pve sauvegardé (cron quotidien)
[ ] 9.2.1 — Configs réseau/firewall/SSH sauvegardées
TESTS
[ ] 9.3.1 — Drill de restauration effectué et documenté
[ ] 9.3.1 — RTO/RPO mesurés et conformes aux objectifs
[ ] 9.3.1 — Escrow de la clé vérifié lors du drill
Navigation : ← 10-maintenance-continue.md | 12-experimental.md →
-e
Conclusion
Pour un accompagnement personnalisé, contactez notre équipe.
Télécharger cet article en PDF
Format A4 optimisé pour l'impression et la lecture hors ligne
À propos de l'auteur
Ayi NEDJIMI
Auditeur Senior Cybersécurité & Consultant IA
Expert Judiciaire — Cour d'Appel de Paris
Habilitation Confidentiel Défense
ayi@ayinedjimi-consultants.fr
Ayi NEDJIMI est un vétéran de la cybersécurité avec plus de 25 ans d'expérience sur des missions critiques. Ancien développeur Microsoft à Redmond sur le module GINA (Windows NT4) et co-auteur de la version française du guide de sécurité Windows NT4 pour la NSA.
À la tête d'Ayi NEDJIMI Consultants, il réalise des audits Lead Auditor ISO 42001 et ISO 27001, des pentests d'infrastructures critiques, du forensics et des missions de conformité NIS2 / AI Act.
Conférencier international (Europe & US), il a formé plus de 10 000 professionnels.
Domaines d'expertise
Ressources & Outils de l'auteur
Articles connexes
SIEM Hybride Open Source : Wazuh + Graylog + Suricata
Sécurité des Conteneurs : Scanning, Runtime, Hardening
La conteneurisation a profondément transformé le développement et le déploiement logiciel, avec Docker comptant aujourd'hui plus de 13 millions d'utilisateurs actifs et Kubernetes devenu le standard de facto pour l'orchestration de conteneurs en production. Cette adoption massive s'accompagne d'une surface...
Shift Left Security : Intégrer la Sécurité dès le Code
La philosophie du Shift Left Security repose sur un constat simple mais radical : chaque vulnérabilité détectée en production coûte entre 30 et 100 fois plus cher à corriger qu'une faille identifiée lors de la phase de conception ou de...
Commentaires
Aucun commentaire pour le moment. Soyez le premier à commenter !
Laisser un commentaire