Operations Runbook FR - CyberMind-FR/secubox-deb GitHub Wiki
À quoi ça sert. Un guide de terrain tiré des incidents récents. Chaque entrée se lit symptôme, cause, vérifier, corriger. Les numéros de version disent à partir de quelle version du paquet la cause est corrigée dans la source ; sur une box plus ancienne, mettre d'abord le paquet à jour (voir Operations-APT-Repository-FR).
| # | Symptôme | Section |
|---|---|---|
| 1 | disque plein | Disque plein |
| 2 | minuteur sans prochaine échéance | Minuteurs |
| 3 | routes neuves en 404 / redémarrage de l'agrégateur | Agrégateur |
| 4 | le WAF n'écrit plus ses journaux | Journaux sbxwaf |
| 5 | WAF « hors service » alors qu'il tourne | État du WAF |
| 6 | certificats valides affichés expirés | Certificats |
| 7 | stats réseau toujours « périmées » | Stats réseau |
| 8 | module en boucle, socket périmée | Sockets |
| 9 | nginx ne démarre pas | nginx :80 |
-
Symptôme. Des services n'écrivent plus,
dpkgne peut plus écrire son propre fichier d'état, des paquets restent non configurés, les interfaces répondent en 5xx. Vu sur un poste de construction et sur une imagefulltrop petite (les tailles de construction sont maintenant 8G pourisp, 12G pourfull). - Cause. Sur un poste de développement : worktrees d'agents et sorties de construction accumulés. Sur une box : racine trop petite et données au mauvais endroit (médias et caches vont sur le disque de données).
-
Vérifier.
df -h, puisdu -xh --max-depth=1 /sur le volume plein. Pour les worktrees :scripts/agent-worktree.sh list --verbose. -
Corriger. Retirer les worktrees terminés par
scripts/agent-worktree.sh clean <issue>(il refuse un worktree sale ou une branche dont la PR n'est pas fusionnée, sauf--force). Avant de supprimer un worktree à la main, regarder ce que git ignore (git status --ignored) : un motif.gitignorenon ancré peut cacher de vrais fichiers source. Vider le cache apt avecapt-get clean. Ne jamais libérer de place en supprimant sous/etc/secuboxou/var/lib/secubox.
-
Symptôme. Une tâche ne tourne jamais ;
systemctl list-timers --allaffichen/adans la colonne NEXT pour un minuteur SecuBox. -
Cause. L'unité minuteur n'est pas active (non activée, arrêtée par une mise à jour de paquet, ou en échec), ou un minuteur piloté seulement par
OnUnitActiveSec=dont le service n'a jamais tourné n'a rien à compter. Le postinst d'un paquet doit relancer une unité que la mise à jour a arrêtée. -
Vérifier.
systemctl list-timers --all,systemctl status <nom>.timer, et la cadence effective avecsystemctl cat <nom>.timer(les drop-ins de cadence10-cadence.confviennent desecubox-core; ils remettent d'abordOnUnitActiveSec=à zéro puis posent le nouvel intervalle, avec unRandomizedDelaySec=). -
Corriger.
systemctl daemon-reloadaprès tout changement de drop-in, puissystemctl enable --now <nom>.timer. Un paquet qui laisse son minuteur arrêté après une mise à jour a un défaut de postinst : le signaler avec la version.
-
Symptôme. Une route neuve ou modifiée d'un module répond 404, ou tout un ensemble de routes
/api/v1/<module>/répond 502. -
Cause.
secubox-aggregatorimporte au démarrage le code de chaque module agrégé (environ 110 modules dans un seul processus, aucun ne porte son propre démon). Le nouveau code d'un module n'est pris en compte qu'après le redémarrage de l'agrégateur. Le démarrage à froid est long et les sockets sont indisponibles pendant ce temps. -
Vérifier.
systemctl is-active secubox-aggregator;journalctl -u secubox-aggregatorpour les erreurs d'import. Un module à sa propre socket est indépendant de l'agrégateur. -
Corriger.
systemctl restart secubox-aggregator. Compter une coupure d'environ 40 secondes pour tous les modules agrégés ; la planifier, et ne jamais redémarrer en parallèle de nombreux démonssecubox-*. Le watchdog laisse 480 s de grâce au démarrage avant son auto-réparation : ne pas relancer tant que le chargement n'est pas fini.
-
Symptôme.
/var/log/secubox/waf/waf-threats.logne grossit plus ; les panneaux du WAF se vident alors que le trafic passe. -
Cause. Le dossier de journaux a perdu son propriétaire ou son mode. Il doit être
secubox-waf:secubox-waf, mode0750; le parent partagé/var/log/secuboxreste en0755(le passer en0750casse la traversée pour les autres services). Le dossier de cache/var/cache/secubox/wafa le même propriétaire. -
Vérifier.
ls -ld /var/log/secubox /var/log/secubox/waf /var/cache/secubox/waf;journalctl -u secubox-waf-ng. -
Corriger. Réinstaller ou mettre à jour
secubox-waf-ng(son postinst recrée les dossiers avec le bon propriétaire et le bon mode ; l'unité prépare elle-même le cache depuis la 1.27.3), puissystemctl restart secubox-waf-ng. Pas de drop-in écrit à la main : un drop-in corrompu (backticks dans un heredoc non protégé) a déjà cassé l'unité.
-
Symptôme. La santé globale (portail, bandeau) annonce le WAF hors service alors que
sbxwaftourne. -
Cause. Le contrôle regardait encore l'ancien conteneur mitmproxy. Depuis
secubox-metrics1.19.1 (#2391), l'état suitsecubox-waf-ng(service actif et port 8085 qui répond). -
Vérifier.
systemctl is-active secubox-waf-ngetss -ltnpour le port 8085 en boucle locale. -
Corriger. Mettre
secubox-metricsà 1.19.1 ou plus. Si le service est réellement arrêté,systemctl restart secubox-waf-ng(un redémarrage, pas un signal de rechargement).
-
Symptôme. La page Certificats montre des certificats valides comme
expired(moins 999 jours). -
Cause. Des fichiers de
/data/haproxy/certsétaientrooten0600: l'API tourne ensecuboxet ne pouvait pas les lire, et un fichier illisible comptait comme expiré (#2383).secubox-certs1.2.8 l'affiche maintenantunknown(« illisible »), etsecubox-haproxy1.10.3 écrit les.pemen0640 haproxy:secubox, commecertsctl deploy. -
Vérifier.
ls -l /data/haproxy/certs. -
Corriger. Mettre les deux paquets à jour, puis rendre les fichiers existants lisibles par le groupe (
chown haproxy:secubox,chmod 0640). Un échec de lecture n'est plus mémorisé : le passage suivant les reprend.
- Symptôme. « Réseau en direct » du SOC et l'onglet Réseau du Toolbox affichent « COLLECTEUR ARRÊTÉ ? » alors que le collecteur tourne.
-
Cause. Le seuil de péremption était inférieur à la cadence du collecteur. Le minuteur
secubox-netstats.timerpasse toutes les 120 s plus jusqu'à 30 s de délai aléatoire.secubox-hub1.9.55 (#2388) porte le seuil à 360 s (deux cadences plus une marge), lié au drop-in de cadence par un test. -
Vérifier.
systemctl cat secubox-netstats.timer; comparer l'intervalle au seuil. Si vous ralentissez la cadence, relevez le seuil au-delà de deux cadences. -
Corriger. Mettre
secubox-hubà 1.9.55 ou plus. Si le collecteur est vraiment arrêté :systemctl status secubox-netstats.timer.
-
Symptôme. Un module redémarre en boucle avec
Unable to check or remove stale UNIX socket: PermissionError(1)puisAddress already in use; ses routes répondent 502. Ou beaucoup de modules perdent leur socket d'un coup après un redémarrage. -
Cause.
/run/secuboxest partagé par environ 95 unités et collant (1777,root:root) : un processus ne peut délier que ce qu'il possède, donc une socket laissée par un autre utilisateur bloque le démon. Le défaut inverse,RuntimeDirectory=secuboxdans une unité, efface au redémarrage les sockets de tous les voisins. -
Vérifier.
ls -l /run/secubox. Pour le réglage effectif (jamais pargrep, les commentaires donnent des faux positifs) :systemctl show <unité> -p RuntimeDirectory -p RuntimeDirectoryPreserve --value. -
Corriger. Toute unité qui lie une socket ici porte
ExecStartPre=+/bin/rm -f /run/secubox/<module>.sock(le+l'exécute en root). Jamais dechowndu parent, jamais deRuntimeDirectory=secubox. Règles : section 2 du fichier RULES-CODE.md du dépôt.
-
Symptôme.
nginxéchoue avecbind() to 0.0.0.0:80 failed (98: Address already in use), et tous les vhosts de l'hôte tombent avec lui. Cela peut rester invisible des semaines, car unreloadne rebind pas. -
Cause. Sur une SecuBox, HAProxy détient
0.0.0.0:80(et :443). Tout vhost hôte aveclisten 80empêche nginx de démarrer ; le premier vrai redémarrage échoue alors. -
Vérifier.
nginx -t, puis chercherlisten 80dans les vhosts activés. Plusieurs instances nginx peuvent aussi tourner dans des conteneurs : vérifier le cgroup avant de tuer un processus. -
Corriger. Faire écouter le vhost sur le port de son module (la chaîne HAProxy puis
sbxwafy route déjà) et redémarrer nginx. Le trafic doit passer parsbxwaf: pas de contournement à la main (seulement lewaf_bypass = truedéclaratif par vhost dans/etc/secubox/haproxy.toml). Voir WAF-FR.
Operations-APT-Repository-FR · Operations-Release-Process-FR · Troubleshooting-FR · FAQ-Troubleshooting · WAF-FR · Profils · Operations-Runbook