• feat(gateway): connection tracking + client blocking (RAM-only stats, replicated deny list)
    Release / version (push) Canceled after 0s
    Release / frontend (push) Canceled after 0s
    Release / linux (amd64) (push) Canceled after 0s
    Release / linux (arm64) (push) Canceled after 0s
    Release / windows (push) Canceled after 0s
    Release / macos (push) Canceled after 0s
    Release / release (push) Canceled after 0s
    Build and Push Docker Image / build-and-push (push) Canceled after 0s

    LastSkywalker released this 2026-08-30 22:29:16 +03:00 | 86 commits to main since this release

    Connections card on the Gateway tab: the managed Traefik now writes a JSON
    access log (/traefik/logs/access.log) that the gateway node tails into
    bounded in-RAM stats — request ring (600), per-IP counters (cap 4096, evicted),
    minute/hour rate buckets, suspicion score (scanner paths / error ratio /
    no-route probes / host spraying). Nothing lands in the DB; the log truncates
    itself at 16MB. GET /gateway/connections serves it, other nodes proxy to the
    gateway node's dashboard URL (loop-guarded), external mode can opt in via
    NODE_STATS_GATEWAY_ACCESSLOG.

    Blocked clients: Raft-replicated gateway_blocks (CmdGatewayBlockUpsert/Delete,
    TTL, expired swept by the gateway node) render as a top-priority ClientIP()
    router → 403 on both entrypoints (+ TCP blackhole for passthrough SNI), so a
    block applies in ~1s with node-stats off the request path. Guard rails: ranges
    wider than /8 rejected, blocking your own IP needs force. UI: live feed, top
    clients with one-click block (optional /24), block list with TTL/unblock.

    Co-Authored-By: Claude Fable 5 noreply@anthropic.com

    Downloads