Go to file
CyberMind afd8f6eb83
Some checks are pending
License Headers / check (push) Waiting to run
feat(sentinel): sbxmitm Sentinel — inline+async exploit/malware/spyware detection engine (#823) (#824)
* docs(sentinel): design — inline IOC gate + async Go analyzer + spyware packs (ref #823)

* docs(sentinel): implementation plan — 12 tasks (ref #823)

* feat(sentinel): IOC model + IOCSet matchers (ref #823)

* feat(sentinel): pack loader + live-overlay merge + hot-reload (ref #823)

Add internal/sentinel/pack.go: Pack (JSON base/overlay content bundle),
LoadBasePack, MergePacks (base + N overlays, override by Type+Value via
IOCSet's per-type maps), and Loader (NewLoader/Set/MaybeReload/YaraRules).

Loader mirrors cmd/sbxmitm/policy.go's LoadPolicy/maybeReload mtime-based
hot-reload pattern, adapted for a directory of a DYNAMIC *.json file set
(glob-based) rather than policy.go's fixed Target list. Fail-safe: a
corrupt overlay pack is skipped+logged, never wipes the base or panics;
MaybeReload is a cheap stat-only no-op when nothing on disk changed;
Set()/YaraRules() read via atomic.Pointer so a reload swap never torn-reads
a concurrent hot-path lookup.

Adds JSON tags to Task 1's IOC struct (type/value/class/severity/source/
action) so packs round-trip through encoding/json.

* fix(sentinel): pack loader — fail-closed on base-wipe + throttle MaybeReload + url_regex override + yara dedup (ref #823)

Review found 1 Critical + 2 Important + 1 Minor in Task 2 (pack loader):

- Critical: a vanished/degraded base pack directory (deleted dir, mount
  blip, mid-dpkg-upgrade window) could silently empty the live detection
  set on the next MaybeReload. loaderState now tracks baseCount; a reload
  that would drop base IOCs from >0 to 0 is refused (prior state kept,
  warning logged) instead of swapped in.
- Important: MaybeReload() is called per-flow by Task 3's inline gate: add
  a 5s default throttle (mirrors cmd/sbxmitm/policy.go's reloadThrottle)
  so a hot-path call is a pure no-op until the window elapses.
- Important: url_regex IOCs previously only appended, so a live overlay
  could never override a base pack's URL rule (base always matched
  first). Add urlIndex (pattern -> slice index) so re-adding the same
  pattern replaces the entry in place, keeping deterministic match order.
- Minor: YaraRules() now dedups identical rule bodies across base+overlay
  packs instead of emitting duplicates.

go test ./internal/sentinel/: 21/21 PASS. go vet/gofmt/go build clean.

* feat(sentinel): inline gate matcher (fail-open, highest-severity) (ref #823)

* feat(sentinel): bbolt verdict store (pure-Go, WAL-free, TTL prune) (ref #823)

* feat(sentinel): action scorer — heuristic/low-confidence forced report-only (ref #823)

* feat(sentinel): bounded fire-and-forget mirror channel (drop-with-count) (ref #823)

* fix(sentinel): mirror Emit always copies body — no aliasing of caller's hot-path buffer (ref #823)

* feat(sbxmitm): inline Sentinel gate — neutralize high-confidence, mirror rest, fail-open (ref #823)

Wire internal/sentinel's inline IOC gate into the shared mitmPipeline response
path (covers both the transparent R3 and CONNECT accept paths without drift):
build a FlowMeta from Host/URL/ClientIP/MacHash after up.Do, call the gate, and
on a HIGH-CONFIDENCE known-infra hit neutralize inline — block/sinkhole serve a
Sentinel block page instead of the upstream response, strip serves the response
with an emptied body. Everything else (miss, heuristic, low-confidence, report)
is mirrored bounded fire-and-forget to the async analyzer and proceeds unchanged.

Fail-open everywhere: SENTINEL_ENABLED unset/false, a pack-load failure, a nil
hook, or a gate panic all degrade to a transparent passthrough — a Sentinel
setup problem can never break browsing. With the engine off, behavior is
byte-identical to today. Env: SENTINEL_ENABLED / SENTINEL_PACK_DIR /
SENTINEL_OVERLAY_DIR / SENTINEL_MIRROR_SOCK.

Hot path (BenchmarkSentinelInspectMiss, -benchmem): 101.0 ns/op, 0 B/op,
0 allocs/op — one throttled gate Match + a non-blocking mirror Emit; no YARA or
heavy analysis inline.

go test ./cmd/sbxmitm/... -race → ok (all pre-existing + 7 new green).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(sentinel): sbx-sentinel async daemon scaffold + store wiring (ref #823)

* feat(sentinel): YARA engine (cgo, build-tagged) + no-cgo stub (ref #823)

Add internal/sentinel/yara.go (cgo && yara) wrapping
github.com/hillu/go-yara/v4 for compiled-rule body scanning, and
yara_stub.go (!yara) as the no-op default: NewYaraEngine always
succeeds, Scan/Analyze always return nil. Both expose identical
signatures (YaraEngine, NewYaraEngine, Scan, Analyze, Close) so
sbx-sentinel/sbxmitm can wire a YaraEngine unconditionally.

yara_test.go (untagged) proves the default build works with YARA
disabled. yara_real_test.go (yara tag) compiles a trivial EICAR rule
and exercises the real libyara-backed engine — split into its own
file since Go build constraints are file-scoped and can't mix a
tagged and untagged test in one file.

go-yara is now an indirect go.mod requirement and vendored, but is
only reachable via the yara build tag: default `go build ./...` and
`CGO_ENABLED=0 go build ./...` both stay clean, no libyara/cgo
required. `-tags yara` needs libyara-dev + a C toolchain (documented
in yara.go's header).

* fix(sentinel): YARA verdict confidence 90 (>= threshold) so a confirmed malware match actually strips, not report-only (ref #823)

* feat(sentinel): behavioral engine — beaconing + zero-click heuristics (report-only) (ref #823)

* fix(sentinel): tighten one-time-link heuristic — exclude file-extension + base64 shapes (cut zero-click FPs) (ref #823)

* feat(sentinel): spyware indicator engine + commercial-spyware base pack (MVT/CitizenLab) (ref #823)

* fix(sentinel): base-pack declared-block IOCs severity>=85 so they actually block + general guard test (ref #823)

Three shipped base-pack IOCs declared action:"block" but severity:80,
below scorer.go's HighConfidenceThreshold=85 — FinalizeAction silently
downgrades any Confidence below that threshold to report-only, so these
entries never actually blocked despite being declared as known-bad:

- packs/base/malware.json: ip 198.51.100.23 (class malware)
- packs/base/malware.json: cert_sha1 ...01234567 (class trojan)
- packs/base/botnet.json: ja3 deadbeef... (class botnet_c2)

Bumped all three to severity 90 so they survive FinalizeAction and
actually block, matching every other declared-block entry in the base
packs.

Added TestBasePackDeclaredBlockIsHighSeverity, a general guard over
every base pack file/entry: any IOC with an auto-neutralize action
(block/strip/sinkhole) must carry Severity >= HighConfidenceThreshold.
This generalizes the narrower TestBasePackKnownInfraIsHighSeverity
(spyware classes only) so a future pack entry in any class can't ship
a "block" that silently never blocks. Confirmed the new test fails red
against the pre-fix JSON (all 3 offenders reported) and passes green
after the severity bump.

* feat(sentinel): proposal/solution reporter — RenderReport(Verdict) (ref #823)

* feat(sentinel): wire real analyzers into sbx-sentinel + read-only status HTTP surface (ref #823)

* feat(sentinel): live threat-feed → overlay pack fetcher (fail-safe, atomic) (ref #823)

* feat(sentinel): live feed overlay + reporter + daemon analyzer wiring + packaging (ref #823)

* fix(sentinel): feeds fetcher — add curl --fail so HTTP 4xx/5xx is treated as a fetch failure (ref #823)

* fix(sbxmitm): drop mis-wired ClientIP from inline Sentinel FlowMeta (source IP must not match destination-C2 IP IOCs) (ref #823)

---------

Co-authored-by: CyberMind-FR <gandalf@Gk2.net>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 15:53:21 +02:00
.claude docs: correct WIP note — 872be8c7 was a parallel-session commit, not a stray 2026-07-04 14:02:34 +02:00
.gitea/workflows
.github secubox-p2p: Kademlia DHT + federation health-checks + hierarchical master-link (#774) (#775) 2026-07-03 06:59:35 +02:00
.superpowers chore: #806 SDD complete — READY TO MERGE (marker) 2026-07-04 18:06:16 +02:00
.vscode
apt
board
cache/repo
clients
cmd/secubox
common feat: Media Buffer Phase 2 — HLS reassembly via read-time URL join (#815) 2026-07-04 18:17:40 +02:00
config
daemon
docs feat(sentinel): sbxmitm Sentinel — inline+async exploit/malware/spyware detection engine (#823) (#824) 2026-07-06 15:53:21 +02:00
doctrine/opad
hardware
image refactor: decommission secubox-authelia (SSO IdP) — remove package, keep gate authelia-free 2026-07-02 08:14:08 +02:00
kernel-build
packages feat(sentinel): sbxmitm Sentinel — inline+async exploit/malware/spyware detection engine (#823) (#824) 2026-07-06 15:53:21 +02:00
profiles
prototypes
redroid
remote-ui
repo
schemas
scripts docs(wiki): drop decommissioned Authelia SSO from Modules catalog (128→127) 2026-07-04 07:00:50 +02:00
templates
tests
tools
vm
wiki docs(wiki): fix reversed [[Page|Text]] links — GitHub Gollum is [[Text|Page]] 2026-07-04 07:14:47 +02:00
.cache-lint-allowlist.toml
.gitignore Rapport kbin fidèle (PDF donut-grids + media types) + WebUI DPI + incident hardening (#787) 2026-07-03 12:27:28 +02:00
build-eye-remote-full.sh
CLAUDE.md
HOWTO-grammar.md
LICENCE-CMSD-1.0.md
LICENSE-CMSD-1.0.en.md
LICENSING.md
PROMPT_SYSTEM.md
pytest.ini secubox-p2p: Kademlia DHT + federation health-checks + hierarchical master-link (#774) (#775) 2026-07-03 06:59:35 +02:00
README.md
REPORT-2026-04-10.md
secubox.conf.example feat(auth): configurable forced admin TOTP enrollment (ref #778) (#781) 2026-07-03 06:51:43 +02:00
setup-dev.sh
TOOLS.md

SecuBox

SecuBox OS - Network Security Appliance

Your Network Security Appliance — Plug, Protect, Peace of Mind

Release Packages Live USB Installer License: CMSD-1.0


📡 VILLAGE3B — Cabine Numérique Gondwana ToolBoX

Poster grand public VILLAGE3B

Diagnostic compromission iPhone gratuit · Anonyme · Open Source

3 niveaux d'opt-in (R0 bypass complet, R1 analyse passive ✓ recommandée, R2 TLS-break + bandeau). Rapport téléchargeable avec 9 widgets metrics : 🌐 connexions · 📡 hôtes · OK 2xx · 🔒 cert-pinning · 📺 apps · 🍪 trackers · 🌍 pays · 🎯 score · 📱 device. Conformité CSPN ANSSI + LCEN. Aucune donnée externe.

🕸️ Cartographie sociale — « You Have Been Tracked » (Phase 11)

Poster YOU HAVE BEEN TRACKED — cartographie sociale kbin

Le même navigateur, reconnu de site en site.

En R3 consenti, la cabine corrèle les cookies tiers et les fingerprints JA4 par device pour révéler, en temps réel, quels acteurs commerciaux reconnaissent votre navigateur à travers les sites visités. Un relais ad-tech reliant 4 éditeurs (360yield + seedtag + smartadserver + smilewanted via la même IP) saute aux yeux dans le graphe force-dirigé.

  • Vue per-client : https://kbin.gk2.secubox.in/social/me (🕸️ « Ma carto »)
  • Graphe d3 plein écran (pan / pinch-zoom), évidence cross-site, effacement RGPD art. 17, rapport PDF bilingue (Phase 11.C).
  • Anonyme : mac_hash à sel rotatif 24h, aucune valeur de cookie brute persistée. Tout calculé localement.
  • Tableau opérateur : admin.gk2.secubox.in/toolbox/#social.
  • Brief poster : docs/marketing/POSTER-you-have-been-tracked.md
  • Plan + design lock : #502

🗡️ kbin — le premier outil du couteau suisse cyber

kbin (kbin.gk2.secubox.in) est le portail public de la ToolBoX SecuBox — la cabine numérique et première lame du couteau suisse cyber modulaire de cybermind.fr. On s'y branche, on surfe normalement, et la lame inspecte et protège le trafic de façon transparente :

🗡️ Lame
Performance transparente — on ne déchiffre que ce qu'on modifie (SNI-splice sélectif)
🔒 Full encrypted — inspection MITM complète, forge de cert par hôte, fingerprint Chrome uTLS
☠️ Injection de poison & smog — le trafic ad-tech ressort empoisonné, pas seulement bloqué
🚫 Bandeau anti-adware — transparence injectée, immune au CSP, SPA-aware
🛡️ Safe browsing — Vortex DNS + blacklist nft + détection anti-bot

Prochaine lame — 🧅 mode Tor quick-switch (#683). Un tap → le surf ressort par le réseau Tor (egress sortant, pseudo-network) : l'inspection reste intacte, seule l'IP de sortie devient anonyme. Fail-closed, opt-in, sans fuite DNS.


License — CyberMind Source-Disclosed (CMSD-1.0)

Source disclosed, rights reserved.

This software is released under the CyberMind Source-Disclosed License v1.0 — a source-available license designed for transparency and security auditability while preserving all commercial rights.

What you CAN do What you CANNOT do
Read and study the source code Use in production (any environment)
Compile for isolated testing/audit Redistribute or create derivatives
Publish security research results Integrate into other products
Quote in academic/journalistic contexts Provide as hosted service (SaaS)

ANSSI CSPN Ready: The license explicitly authorizes audits by accredited security labs (CESTI, CC equivalents) without prior authorization.

See LICENCE-CMSD-1.0.md (French, authoritative) or LICENSE-CMSD-1.0.en.md (English, informative).

Metric Value
Packages 139 .deb packages
Migration 131/139 modules migrated
APIs FastAPI + JWT auth
![Arch](https://img.shields.io/badge/Architecture-amd64_ _arm64-orange)

SecuBox transforms any compatible device into a complete network security appliance with VPN, firewall, intrusion detection, and web dashboard — all preconfigured and ready to use.

Status (2026-06-02) — Versioning is dev alpha. The current line (v2.13.x) is all-in-the-pipe working — partly efficient, partly modules-integration-ready, partly upgradeable, first-point POC. Design philosophy : KISS. SecuBox aims to be a full operating system for a security tool — a Swiss army knife + modular OS appliance. See the wiki Use-Cases page for scenario-by-scenario tweaks.


Latest Releases

Latest stable All releases Downloads

v2.13.x — Main system line (2026-05-29 → ongoing)

The current release line. v2.13.4 unblocked the arm64 APT publish (chain #425 / #427 / #431). v2.13.10 produced the first working rpi400 kiosk image (chain #433 / #436). v2.13.11 mass-masks non-essential services so the kiosk boots on a 4 GB Pi 400 (#442). v2.13.12 enables the X cursor on the kiosk for salon-ready operator visibility (#444).

Target File Notes
VirtualBox / QEMU / KVM (amd64) secubox-vm-x64-bookworm.img.gz service cascade in VBox is a known limit, #422
Live USB / amd64 PC secubox-live-amd64-bookworm.img.gz validated in VBox, boots to kiosk login
MOCHAbin (Marvell Armada 7040) secubox-mochabin-bookworm.img.gz primary appliance target
Raspberry Pi 400 / Pi 4 secubox-rpi-arm64-bookworm.img.gz kiosk-by-default since v2.13.10
Installer ISO (any amd64 host) secubox-installer-amd64-bookworm.iso.gz dual format .iso + .img
APT repository https://apt.secubox.in/ signed arm64 + amd64 since v2.13.4
SHA256SUMS SHA256SUMS verify every download

All artefacts are attached to the latest release page — links above are illustrative ; the shield at the top of this section follows the latest stable tag automatically.

v2.2.1-eye-remote — Round display (2026-05-11)

Side-line image for the Pi Zero W round-display dashboard. Not part of the main v2.x.y line — refreshed independently when the kiosk stack moves.

Target Download
Pi Zero W + HyperPixel 2.1 Round secubox-eye-remote-2.2.1.img.xz

Verifying downloads

Every release attaches a SHA256SUMS file alongside the artifacts. Verify before flashing:

sha256sum -c SHA256SUMS 2>&1 | grep -v 'OK$' || echo "all hashes match"

For the amd64 VirtualBox target there's a turn-key tester bundle under output/ci-vm-x64-25983593168/ — drop-in verify.sh + raw_to_vdi.py (no qemu-img/VBoxManage needed) + step-by-step README.md. Boot in 4 commands; see output/ci-vm-x64-25983593168/FIX-PXE.md if the VBox EFI ever lands on the PXE screen.

→ See all releases on GitHub


What You Get

  • VPN Server — WireGuard with QR codes for mobile devices
  • Intrusion Detection — CrowdSec IDS/IPS with automatic threat blocking
  • WAF Active Enforcement — mitm pattern detection → CrowdSec → nft kernel drop (~12s round-trip). Plus pre-mitm rate-limit (slowloris kill) and nginx honeypot routes. See wiki.
  • R3 Portable Tunnel — WireGuard + transparent mitm so the cabine's privacy analysis follows you anywhere (4G, public WiFi). Multi-OS install guide here.
  • Network Monitoring — Real-time traffic analysis and bandwidth control
  • Web Dashboard — Modern dark-themed interface accessible from any browser
  • Automatic Updates — Security patches applied automatically

Quick Start

Option 1: VirtualBox (Try It Now)

Download and run in VirtualBox — no hardware required:

# Download the image
wget https://github.com/CyberMind-FR/secubox-deb/releases/latest/download/secubox-live-amd64-bookworm.img.gz

# Extract
gunzip secubox-live-amd64-bookworm.img.gz

# Create VM (requires VBoxManage)
./scripts/create-secubox-vm.sh secubox-live-amd64-bookworm.img

Access: Open https://localhost:9443 in your browser Login: admin / secubox

Option 2: Live USB (Any PC)

Boot from USB on any x86_64 computer:

# Download
wget https://github.com/CyberMind-FR/secubox-deb/releases/latest/download/secubox-live-amd64-bookworm.img.gz

# Flash to USB (replace /dev/sdX with your USB device)
zcat secubox-live-amd64-bookworm.img.gz | sudo dd of=/dev/sdX bs=4M status=progress

Boot from USB, then access the dashboard at https://<device-ip>/

Option 3: Dedicated Hardware

For 24/7 operation, flash to dedicated hardware:

Device Best For Image
Raspberry Pi 4/5 Home use secubox-rpi-arm64-*.img.gz
ESPRESSObin Small office secubox-espressobin-v7-*.img.gz
MOCHAbin Enterprise secubox-mochabin-*.img.gz
Any x86_64 PC Repurposed hardware secubox-live-amd64-*.img.gz

Features

Security Dashboard

Central control panel showing system health, active threats, and quick actions.

VPN (WireGuard)

Create VPN connections with one click. Scan QR codes on mobile devices.

Intrusion Detection (CrowdSec)

Automatic threat detection and IP blocking with community threat intelligence.

Network Control

  • Bandwidth management (QoS)
  • Device access control
  • Deep packet inspection
  • Virtual hosts with SSL

System Management

  • Service control
  • Log viewer
  • Automatic backups
  • Easy updates

CTL Grammar — modular tools box

Copyright spiritual concept · Gérald Kerma · 1991

Each SecuBox module exposes its capability through three surfaces — a web UI, a FastAPI API, and a CTL command (/usr/sbin/<module>ctl). The CTL is the grammar of the system: each verb is a sentence addressed to a specific layer of the operator's expressive control over their own infrastructure.

Layer Verb
ROUTING haproxyctl vhost add/remove
INTERCEPTION mitmproxyctl route add/remove/list
REPLICATION giteactl repo mirror add/remove
IDENTITY giteactl user add/remove
CI EXECUTION giteactl runner add/remove/list
PUBLISHING publishctl post / dropletctl publish / metablogizerctl site
EMANCIPATE metablogizerctl tor expose/revoke
HOSTING streamlitctl app deploy/.../info
DEV WORKBENCH streamforgectl project create/.../templates
OPS MONITORING healthctl check/list/status/alert

Composing the verbs expresses end-to-end workflows in three lines of shell. See docs/grammar.md for the conceptual frame and the layered architecture map.

To add a 9th verb, follow HOWTO-grammar.md — the six-step recipe takes about an hour for a Bash CTL.


Eye Remote — External Dashboard

SecuBox Eye Remote

A standalone round display that connects to SecuBox via USB OTG, showing real-time metrics with a cyberpunk 3D visualization.

Feature Description
Hardware Raspberry Pi Zero W + HyperPixel 2.1 Round (480×480)
Connection USB OTG composite gadget (network + serial)
Display 3D rotating cube + rainbow ring metrics
Metrics CPU, Memory, Disk, Temperature, WiFi RSSI

Quick Start

# Download Eye Remote image
wget https://github.com/CyberMind-FR/secubox-deb/releases/download/v2.2.1-eye-remote/secubox-eye-remote-2.2.1.img.xz

# Flash to SD card
xzcat secubox-eye-remote-2.2.1.img.xz | sudo dd of=/dev/sdX bs=4M status=progress
  1. Insert SD in Pi Zero W with HyperPixel display
  2. Connect USB DATA port (middle) to SecuBox
  3. Dashboard appears automatically (~60s boot)

SSH: pi@10.55.0.2 (password: raspberry)

📖 Full documentation: remote-ui/round/README.md


Default Credentials

Service Username Password
Web Dashboard admin secubox
SSH root secubox

Change these immediately after first login!


Support


License

CMSD-1.0 (CyberMind Source-Disclosed License) © 2026 CyberMind · Gérald Kerma See LICENCE-CMSD-1.0.md for terms.


Technical Reference (Click to Expand)

Architecture

OpenWrt / LuCI                   →    Debian bookworm
─────────────────────────────────────────────────────────
RPCD shell backend               →    FastAPI + Uvicorn (Unix socket)
UCI config /etc/config/          →    TOML /etc/secubox/secubox.conf
luci-app-*/htdocs/ (JS/CSS/HTML) →    Conservé + XHR réécrits
OpenWrt packages (.ipk)          →    Paquets Debian (.deb)
opkg                             →    apt + repo apt.secubox.in

Supported Hardware

Board SoC RAM Network Profile
MOCHAbin Armada 7040 Quad 1.8GHz 4 GB 2× SFP+ 10GbE + 4× GbE Pro
ESPRESSObin v7 Armada 3720 Dual 1.2GHz 12 GB WAN + 2× LAN DSA Lite
ESPRESSObin Ultra Armada 3720 Dual 1.2GHz 2 GB WAN PoE + 4× LAN + Wi-Fi Lite+
Raspberry Pi 4/400 BCM2711 Quad 1.5-1.8GHz 2-8 GB GbE + USB Lite
Raspberry Pi 5 BCM2712 Quad 2.4GHz 4-8 GB GbE + USB Full
VM x86_64 Any 2+ GB Virtio/NAT Full

Packages (126 modules)

Core: secubox-core, secubox-hub, secubox-portal, secubox-system

Security: secubox-crowdsec, secubox-wireguard, secubox-auth, secubox-nac, secubox-waf, secubox-users

Network: secubox-netmodes, secubox-dpi, secubox-qos, secubox-vhost, secubox-haproxy

Monitoring: secubox-netdata, secubox-mediaflow, secubox-cdn

DNS/Email: secubox-dns, secubox-mail, secubox-webmail

Publishing: secubox-droplet, secubox-streamlit, secubox-metablogizer, secubox-publish

API Reference

All modules expose REST APIs at /api/v1/<module>/

# Login
curl -X POST https://localhost/api/v1/portal/login \
  -H 'Content-Type: application/json' \
  -d '{"username":"admin","password":"secubox"}'

# Use token
curl https://localhost/api/v1/hub/status \
  -H 'Authorization: Bearer <token>'

Key Endpoints:

  • GET /api/v1/hub/dashboard — Dashboard data
  • GET /api/v1/crowdsec/decisions — Active bans
  • POST /api/v1/crowdsec/ban — Ban IP
  • GET /api/v1/wireguard/peers — VPN peers
  • GET /api/v1/wireguard/qrcode/{peer} — Peer QR code

Configuration

Main config: /etc/secubox/secubox.conf (TOML)

[general]
hostname = "secubox"
timezone = "Europe/Paris"

[auth]
jwt_secret = "your-secret-key"
session_timeout = 86400

[network]
wan_interface = "eth0"
lan_interface = "eth1"

Development

# Setup
bash setup-dev.sh && source .venv/bin/activate

# Run module API
cd packages/secubox-crowdsec
uvicorn api.main:app --reload --port 8001

# Build package
dpkg-buildpackage -us -uc -b

# Build image
sudo bash image/build-image.sh --board vm-x64 --vdi

UI Design Guidelines

Color Palette (Cyberpunk/Hermetic):

Variable Color Usage
--cosmos-black #0a0a0f Background
--gold-hermetic #c9a84c Accents, titles
--cinnabar #e63946 Alerts, errors
--matrix-green #00ff41 Success
--void-purple #6e40c9 Links
--cyber-cyan #00d4ff Info, hover
--text-primary #e8e6d9 Main text

Typography: Cinzel (titles), IM Fell English (body), JetBrains Mono (code)

Documentation