Suppression de toute trace Chezlepro de l'outil (roles, scripts, docs publiques, exemples, LICENSE). Prouve par scan exhaustif : git grep vide pour chezlepro, asgard/TrueNAS, supernet reel 10.1.x. Corrige 5 defauts de genericite fonctionnels (motd, app.ini Forgejo, organisation openldap, nom AC step-ca, et IP reelles codees en dur dans les defaults de roles -> plage d'exemple 10.0.x). LICENSE -> Alliance Boreale. Fichiers mainteneur + CHANGELOG conserves (par decision). La separation moteur/instance tient : OPS-Chezlepro surcharge deja ses vraies valeurs de topologie. Verifie : make verifier exit 0 (4 tests). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
12 KiB
Golden template Debian 13 Proxmox
Objet
Ce document justifie les ajouts appliqués par Set-OPS à une installation Debian 13 minimale pour obtenir le golden template Proxmox.
Le template doit rester un socle commun, clonable et sécuritaire. Il ne doit pas devenir un serveur applicatif ni intégrer des dépendances propres à un rôle final.
État de départ
L'état de départ attendu est décrit dans :
docs/procedure-template-debian13-proxmox.md
Résumé :
Debian 13 minimal
aucun environnement graphique
SSH installé
partition EFI
partition racine ext4
pas de LVM
pas de swap
disque agrandissable
CloudInit Drive Proxmox présent
ciuser et clé SSH injectés par Cloud-Init
aucun secret
aucune donnée propre à un clone final
Runbook du playbook prepare
Objectif
Le playbook debian13_proxmox_preparer.yml transforme une VM Debian 13 minimale en socle golden template.
Il installe les composants communs, configure l'accès Ansible, applique le durcissement template-safe et prépare la VM pour cloud-init.
Il ne fait pas le nettoyage final avant conversion en template.
Prérequis côté VM
Avant de lancer le playbook, la VM doit respecter ces conditions :
Debian installé et démarré
réseau fonctionnel
SSH joignable depuis le poste Ansible
CloudInit Drive présent côté Proxmox
utilisateur Ansible initial injecté par Cloud-Init
clé publique SSH injectée par Cloud-Init
sudo ou accès root possible
APT fonctionnel
aucun rôle applicatif déjà installé
VM destinée à devenir un template, pas un serveur de production
Vérifications utiles depuis le poste Ansible :
ssh ansible@10.0.2.99
ansible -i instance/inventories/lab/hosts.yml modeles_vm -m ping
ansible -i instance/inventories/lab/hosts.yml modeles_vm -m setup
Adapter l'utilisateur et l'adresse IP selon instance/inventories/lab/hosts.yml.
Prérequis côté dépôt
Avant l'exécution :
git status --short
make syntax-template
L'inventaire doit contenir la VM dans le groupe :
modeles_vm
Les variables du template sont dans :
instance/inventories/lab/group_vars/modeles_vm.yml
Commande de préparation
Lancement lorsque l'accès par clé et sudo sont fonctionnels :
make preparer-modele
Le flux make suppose que SSH par clé et sudo NOPASSWD sont déjà fonctionnels pour ansible.
Déroulement attendu
Le playbook :
- vérifie que la cible est Debian ;
- avertit si la version majeure n'est pas Debian 13 ;
- installe les paquets communs ;
- active
qemu-guest-agent; - installe et configure
cloud-init; - configure le compte technique Ansible ;
- active la synchronisation du temps ;
- configure SSH ;
- applique le durcissement template-safe ;
- prépare nftables sans l'activer ;
- affiche le statut cloud-init.
Résultat attendu
Une première exécution peut changer la VM.
Une relance sur une VM déjà préparée doit idéalement finir avec :
failed=0
changed=0
Un résultat changed=0 à la relance est le signal que le playbook est idempotent dans l'état actuel.
Erreurs fréquentes
| Symptôme | Cause probable | Action |
|---|---|---|
UNREACHABLE |
IP, SSH, utilisateur ou clé SSH incorrecte. | Vérifier instance/inventories/lab/hosts.yml, cloud-init et tester ssh. |
échec become |
Sudo NOPASSWD absent ou utilisateur non autorisé. | Corriger l'accès sudo initial, puis relancer make preparer-modele. |
| échec APT | DNS, passerelle, miroir Debian ou verrou APT. | Vérifier réseau, DNS et processus APT en cours. |
| erreur handler SSH | Handler manquant ou nom notify incohérent. |
Vérifier les handlers du rôle SSH avant de relancer. |
| avertissement Debian non 13 | La cible n'est pas Debian 13. | Ne pas convertir en template Debian 13 sans justification. |
Point d'arrêt
Après prepare, ne pas convertir immédiatement la VM en template.
Exécuter d'abord :
make verifier-modele
Le playbook de vérification contrôle notamment Debian 13, les paquets requis, l'absence de swap actif, l'absence d'environnement graphique, les services de base, nftables désactivé, sudo NOPASSWD et le durcissement SSH effectif.
Le nettoyage final se lance seulement après validation complète :
make nettoyer-modele CONFIRMER=true
Ne pas lancer le cleanup final sur une VM encore en diagnostic ou sur un serveur final.
Préparation Ansible
Le playbook applique les rôles suivants :
common_packages
qemu_guest_agent
cloud_init
sudo_ansible
chrony
ssh_baseline
systemd_ssh_auto
motd
hardening_packages
sysctl_durcissement
core_dumps
unattended_upgrades
apparmor
auditd
fail2ban_ssh
journald
ssh_durcissement
nftables_socle
Justification des ajouts
| Rôle | Ajout ou changement | Justification | Limite volontaire |
|---|---|---|---|
common_packages |
Installe les outils système et diagnostic de base. | Permet l'administration locale, le dépannage réseau, l'exécution fiable d'Ansible et les opérations de maintenance courantes. | Aucun service applicatif spécialisé n'est installé. |
qemu_guest_agent |
Installe et active qemu-guest-agent. |
Donne à Proxmox une visibilité propre sur l'état de la VM et facilite les opérations d'arrêt, IP reporting et gestion depuis l'hyperviseur. | Ne remplace pas la supervision applicative. |
cloud_init |
Installe cloud-init et cloud-guest-utils, puis active les services cloud-init. |
Donne au clone son identité initiale : hostname, utilisateur, clé SSH, IP, DNS et agrandissement de disque. | Cloud-init ne sert pas à configurer les applications. |
sudo_ansible |
Crée ou maintient le compte technique et son sudo NOPASSWD. | Permet l'administration automatisée par Ansible sans stocker de mot de passe dans le dépôt. | Ce compte doit rester technique et contrôlé. |
chrony |
Installe et active la synchronisation du temps. | Un temps correct est nécessaire pour TLS, journaux, audit, Kerberos/LDAP futur, monitoring et corrélation d'incidents. | La source NTP définitive peut être ajustée plus tard par inventaire. |
ssh_baseline |
Pose la base SSH : root interdit, clé publique obligatoire, mot de passe désactivé. | Force un accès administrateur par clé dès la construction du template. | Cloud-init doit avoir injecté le ciuser et sa clé avant Ansible. |
systemd_ssh_auto |
Désactive le comportement systemd.ssh_auto si demandé. |
Évite une exposition SSH automatique via mécanismes transitoires non désirés dans un template serveur. | Ne remplace pas la politique SSH principale. |
motd |
Déploie un message d'accueil sobre. | Identifie le contexte de l_instance et rappelle que la machine est gérée par Set-OPS. | Ne doit pas contenir d'information sensible. |
hardening_packages |
Installe les paquets de sécurité communs. | Fournit les briques nécessaires au durcissement sans configurer de service applicatif. | Les politiques strictes par rôle restent appliquées sur les clones. |
sysctl_durcissement |
Applique des paramètres noyau de sécurité. | Réduit des comportements réseau et noyau risqués avec des réglages standards pour serveur Linux. | Les réglages spécifiques à une charge de travail peuvent être ajustés par rôle. |
core_dumps |
Désactive les core dumps. | Limite le risque de fuite de secrets ou données sensibles dans des dumps mémoire. | Un serveur de debug peut réactiver un comportement adapté hors template. |
unattended_upgrades |
Configure les mises à jour automatiques de sécurité. | Réduit l'exposition aux vulnérabilités connues sur les clones qui restent proches du socle. | Les redémarrages automatiques restent désactivés par défaut. |
apparmor |
Installe et active AppArmor. | Ajoute une couche de confinement standard Debian avec faible coût opérationnel. | Les profils applicatifs spécifiques seront gérés par les rôles applicatifs. |
auditd |
Installe auditd et des règles de base. | Fournit une trace système utile pour exploitation, investigation et conformité minimale. | Les règles lourdes ou propres à une application ne vont pas dans le template. |
fail2ban_ssh |
Active une protection SSH simple contre les essais répétés. | Réduit le bruit et les attaques opportunistes sur SSH sans dépendre d'une plateforme centrale. | Ne remplace pas un pare-feu ni une politique d'accès réseau. |
journald |
Limite l'usage disque et la rétention des journaux. | Évite qu'une VM issue du template remplisse son disque à cause des logs système. | La centralisation des logs viendra plus tard si nécessaire. |
ssh_durcissement |
Ajoute les paramètres SSH plus stricts : port, délais, tentatives, keepalive, forwarding et tunnels désactivés. | Réduit la surface d'exposition SSH sans dépendre d'un rôle applicatif. | Les exceptions, comme un bastion ou du forwarding contrôlé, doivent être portées par un rôle dédié. |
nftables_socle |
Installe nftables et prépare une configuration, mais garde le service désactivé par défaut. | Prépare le standard pare-feu sans risquer de couper l'accès au template ou aux clones. | L'activation se fait par rôle serveur avec règles adaptées. |
Paquets communs
Les paquets communs sont choisis pour l'exploitation réelle :
administration : sudo, acl, bash-completion, tmux, vim, nano
transport : curl, wget, ca-certificates, gnupg
ansible : python3, python3-apt, python3-pip
diagnostic : htop, iotop, iftop, sysstat, lsof, ncdu, tree, file, less
réseau : dnsutils, iproute2, iputils-ping, net-tools, traceroute, mtr-tiny, tcpdump, netcat-openbsd, socat
maintenance : rsync, unzip, zip, tar, jq, logrotate, unattended-upgrades, apt-listchanges, needrestart
virtualisation : qemu-guest-agent, cloud-init, cloud-guest-utils
temps : chrony
Ces paquets sont acceptés dans le template parce qu'ils sont utiles sur presque tous les serveurs et ne transforment pas la VM en serveur applicatif.
Choix de sécurité importants
SSH
État attendu dès la construction :
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
AuthenticationMethods publickey
Le playbook prepare ne doit être lancé qu'après validation de l'accès SSH par clé au compte technique.
Pare-feu
nftables est installé et préparé, mais désactivé par défaut.
Ce choix est volontaire : un pare-feu générique dans un template peut couper l'accès SSH ou bloquer un futur rôle serveur. L'activation doit être faite sur un clone avec des règles correspondant à son usage.
Nettoyage final
Le nettoyage final est séparé et protégé par confirmation explicite. Il ne doit être lancé qu'au moment où la VM est validée et prête à être convertie en template.
Vérification
make verifier-modele
Validation minimale
Avant de déclarer le template prêt :
make verifier
make preparer-modele
make verifier-modele
La relance du playbook de préparation doit idéalement finir avec :
failed=0
changed=0
Nettoyage
make nettoyer-modele CONFIRMER=true
Ne pas lancer le nettoyage final sur un serveur de production ou sur une VM qui n'est pas destinée à devenir un template.
Hors périmètre du template
Les éléments suivants ne doivent pas être installés dans le golden template :
NGINX
PostgreSQL
MariaDB
Docker
Podman
Redis
GitLab
Nextcloud
monitoring complet
agents applicatifs spécialisés
données propres à un clone
secrets
clés privées
Les intégrations futures sont documentées dans :
docs/integrations-vm.md
Le cycle complet VM vanille, golden template, clone et conformité continue est documenté dans :
docs/vm-lifecycle.md