Proxy Intro | Docs | TitaniumGuard

Proxy Intro

Proxy Documentation

TitaniumGuard Proxy is a QUIC relay plus a local desktop agent.

The client exposes loopback HTTP and SOCKS5 proxy ports for operating system or browser proxy settings. It authenticates to the relay with a bearer token over QUIC and trusts the relay certificate configured in its JSON file. The relay applies hostname blacklist policy, checks resolved addresses against safe egress defaults, opens allowed outbound internet TCP connections, and relays responses back to the client.

For a local demo, start bazelisk run //products/proxy/relay:relay first, then bazelisk run //products/proxy/client:client in another terminal under the same user. The relay creates private localhost TLS and bearer-token credentials automatically. Client HTTP and SOCKS5 listeners are loopback-only. Use explicit configuration for a remotely reachable relay.

Relay Image

The relay image is published as:

  • ghcr.io/titaniumguardlabs/source/proxy/relay:latest

Run the relay with a single JSON config:

docker run --rm \
  -p 9443:9443/udp \
  -v "$PWD/proxy-relay.json:/etc/titaniumguard/proxy-relay.json:ro" \
  -v "$PWD/proxy-relay.crt:/etc/titaniumguard/proxy-relay.crt:ro" \
  -v "$PWD/proxy-relay.key:/etc/titaniumguard/proxy-relay.key:ro" \
  ghcr.io/titaniumguardlabs/source/proxy/relay:latest \
  --config /etc/titaniumguard/proxy-relay.json

Local Agent

Run the client on desktop machines:

proxy-client --config /etc/titaniumguard/proxy-client.json

Configure HTTP and HTTPS proxy settings to the client http_listen address. Configure SOCKS5 settings to the client socks_listen address.

HTTPS uses normal CONNECT tunneling. The client does not intercept TLS.

Every proxied stream receives a relay-generated UUID v7 interaction ID. HTTP responses include it as x-tg-proxy-id for troubleshooting and correlation.

Relay hostname blacklist matches return HTTP 403 Forbidden responses for HTTP proxy traffic and connection-not-allowed replies for SOCKS5 traffic.

Operations

Relay and client configs can expose loopback health endpoints:

  • /live
  • /ready
  • /metrics

Readiness turns unavailable during shutdown drain. Relay egress denies private and special-use address ranges by default, and client proxy listeners must bind to loopback addresses.