openmoat-proxy 0.13.0

Default-deny egress proxy for OpenMoat: CONNECT with an SNI check, plain HTTP, its own DNS, an audit record per connection, and opt-in TLS termination for brokered secrets.
Documentation

openmoat-proxy

The default-deny egress proxy behind openmoat proxy and openmoat run (ADR-020).

It serves HTTP CONNECT tunnels and absolute-form plain-HTTP requests on a loopback port:

  • Every request belongs to an agent session: it carries a per-session proxy credential, one the proxy holds (openmoat run, ADR-027) or one a Verify accepts (the standalone openmoat proxy, ADR-044), and a request without a valid one is refused (proxy-session) before its host is decided. The session selects the taint and the share of the connections that apply.
  • Hosts are decided by openmoat-core the way openmoat guard decides a fetch tool's URL: only an allow passes.
  • Cloud metadata and link-local addresses are refused whatever the policy says, by name and on every address the proxy resolves. Private and CGNAT addresses are refused unless an allow rule names the address.
  • A tunnel's TLS ClientHello must name the CONNECT host (SNI). Nothing is decrypted, except a tunnel to the host of a secret that says tls: terminate, in openmoat run (ADR-043, tls.rs, exchange.rs): one request read, checked against the leak check and the secret's allow rules, the value added, the upstream verified with the CONNECT host as the name, the answer searched for every value before the client gets it.
  • A request that carries a brokered secret's placeholder or value to a host other than the secret's own is refused (Broker).
  • Every decision is recorded through a Recorder; a connection that cannot be recorded is refused.

Plain std::net and one thread per connection, capped by Limits; no async runtime and no storage. Part of OpenMoat.