Skip to content
CyberMind-FR edited this page Oct 11, 2026 · 4 revisions

sbxwaf — le WAF autonome 🛡️

EN | FR | 🟡 WALL | pare-feu applicatif souverain

Motif reconnu, ban posé dans le noyau. Aucun service tiers dans le chemin de décision.

À quoi ça sert

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.

Vue d'ensemble du WAF

Comment il bannit

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).

La vue d'administration

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
Menaces Attaquants

Modes, bans automatiques et échelle de réponse

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 moteur de recherche n'est jamais banni

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.

Anti-robots par vhost

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é.

Leurres, honeypot et filigrane

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.

Hors HTTP : sbx-authwatch

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.

Journal des menaces et droits

É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.

Routes déclaratives

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.

API principale (/api/v1/waf/…)

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

Voir aussi

SOC-FR · Actor-Intelligence-FR · ThreatMesh-FR · Anti-Track · DPI-Vivant · Architecture · WAF

SecuBox | FR | DE | 中文 | v3.0.0-alpha.12


Projet

Soutenir


🔴 BOOT — Démarrer

🟢 ROOT — Configuration

🟣 MIND — Modules

🔵 MESH — Référence

🟠 WALL — Matériel

🤖 Workflow Agents


Liens

Clone this wiki locally