Repository navigation
WAF FR
EN | FR | 🟡 WALL | pare-feu applicatif souverain
Motif reconnu, ban posé dans le noyau. Aucun service tiers dans le chemin de décision.
sbxwaf est le pare-feu applicatif en Go de SecuBox (paquet secubox-waf-ng, unité
secubox-waf-ng, écoute 127.0.0.1:8085). Tout le trafic public passe par
HAProxy (TLS 1.3) → sbxwaf → nginx. Il inspecte les requêtes, bloque et bannit,
leurre les scanneurs et alimente la couche de renseignement (Actor-Intelligence-FR).
Ses vues d'administration sont aussi rassemblées dans le SOC-FR.

requête → sbxwaf → motif → ensemble nft (waf_ban / waf_ban6)
↑
chaîne waf_drop, hook input, priorité -100
ip saddr @waf_ban counter drop
La chaîne est ce qui compte : un ensemble nft rempli que nulle règle ne référence ne
bloque rien. sbxwaf crée donc la chaîne et les deux règles au démarrage, précédées
d'un flush chain (add rule n'est pas idempotent). Chaque élément de l'ensemble
porte un compteur de paquets, lu par la réévaluation de fin de ban (voir plus bas).
Ouvrir /waf/ (par exemple https://waf.<box>/, LAN uniquement). L'onglet par défaut
est la Vue d'ensemble ; six autres onglets sont des pages autonomes au style commun
Aurora (tuiles, graphiques SVG en ligne, listes, aucune bibliothèque externe). Elles
sont en lecture seule : bannir et lever un ban restent dans l'API (et sont écrits
dans le journal d'audit).
| Onglet | Ce qu'il montre |
|---|---|
| Vue d'ensemble | Tuiles, carte du monde, évolution par jour, catégories, trafic par type, sites les plus visés, derniers événements, acteurs persistants, empreintes de campagnes, ce qui protège (état mesuré de chaque détection) |
| Menaces | Alertes agrégées et bans, par gravité et catégorie |
| Attaquants suivis | Attaquants suivis dans le temps |
| Visites | Trafic des visiteurs qui ne sont pas des attaquants |
| Surfaces | Ce qui est sondé : surfaces, comptes visés, leurres touchés, pays d'origine, noms non servis |
| Historique | Tendances par jour et attaquants persistants, d'après les journaux tournés |
| Campagnes | Campagnes corrélées depuis le journal des menaces |
Chaque page accepte ?embed=1 (encadrée, une colonne) et ?demo=1 (données de
démonstration annoncées). Une mesure absente s'affiche « — », jamais 0.
| Menaces | Attaquants |
|---|---|
![]() |
![]() |
Vocabulaire commun (GET /api/v1/waf/enforcement/mode) :
| Mode | Drapeau sbxwaf | Effet |
|---|---|---|
PASSIVE_ONLY (observer) |
off |
observation seule, aucun état de ban publié |
SIMULATION |
propose |
les candidats sont écrits (décision WOULD_BLOCK), rien n'est appliqué |
ACTIVE (atténuer / bloquer) |
auto |
les bans sont posés (décision BLOCKED) |
Bans automatiques, chacun avec un coupe-circuit horaire et des durées graduées :
| Drapeau | Bannit |
|---|---|
--actor-ban |
les acteurs suivis |
--campagne-ban |
les campagnes à sondes de haute valeur (4 h / 24 h / 7 j) |
--leurre-ban |
le premier contact avec un leurre (1 h / 24 h / 7 j) |
--mesures |
l'échelle de réponse publiée par sbx-actord : délai, défi par preuve de travail, tarpit, ban |
--reevaluation |
kill switch logique : peu avant l'échéance d'un ban, RELEASE ou EXTEND ; jamais permanent (plafond de 30 jours) |
Jamais bannis : adresses privées ou locales, plages de --actor-ban-protegees, moteurs
de recherche vérifiés. Détail de l'échelle et procédure d'activation
(PASSIVE_ONLY → SIMULATION → ACTIVE) : Actor-Intelligence-FR. Un changement
s'applique par systemctl restart secubox-waf-ng (jamais SIGHUP).
Un robot est reconnu par la preuve que les moteurs documentent eux-mêmes : DNS inverse
confirmé par le DNS direct, dans une liste fermée de domaines (googlebot.com,
google.com, search.msn.com, applebot.apple.com, crawl.baidu.com, yandex.*),
sous-domaine strict. Résultat mémorisé 24 h (1 h si négatif). Un usurpateur (inverse
écrit par lui, direct non) reste banni ; le doute DNS ne vaut jamais exemption. Les bans
déjà posés sur des robots vérifiés sont levés au démarrage. La vérification exige que le
profil AppArmor autorise le DNS ; le paquet le recharge à la mise à jour.
Les vhosts listés dans anti_robots (/etc/secubox/waf/vhost_profiles.json, case à
cocher Anti-robots du panneau Vhost) refusent les robots d'indexation et de
moissonnage par un HTTP 403 (pas 429 : « reviens plus tard » inviterait à
réessayer). C'est une décision de charge, pas une détection de menace : aucun ban,
journal à part avec action=robot. Liste vide : personne n'est filtré. Trois chemins
restent toujours servis : /robots.txt, /favicon.ico, /.well-known/. Le LAN est
exempté.
Avec --honeypot (inactif par défaut ; drop-in d'exemple livré dans
/usr/share/secubox/waf/honeypot.conf), les noms d'hôte non routés et les chemins-appâts
des vrais vhosts (/.env, /.git/…) reçoivent la réponse d'un leurre. Un leurre n'a
aucun autre but que détecter : tout contact est banni, sauf le LAN et les plages
protégées.
Tout ce que le leurre distribue porte un filigrane : de l'aléa suivi d'une
étiquette HMAC-SHA256. On reconnaît nos marques n'importe où sans table, personne ne peut
en fabriquer, et une fausse clé rejouée vers un vrai service vaut un ban d'au moins 24 h.
Le secret vit dans /etc/secubox/secrets/filigrane.
sbx-authwatch lit SSH, SMTP et IMAP (journal et fichiers) et écrit dans le même
ensemble de ban et le même journal de menaces : détection de campagne (clé : le compte
visé), de compte inexistant, 10 ports leurres qui notent et se taisent. Filtres par
service dans /etc/secubox/authwatch/services.json ; un service sans motif vérifié
reste "actif": false, avec la raison écrite.
| Élément | Valeur |
|---|---|
| Journal des menaces | /var/log/secubox/waf/waf-threats.log |
| Propriétaire du dossier et du fichier |
secubox-waf, dossier 0750, règle tmpfiles réappliquée à chaque démarrage |
| État |
/var/lib/secubox/waf/ (bans.jsonl, reevaluations.jsonl, …) |
| Audit des décisions |
/var/log/secubox/waf/audit.log (l'audit.log central est fermé à secubox-waf) |
Le service tourne sous l'utilisateur dédié secubox-waf (AppArmor enforce). Le paquet
réapplique la propriété à chaque démarrage : un dossier créé par un autre composant ne
doit pas fermer au WAF son propre journal.
Un vhost inconnu de sbxwaf reçoit un 421. La table des routes est
/etc/secubox/waf/haproxy-routes.json, rechargée à chaud. Un paquet déclare sa route
dans son postinst — jamais à la main :
secubox-waf-route app.exemple.test 9080
Le seul contournement sanctionné est déclaratif : waf_bypass = true par vhost dans
/etc/secubox/haproxy.toml, honoré par haproxyctl.
| Route | Usage |
|---|---|
GET stats, alerts, history, campaigns, visits, detections
|
données des vues d'administration (lecture) |
GET bans, bans/history, enforcement, enforcement/mode, decisions, reevaluations
|
bans et décisions (lecture) |
POST ban, POST unban/{ip}, POST enforcement/{id}/rollback
|
actions (administrateur) |
GET doctor, POST repair, POST reload
|
santé et réparation |
SOC-FR · Actor-Intelligence-FR · ThreatMesh-FR · Anti-Track · DPI-Vivant · Architecture · WAF
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

