Repository navigation
Auto Load FR
🔴 BOOT — déploiement et provisionnement
À quoi ça sert. Livrer une SecuBox qui s'installe toute seule, sans écran ni clavier. La box est préparée à l'atelier (un fichier de réponses signé et un jeton à usage unique déposés sur sa partition de démarrage). Quand le client la branche, elle appelle l'infrastructure Auto-Load en HTTPS, ouvre un tunnel sortant, publie un pré-rapport de ce qu'elle va faire, attend un délai de grâce, installe son profil et envoie un rapport final. Une box qui ne porte pas de fichier de réponses n'est jamais touchée.
État. La phase A (une image préparée) est livrée : l'agent est dans toutes les images (il fait partie du profil
lite, donc aussiispetfull). La phase B (démarrage réseau sans préparation) n'est pas livrée. L'essai complet sur matériel reste à faire (#2186) ; le banc de bout en bout sans matériel passe.
| Moitié | Paquet | Tourne sur | Rôle |
|---|---|---|---|
| Infrastructure | secubox-autoload |
l'hôte Auto-Load (jamais sur une box cliente) | émet et révoque les jetons, tient le concentrateur du tunnel, reçoit enrôlements, pré-rapports et progression, sert le panel de suivi |
| Agent | secubox-autoload-agent |
chaque box cliente | vérifie les réponses signées, s'enrôle, monte le tunnel, valide, installe, rapporte |
| Outil d'atelier |
autoload-atelier (dans le paquet de l'agent) |
atelier ou infrastructure, jamais sur la box cliente | prépare et contrôle la partition de démarrage |
atelier autoload-atelier preparer -> /boot/secubox/autoload/{reponses.toml, reponses.toml.sig, jeton}
client branche la box -> secubox-autoload-agent.service démarre au premier boot
1. installe le jeton (0600, root) et l'EFFACE de /boot
2. vérifie la signature du fichier de réponses contre le trousseau « SecuBox Provisioning » (gpgv)
3. génère la clé WireGuard SUR la box, s'enrôle en HTTPS (le jeton fait foi), monte le tunnel sortant
4. établit le plan, publie un pré-rapport (nom de la box, profil, paquets, réseau, comptes)
5. attend le délai de grâce (15 min par défaut) - l'opérateur peut refuser
6. installe le profil, applique réseau et comptes, écrit le rapport final
L'unité ne démarre que si les trois conditions sont réunies : /boot/secubox/autoload/reponses.toml existe, le trousseau /usr/share/secubox/autoload/provisioning.gpg est installé, et aucun rapport final n'existe déjà.
Chaque étape réussie est notée (/var/lib/secubox/autoload-agent/etat.json, 0600). Après un échec ou une coupure, le parcours reprend à la première étape non faite et ne rejoue jamais l'enrôlement (le jeton est à usage unique). Après 8 échecs consécutifs l'agent abandonne et pose un marqueur ; l[[First-Boot-Premier-Pas-FR|assistant de premier pas]] manuel reprend alors la main au démarrage suivant.
Le fichier de réponses (reponses.toml) est le profil de l'assistant plus une section [provision]. Il est lu en mode strict : section ou clé inconnue, sous-table, fichier de plus de 64 Kio sont refusés.
Clé [provision]
|
Sens |
|---|---|
mode |
auto (zero-touch ; exige un profil complet, aucun écran pour demander ce qui manque) ou one-shot (un opérateur confirme) |
jeton |
une référence ref:/etc/secubox/secrets/<nom>, jamais la valeur |
lot |
étiquette du lot |
grace_min |
délai de grâce en minutes (0 à 1440, 15 par défaut) |
infra |
nom d'hôte de l'infrastructure |
Contrôlé avant toute application :
- aucun secret en clair : le mot de passe administrateur est une empreinte argon2, le jeton une référence, un jeton d'invitation du maillage en clair est refusé ;
- signature OpenPGP détachée vérifiée par
gpgvcontre l'unique trousseau livré avec l'image : fichier modifié d'un octet, signé par une autre clé ou non signé = refus, rien n'est installé.
| Commande | Effet |
|---|---|
cle-init --homedir D --export provisioning.gpg |
crée une seule fois la clé « SecuBox Provisioning » (Ed25519, sans échéance) et exporte la partie publique |
preparer --reponses R.toml --boot MNT --homedir D [--jeton-stdin | --jeton-fichier F] |
valide le fichier comme la box le fera, le signe, vérifie la signature contre le trousseau livré avec l'image, et n'écrit rien tant que les trois n'ont pas réussi |
verifier --boot MNT |
contrôle ce qui est déposé, comme la box le fera : réponses valides, signature acceptée, jeton présent |
Procédure :
- Sur l'infrastructure, émettre un jeton :
autoloadctl emettre --client <client> --profil lite --lot <lot>. Il s'affiche une seule fois. - Écrire le fichier de réponses à partir de l'exemple livré avec
secubox-premier-pas(reponses-autoload.toml) ; garderjeton = "ref:/etc/secubox/secrets/autoload-jeton". - Flasher l'image de la release (voir Live-USB-FR pour
dd) et monter sa partition de démarrage. - Préparer : passer le jeton sur l'entrée standard (jamais en argument) :
printf '%s' "$JETON" | autoload-atelier preparer --reponses reponses.toml --boot /mnt/boot --homedir <dossier de la clé> --jeton-stdin. - Contrôler :
autoload-atelier verifier --boot /mnt/boot. - Démonter, livrer. Après le premier démarrage,
autoload-agentctl etatmontre l'avancement etautoload-agentctl rapportle rapport final.
La partie privée de la clé de signature ne quitte jamais l'atelier ; seul le trousseau public est livré (par secubox-autoload-agent). Pour une rotation : publier un paquet dont le trousseau contient les deux clés publiques, re-signer les lots à venir, puis retirer l'ancienne. Clé privée perdue ou compromise : révoquer les jetons non réclamés des lots et publier un trousseau sans elle.
Le pré-rapport dit ce qui va arriver : nom de la box, profil, paquets à installer (simulation apt-get -s install secubox-lite|isp|full), mode réseau, noms des comptes créés, et seulement qu'il y a des secrets, jamais leur valeur ni le nom de leur fichier. Il est écrit en 0600 et identifié par son empreinte SHA-256.
| Mode | Comportement |
|---|---|
auto |
le pré-rapport est publié à l'infrastructure, puis la box attend le délai de grâce ; l'opérateur peut le refuser depuis le panel. Fermé par défaut : pré-rapport non publiable ou refus non consultable = on n'applique pas |
one-shot |
n'applique que si l'opérateur confirme l'empreinte de ce pré-rapport (autoload-agentctl confirmer <empreinte>) ; la confirmation d'un autre plan ne vaut rien ; sans confirmation avant l'échéance, refus |
L'application lance ensuite le moteur de l'assistant (premier-pasctl appliquer : réseau, comptes) puis secubox-profilectl apply <profil> --yes (rollback 4R, audit).
À la fin, l'agent construit un rapport sans aucun secret (client, profil, paquets, domaine, comptes par nom, adresse de tunnel, début, fin, étapes). Il est écrit sur la box (/var/lib/secubox/autoload-agent/rapport.json), affiché à l'écran au prochain affichage de connexion, et envoyé à l'infrastructure, qui le transmet par courrier au client si son contact est renseigné. Une diffusion en panne n'arrête jamais le parcours. L'envoi du courrier dépend de la configuration SMTP de l'infrastructure.
Une étoile : chaque box ouvre un tunnel WireGuard sortant vers le concentrateur.
- Plage
10.64.0.0/16(concentrateur10.64.0.1), port UDP 51830, distincte des plages du maillage et de l'éphémère. - Chaque pair n'a droit qu'à sa propre adresse /32 : les clients ne se voient pas.
- La clé de la box est générée sur la box (
/etc/secubox/secrets/autoload-wg.key, 0600), jamais dans l'image, jamais en ligne de commande. Une clé existante n'est jamais remplacée. - La configuration cliente n'a ni
ListenPortni route par défaut (AllowedIPs= le /32 du concentrateur),PersistentKeepalive = 25: aucun port entrant côté client. - Ce que répond l'infrastructure est validé avant d'écrire un fichier (nom d'hôte épinglé, /32 dans la plage et différent du concentrateur, clés valides, aucun champ inconnu).
- Dans le tunnel, la box ne parle qu'au service du concentrateur (TCP 8470) : progression, pré-rapport, sondage du refus. L'identité de la box est l'adresse source de la connexion ; aucun en-tête n'est cru.
| Commande | Effet |
|---|---|
emettre --client C --profil lite|isp|full [--lot L] [--serie S] [--duree-jours 90] |
émet un jeton (affiché une fois) |
preenregistrer --serie S --client C --profil P |
préenregistre un numéro de série ; sa box reçoit son jeton à la volée, une seule fois |
lister [--etat emis|reclame|revoque] [--client C] [--lot L] [--json] |
liste les jetons (jamais leur valeur) |
revoquer (--id N | --lot L) --motif "..." |
révoque un jeton ou un lot ; pour un jeton réclamé, rend la clé publique à retirer du tunnel |
abonnement --client C --statut actif|suspendu|revoque |
fixe l'abonnement du client |
tunnel-init |
crée la clé du concentrateur (0600) et affiche sa clé publique |
tunnel-sync |
valide, pose la configuration atomiquement, wg syncconf : aucun pair existant n'est coupé |
Route (sous /api/v1/autoload) |
Rôle |
|---|---|
GET /boxes, /jetons, /prerapports, /prerapports/{empreinte}
|
statut (en attente, préparation, en cours, terminé, révoqué) et progression en % ; jamais la valeur d'un jeton |
POST /jetons |
émettre un jeton (valeur montrée une fois) |
POST /jetons/{id}/revoquer |
révoquer, retirer le pair du tunnel, appliquer |
POST /clients/{client}/abonnement |
changer un abonnement |
POST /lots/{lot}/revoquer |
révoquer un lot |
POST /series |
préenregistrer un numéro de série |
POST /prerapports/{empreinte}/refuser |
refuser un pré-rapport pendant le délai de grâce |
Toutes exigent une session d'administrateur. La route publique d'enrôlement POST /enrol est gardée par le jeton lui-même et limitée (10 essais refusés par 10 minutes et par source).
| Mesure | Détail |
|---|---|
| Jeton à usage unique | 128 bits aléatoires, préfixe fixe (un jeton qui fuit se repère), montré une fois, stocké en empreinte SHA-256 ; la réclamation le consomme et lie la box à sa clé publique WireGuard ; une clé ne peut porter deux jetons |
| Durée de vie | 90 jours avant réclamation par défaut, 365 au plus |
| Refus uniforme | inconnu, expiré, déjà pris, révoqué, abonnement non actif, mauvaise clé : toujours « jeton refusé » ; la vraie raison est dans l'audit |
| Révocation | à tout moment, par jeton ou par lot ; le pair est retiré du tunnel |
| Abonnement |
actif, suspendu, revoque : un client non actif ne peut ni réclamer ni recevoir de nouvelles livraisons ; une box déjà en service garde toutes ses fonctions locales
|
| Réponses signées |
gpgv contre un seul trousseau ; fichier modifié = refus |
| Aucun secret en clair | les réponses portent empreintes et références ; le jeton est effacé de /boot au premier démarrage (au mieux sur FAT : c'est l'usage unique qui protège) |
| Services confinés | utilisateur dédié et AppArmor enforce sur le service d'infrastructure ; unité durcie côté agent |
| Audit | chaque émission, réclamation, refus (avec la raison), révocation et changement d'abonnement est ajouté au journal d'audit Auto-Load, jamais avec une valeur de jeton |
| Box clonée | n'hérite d'aucune identité : la clé WireGuard est générée sur la box |
Pare-feu de l'infrastructure : UDP 51830 en entrée seulement, et TCP 8470 depuis l'interface du tunnel seulement. La redirection de port du routeur Internet vers l'hôte reste une étape manuelle.
- Le démarrage réseau (phase B) n'est pas livré : l'U-Boot d'usine de la MOCHAbin n'a pas
wget. Voir Netboot-Install pour la procédure manuelle. - Les images de la release portent l'agent mais aucun fichier de réponses : l'atelier le dépose, par client.
- Le profil
ispet le cycle d'abonnement sont couverts par le banc ; le premier essai sur une vraie carte reste à faire.
- First-Boot-Premier-Pas-FR - l'assistant manuel que l'Auto-Load remplace (et auquel il laisse la main en repli)
-
Profils - ce qu'installent
lite,ispetfull - Installation-FR et Live-USB-FR - flasher une image
- Netboot-Install - installer par le réseau
- Configuration-FR
SecuBox-Deb · Licence : CMSD-1.0 (Source-Disclosed)
Contact : CyberMind · Gérald Kerma · Notre-Dame-du-Cruet, Savoie
Hardware-Matrix · Acknowledgments · Wiki v2.5.0
SecuBox | FR | DE | 中文 | v3.0.0-alpha.12
- Home
- Architecture
- Trixie | FR
- Hardware-Matrix
- Roadmap
- Profils
- Modules-by-Profile 📦 lite / isp / full : ce qu'embarque chaque profil | FR
- Modules-by-Family 🗂️ les modules par famille | FR
- DNS-Filtrage
- Multiboot ⭐
-
Live-USB-VirtualBox
run-vbox.sh -
Live-USB-QEMU
run-qemu.sh - Live-USB | FR | DE | 中文
- Auto-Load 🚚 boxes sans écran | FR
- First-Boot-Premier-Pas 🧭 premier pas | FR
- Installation | FR | DE | 中文
- ARM-Installation | FR | DE | 中文
- Netboot-Install 🔧 MOCHAbin netboot + signed install
- ESPRESSObin | FR | DE | 中文
- Eye-Remote 📡
- Android-ToolBox 📱 one-tap R3
- Browser-Extension 🧩 cartographie
- QEMU-ARM64 🖥️
- Configuration | FR | DE | 中文
- Troubleshooting | FR | DE | 中文
- ToolBox 👁️ cabine numérique · rapport vie privée
- Anti-Track 🛡️ bloque · empoisonne · anonymise
- Billets 📮 micro-blog gateway · média vignette zoomable
- Messagerie 💬 mur public, messages privés, radio/Billets/BBS centralisés
- Identite-SBX-OS 🪪 personnes, appareils, comptes liés, connexion passive
- Metalogue 🕸️ OSINT suite · Maigret + SpiderFoot (Maltego-style)
- WAF 🛡️ pare-feu applicatif autonome (nft direct, hors-HTTP) | FR
- SOC 🎯 vues rassemblées | FR
- Actor-Intelligence 🕵️ acteurs, échelle de réponse | FR
- NAC 🔐 contrôle d'accès réseau | FR
- Webfilter 🧹 filtrage DNS par catégories et par appareil | FR
- Interceptor 🎯 supervision de l'inspection (sbxmitm, sbxwaf, nDPI) | FR
- Network-Modes 🌐 modes réseau, WAN, interfaces | FR
- Caches-and-Mirrors 💾 caches de la box et dépôt APT local | FR
- Portal 🚪 portail de session | FR
- Certificates 📜 certificats | FR
- Metrics 📊 mesures, sites, cartes, rapport PDF | FR
- SBX-OS 🧩 le Hall en application | FR
- Aurora-Design 🎨 design system admin | FR
- Admin-Panels-Gallery 🖼️ galerie des 37 pages | FR
- ThreatMesh 🛰️ blocklist souveraine (feeds + mesh, sans CAPI) | FR
- Modules 🇬🇧
- MODULES-FR 🇫🇷
- MODULES-DE 🇩🇪
- MODULES-ZH 🇨🇳
-
Operations-Runbook 🛠️ incidents | FR
-
API-Reference | FR | DE | 中文
- Multi-Agent-Worktree — un agent · une issue · une branche