?é Comp�tences acquises
S�curiser son Proxmox comme un Pro
??é Le Tutoriel Complet
S�curit� Proxmox de A � Z
La m�taphore d'OWL : Le Ch�teau Fort ?é
Un Proxmox non s�curis�, c'est comme un ch�teau fort avec la herse lev�e, les portes grandes ouvertes, et tout le monde en uniforme de roi. Les firewalls sont les douves et les portes � ils laissent entrer uniquement les ambassadeurs autoris�s. Les utilisateurs avec r�les sont les gardes : certains peuvent ouvrir toutes les portes, d'autres seulement la cuisine.
La 2FA, c'est le sceau royal en plus du mot de passe � m�me si un espion conna�t ton mot de passe, sans le sceau physique il ne rentre pas. Le certificat SSL, c'est la grande enseigne officielle du ch�teau : les visiteurs savent qu'ils sont au bon endroit et pas dans une copie pi�g�e. ?é
1. �tat par D�faut � Ce qui est Vuln�rable ?é
Apr�s une installation standard de Proxmox, voici ce que tu as par d�faut et pourquoi c'est risqu� :
| �l�ment | Par d�faut | Risque | Action |
|---|---|---|---|
| Compte root | Seul compte admin | ?é �lev� | Cr�er un compte d�di� |
| Firewall | D�sactiv� | ?é �lev� | Activer + r�gles |
| 2FA | D�sactiv�e | ?é �lev� | Activer TOTP |
| Certificat SSL | Auto-sign� | ?é Moyen | Let's Encrypt ACME |
| SSH root login | Activ� (port 22) | ?é �lev� | Cl�s SSH + fail2ban |
| Port Web UI | 8006 ouvert partout | ?é Moyen | Restreindre aux IPs LAN |
R�gle absolue : N'expose JAMAIS l'interface web Proxmox (port 8006) directement sur Internet. Utilise un VPN (WireGuard) ou un tunnel s�curis� pour acc�der � distance.
2. Pare-feu Proxmox (PVE Firewall) ?é
Le firewall Proxmox a 3 niveaux ind�pendants : Datacenter (r�gles globales), Node (r�gles du serveur), et VM/LXC (r�gles par machine). Ils s'appliquent en cascade.
??é Activer le Firewall au niveau Datacenter
Panneau gauche é Datacenter é onglet "Firewall" é sous-onglet "Options" é Firewall : Yes é "Save". C'est le switch ma�tre, doit �tre ON pour que les r�gles s'appliquent.
??é Cr�er un Security Group (groupe de r�gles r�utilisable)
Datacenter é Firewall é Security Group é Create é Nom : admin-access. Dans ce groupe, ajoute une r�gle IN � Accept � TCP � Port 8006 (interface web) et IN � Accept � TCP � Port 22 (SSH). Clique "Add" pour chaque r�gle.
??é Activer le Firewall sur le Node et appliquer le groupe
Node pve é Firewall é Options é Firewall : Yes. Puis dans Firewall é Rules é bouton "Insert Security Group" é s�lectionner admin-access. Le groupe de r�gles s'applique au node.
?é Restreindre l'acc�s � tes IPs LAN uniquement
Dans la r�gle du port 8006, colonne "Source" é entre 192.168.1.0/24 (ton r�seau local). Ainsi l'interface web n'est accessible que depuis ton LAN. Si quelqu'un essaie depuis Internet é bloqu�.
pvesh set /cluster/firewall/options --enable 1
# Activer sur le node
pvesh set /nodes/pve/firewall/options --enable 1
# Ajouter une r�gle : autoriser port 8006 depuis le LAN
pvesh create /nodes/pve/firewall/rules \
--action ACCEPT --type in \
--proto tcp --dport 8006 \
--source 192.168.1.0/24 \
--comment "Web UI depuis LAN uniquement"
# Voir les r�gles actives
pvesh get /nodes/pve/firewall/rules
# V�rifier l'�tat du firewall
pvesh get /nodes/pve/firewall/options
{"enable": 1, "log_level_in": "nolog", ...}
3. Utilisateurs & R�les � Principe du Moindre Privil�ge ?é
Ne jamais travailler avec root au quotidien. Cr�e un compte admin d�di� avec les droits n�cessaires et utilise root uniquement en cas d'urgence.
| R�le Proxmox | Permissions | Usage typique |
|---|---|---|
Administrator |
Tout sur tout | Compte admin principal |
PVEAdmin |
G�rer VMs + LXC | Admin VMs sans droits syst�me |
PVEVMUser |
D�marrer/arr�ter ses VMs | Utilisateur standard, acc�s VMs allou�es |
PVEAuditor |
Lecture seule | Monitoring, supervision |
??é Cr�er un nouveau compte utilisateur
Datacenter é Permissions é Users é Add é Remplis : User ID (ex: admin-owl), Realm = pve (authentification locale), Password + confirmation é "Add".
??é Assigner un r�le (permission)
Datacenter é Permissions é Add é User Permission é Path = / (tout le datacenter) é User = admin-owl@pve é Role = Administrator é "Add".
??é Tester le nouveau compte
D�connecte-toi de root é connecte-toi avec admin-owl + Realm: pve. V�rifie que tu vois toutes les VMs. D�s validation, utilise uniquement ce compte au quotidien.
pveum user add admin-owl@pve --password 'MonMotDePasse!' --comment "Admin principal OWL"
# Assigner le r�le Administrator sur tout le datacenter
pveum acl modify / --users admin-owl@pve --roles Administrator
# Lister tous les utilisateurs
pveum user list
+--------------------------------------------+
� userid � comment � enable �
+------------------+--------------+----------�
� admin-owl@pve � Admin OWL � 1 �
� root@pam � � 1 �
+--------------------------------------------+
# Voir les permissions assign�es
pveum acl list
4. Double Authentification 2FA � TOTP ?é
Le TOTP (Time-based One-Time Password) est le standard de la 2FA : une app g�n�re un code � 6 chiffres qui change toutes les 30 secondes. Compatible avec Google Authenticator, Aegis (open-source recommand�) ou Bitwarden.
??é Naviguer vers les param�tres 2FA
Clique sur ton nom d'utilisateur en haut � droite é "My Account". Ou via : Datacenter é Permissions é Two Factor pour g�rer globalement.
??é Ajouter un facteur TOTP
Dans "Two Factor Authentication" é bouton "Add" é s�lectionner "TOTP". Proxmox affiche un QR Code. Scanne-le avec ton app Aegis/Google Auth é l'app g�n�re des codes � 6 chiffres.
??é Valider le TOTP
Entre le code � 6 chiffres affich� dans ton app dans le champ "Verification Code" é "Add". La 2FA est active. � la prochaine connexion : mot de passe + code TOTP.
?é Sauvegarder le Recovery Key !
Proxmox g�n�re une cl� de r�cup�ration one-time. Sauvegarde-la absolument (gestionnaire de mots de passe Bitwarden/Vaultwarden). Si tu perds ton t�l�phone sans cette cl� é acc�s impossible !
Recommandation OWL : Utilise Aegis (Android, open-source, chiffr�) ou Bitwarden Authenticator avec backup chiffr�. �vite les apps propri�taires sans backup (risque de perte si tu changes de t�l�phone).
5. Certificat SSL Let's Encrypt via ACME ?é
Remplace le certificat auto-sign� par un vrai certificat SSL sign� par Let's Encrypt. Proxmox supporte ACME nativement avec d�fi HTTP ou DNS. Pr�requis : un nom de domaine (ex: proxmox.mondomaine.fr) et un acc�s depuis l'ext�rieur (ou DNS Challenge).
??é Configurer un compte ACME
Datacenter é ACME é bouton "Add" dans la section Accounts é Entrer ton email é s�lectionner le r�pertoire Let's Encrypt V2 é Accepter les CGU é "Register".
??é Configurer le certificat sur le Node
Node pve é onglet "Certificates" é bouton "Add" dans ACME é Domain = proxmox.mondomaine.fr é Challenge Type = DNS (si via Cloudflare) ou HTTP (si le port 80 est accessible) é "Create".
??é �mettre le certificat
Clique "Order Certificates Now". Proxmox contacte Let's Encrypt, r�sout le d�fi, re�oit et installe le certificat automatiquement. Le navigateur affiche ensuite un ?é cadenas vert sans avertissement.
pvenode acme account register default admin@mondomaine.fr
# Ajouter un domaine au node (d�fi DNS via Cloudflare)
pvenode config set --acme domains=proxmox.mondomaine.fr
# Configurer le plugin DNS Cloudflare
pvenode acme plugin add dns cf-dns \
--api cf \
--data "CF_Token=ton_token_cloudflare"
# Commander le certificat
pvenode acme cert order
Task OK: Certificate successfully ordered from Let's Encrypt é
Certificate valid until: 2026-07-11
# Le renouvellement automatique est g�r� par le timer systemd
systemctl status pve-daily-update.service
6. Durcissement SSH � Cl�s & Fail2ban ?é
SSH avec mot de passe + port 22 est la cible num�ro 1 des bots. Deux contre-mesures essentielles : authentification par cl� SSH (d�sactiver les mots de passe) et Fail2ban pour bloquer les tentatives r�p�t�es.
??é Ajouter ta cl� SSH publique dans Proxmox
Node pve é onglet "Shell" é ex�cute les commandes CLI ci-dessous pour cr�er le dossier .ssh et coller ta cl� publique. Ou : colle directement ta cl� dans le champ "SSH Keys" de ton profil utilisateur Proxmox.
?é D�sactiver l'authentification par mot de passe SSH
Dans le Shell Proxmox : �dite /etc/ssh/sshd_config é PasswordAuthentication no, PermitRootLogin prohibit-password é systemctl restart ssh. Teste la connexion par cl� AVANT de fermer ta session !
# Sur ton PC Windows/Linux/Mac :
ssh-keygen -t ed25519 -C "proxmox-homelab"
Your identification: ~/.ssh/id_ed25519
Your public key: ~/.ssh/id_ed25519.pub
### 2. Copier la cl� sur Proxmox ###
ssh-copy-id root@192.168.1.50
# Ou manuellement dans le Shell Proxmox :
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA... ton-email" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
### 3. S�curiser la config SSH ###
nano /etc/ssh/sshd_config
PasswordAuthentication no é interdire les mdp
PermitRootLogin prohibit-password é cl�s OK, mdp NON
Port 22 é optionnel : changer le port
MaxAuthTries 3 é limiter les tentatives
systemctl restart ssh
### 4. Installer Fail2ban ###
apt install -y fail2ban
cat > /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
maxretry = 5
bantime = 3600
findtime = 600
EOF
systemctl enable --now fail2ban
é fail2ban.service - active (running) é
# Voir les IPs actuellement bannies
fail2ban-client status sshd
Currently banned: 3 IPs (183.x.x.x, 45.x.x.x, 91.x.x.x)
7. Isolation des VMs � Firewall par Machine ??é
Tu peux appliquer des r�gles de firewall directement sur chaque VM ou LXC. Une VM compromise ne peut alors pas atteindre les autres ou le node Proxmox lui-m�me.
??é Activer le Firewall sur une VM sp�cifique
S�lectionne la VM é onglet "Firewall" é sous-onglet "Options" é Firewall : Yes. Active aussi "DHCP : Yes" pour laisser passer le DHCP.
??é Ajouter les r�gles d'entr�e (IN)
VM é Firewall é Rules é Add : Direction IN, Action ACCEPT, Proto tcp, Port 80,443 pour un serveur web. Politique par d�faut : DROP � tout ce qui n'est pas autoris� est bloqu�.
??é Activer le Firewall sur la carte r�seau de la VM
VM é Hardware é double-clic sur la carte r�seau é cocher é Firewall. Sans cette case, le firewall de la VM n'est pas appliqu� m�me s'il est activ� !
pvesh set /nodes/pve/qemu/100/firewall/options --enable true
# Ajouter r�gle : autoriser HTTP (80) et HTTPS (443)
pvesh create /nodes/pve/qemu/100/firewall/rules \
--action ACCEPT --type in --proto tcp --dport "80,443" \
--comment "HTTP/HTTPS public"
# Politique par d�faut : DROP tout le reste
pvesh set /nodes/pve/qemu/100/firewall/options --policy_in DROP
# Voir les r�gles de la VM
pvesh get /nodes/pve/qemu/100/firewall/rules
pos 0: IN ACCEPT tcp dport=80,443
é Checklist � Proxmox S�curis�
- éFirewall activ� (Datacenter + Node) avec r�gles restrictives
- éCompte non-root cr�� et utilis� au quotidien (root en urgence only)
- é2FA TOTP activ�e sur ton compte admin + recovery key sauvegard�e
- éCertificat SSL Let's Encrypt (plus de warning navigateur)
- éSSH par cl� uniquement (PasswordAuthentication no) + Fail2ban actif
- éPort 8006 accessible uniquement depuis le LAN (pas expos� sur Internet)
?é Probl�mes Courants & Solutions
é J'ai activ� le firewall et je n'arrive plus � acc�der � l'interface web é
?é Connecte-toi en SSH ou via console physique é v�rifie les r�gles : pvesh get /nodes/pve/firewall/rules. Assure-toi d'avoir une r�gle ACCEPT TCP port 8006. En dernier recours : pvesh set /nodes/pve/firewall/options --enable false pour d�sactiver temporairement.
é J'ai perdu mon t�l�phone avec la 2FA et je ne peux plus me connecter é
?é Si tu as ta cl� de r�cup�ration é utilise-la � la place du code TOTP. Si non, connecte-toi en SSH root é pveum user modify admin-owl@pve --keys "" pour supprimer la 2FA de l'utilisateur. C'est pour �a que le compte root SSH reste essentiel en dernier recours.
é Le d�fi ACME Let's Encrypt �choue é
?é Pour le d�fi HTTP : ton domaine doit pointer vers l'IP de Proxmox et le port 80 doit �tre accessible depuis Internet. Pour le d�fi DNS (recommand� pour homelab) : utilise un plugin DNS (Cloudflare, OVH, etc.) � pas besoin d'exposer ton serveur. V�rifie que le token API DNS a les droits en �criture sur la zone.
é Fail2ban banne mon propre PC (trop de tentatives de connexion) é
?é Ajoute ton IP LAN dans la whitelist fail2ban : nano /etc/fail2ban/jail.local é ajouter ignoreip = 127.0.0.1/8 192.168.1.0/24. Puis systemctl restart fail2ban. Les IPs de ton r�seau local ne seront jamais bannies.