Commit Graph

6 Commits

Author SHA1 Message Date
531fd878a6 fix(sync): drop 10.100.0.10 from DEAD_CONTAINER_IPS — mail LXC lives there
The mail Phase 1 LXC went live at 10.100.0.10 (see #136, PR #141,
35ba4c2c). The 'dead container fix' was still rewriting routes that
target 10.100.0.10 to 10.100.0.1:9080, which would have clobbered
mail.gk2 / webmail.gk2 / rspamd.gk2 / autoconfig.gk2 routes. The
production gk2 board already had this correction in its local copy
(diffed 2026-05-17); bringing the repo back in sync so deploying
the script doesn't regress.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 10:42:07 +02:00
4a73cc245c fix(sync): mitmproxy-routes regex anchored at \s|$ instead of space-only
The previous regex `host_\K[a-z0-9_]+(?= )` required a trailing SPACE
after the hostname. HAProxy `use_backend mitmproxy_inspector if
host_<dotted_domain>` lines end at the hostname with no trailing space,
so the regex matched ZERO domains. Sync silently never auto-populated
mitmproxy routes for any haproxyctl-added vhost.

Caught 2026-05-17 when ckwa.gk2.secubox.in returned 502: the vhost was
added via `haproxyctl vhost add ckwa.gk2.secubox.in mitmproxy_inspector
ssl` (HAProxy ACL created correctly), but sync didn't write the
mitmproxy route entry, so the request landed at mitmproxy's default
(127.0.0.1:9080 placeholder) which doesn't exist inside the mitmproxy
LXC.

Fix: change lookahead to `(?=\s|$)` to also match end-of-line. Verified:

  $ printf '    use_backend ... if host_x_y_z\n' | \
    grep -oP 'host_\K[a-z0-9_]+(?=\s|$)' | sed 's/_/./g'
  x.y.z

Live patch applied on gk2 (mitmproxy LXC) to restore ckwa to 200.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 10:39:44 +02:00
e31c1fa99b fix(sync-routes): preserve streamlit & custom routes from clobbering
After Session 156 fix, secubox-haproxy.service was safely restarted but
cpf.gk2.secubox.in (and other streamlit instances) immediately fell back
to "Wrong Domain" because sync-mitmproxy-routes.sh was clobbering their
container routes.

Two compounding bugs:
1. DEAD_CONTAINER_IPS included 10.100.0.50 — but that's the streamlit
   LXC's actual IP (RUNNING). fix_dead_container_routes() rewrote every
   route pointing to 10.100.0.50 (cpf:8523, etc.) to 10.100.0.1:9080.
2. The update conditional reapplied routes when the existing port didn't
   match the computed port. The computed port logic only knows metablog
   vs webui — it has no streamlit awareness, so it always tried to force
   streamlit domains to port 9080 (webui default).

Fixes:
- Drop 10.100.0.50 from DEAD_CONTAINER_IPS. The streamlit LXC at that
  address is alive; routes pointing to it are valid.
- Change "update if existing missing OR port mismatch" to "update only
  if existing is missing." The script now only ADDS routes for ACL/
  metablog domains; it never overwrites existing routes set by other
  sources (sync-all-routes.sh, manual edits, etc.). fix_dead_container_
  routes() still handles truly dead IPs separately.

Verified: cpf.gk2.secubox.in → HTTP 200 "Streamlit" persists across
sync-mitmproxy-routes.service runs. arm/admin still 200 with correct
content.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 11:02:42 +02:00
d5df48c5d8 fix(infra): mitmproxy route sync stability — restore metablogizer sites
Root cause: log() in sync-mitmproxy-routes.sh wrote to stdout, polluting
$(fix_dead_container_routes ...) capture → corrupted JSON → jq parse
errors → set -e abort → bad routes pushed to mitmproxy container →
mitmproxy restart-loop → HAProxy backend DOWN → HTTP 503 on every
*.gk2.secubox.in metablog vhost (arm, zkp, 3d, ~160 sites).

Fixes:
- log() now writes to stderr (>&2) — preserves stdout for command-sub
- fix_dead_container_routes returns 0 (was returning $fixed count, set -e
  killed the caller's assignment)
- sync-all-routes.sh routes metablog domains to port 8900 (was 9080,
  which is webui.conf default_server → "Wrong Domain")
- defensive 2>/dev/null || true on jq reads
- fallback to old routes_json on jq write failure (preserves last valid
  state instead of crashing)
- flock guard prevents concurrent runs on /run/sync-mitmproxy-routes.lock

Verified: systemctl start sync-mitmproxy-routes.service exits 0/SUCCESS,
244 routes valid in mitmproxy container, all four spot-checked domains
(admin.gk2, arm.gk2, zkp.gk2, 3d.gk2) return HTTP 200 with correct titles.

Note: also disabled duplicate timer secubox-route-sync.timer on the
board (executed the same script, racing on same file). systemd-level
change is on board only, not in repo.

See .claude/HISTORY.md Session 153 for full symptom chain and verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 09:54:52 +02:00
128ee01209 fix(waf): Optimize mitmproxy WAF and fix dead container routes
WAF Optimizations:
- Skip WAF checks for static assets (.js, .css, .png, etc.)
- Skip WAF checks for /health, /status, /system_health
- Skip WAF checks for trusted hosts (git, admin)
- Fixed MultiDictView.to_dict() → dict() AttributeError
- CPU: 90%+ constant → 0% idle, 25-90% under load

Route Sync:
- Auto-fix routes pointing to dead containers (10.100.0.10-50)
- Dead routes redirect to webui (9080) instead of timeout
- Fixed bash arithmetic for set -e compatibility

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-09 13:27:18 +02:00
a455b1735e feat: Add route sync, enhanced export, and session management
- scripts/sync-mitmproxy-routes.sh: Auto-sync HAProxy vhosts to mitmproxy
  - Runs via systemd timer every 5 minutes
  - Fixed bash arithmetic for set -e compatibility

- secubox-metablogizer: Enhanced export ZIP package
  - Includes nginx.conf, haproxy.cfg, certificates
  - Complete README with republishing instructions
  - Site health check endpoint

- secubox-users: Added REVOKE ALL sessions panic button
  - Emergency endpoint to revoke all active sessions
  - Double confirmation UI for safety

- secubox-publish: Added health status columns
  - HTTP/HTTPS/WAF status with emoji indicators
  - Aggregated health LEDs bar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-09 13:11:34 +02:00