domain-sithbit settings
Part of the configuration reference. Covers the
domain verification service’s own settings; [mail_hosts], the public
IMAP/POP/SMTP coordinates it advertises to autoconfiguring mail clients;
and [mta_sts], the MTA-STS policy it publishes for the domains it fronts.
domain-sithbit
Row markers follow the going-public legend.
| Key | Default | Meaning |
|---|---|---|
bind_addr | "127.0.0.1:8181" | REQUIRED (public). HTTP listen address. The loopback default reaches nobody off the host; a reachable deployment binds an address the TLS-terminating proxy can front. Nothing validates the address at startup — a public bind starts exactly as quietly as the default |
wwwroot | "wwwroot" | Static files (the verification front-end) |
delegate_key_file | (unset) | REQUIRED (public). Solana keypair of the postoffice’s standing delegate — the key that signs on-chain domain authorizations. A key source: a file path (default) or a cloud secret-manager secret. Re-loaded from the configured source on every POST /domain (for a cloud kind, a fresh fetch per request), so a delegate rotation is picked up by swapping the file or cloud secret, no restart. Boot-validated: an unreadable or malformed key fails startup, not the first request. Unset, POST /domain replies 503 (DNS lookups still work). A hot key by design — rotate it on a schedule |
json_rpc_url | (unset — Solana CLI config) | REQUIRED (public). Solana RPC endpoint the delegate’s on-chain authorization is sent through. Unset or blank is no override: the endpoint then resolves the way the sithbit CLI does — the CLI config’s json_rpc_url or a bare JSON_RPC_URL environment variable, and failing both the CLI’s default cluster, mainnet-beta. A container with no CLI config therefore signs against mainnet unless this names the intended cluster |
[health], [observability] | (the shared defaults) | RECOMMENDED (public). The two shared sections; this binary’s health port is in the Monitoring table |
Its on-chain calls resolve the
RPC endpoint in this order:
json_rpc_url above when set; otherwise the way the sithbit CLI does —
the config file at ~/.config/solana/cli/config.yml, managed with
sithbit config get/set,1 or a bare JSON_RPC_URL environment
variable; and failing both, the CLI’s default cluster, mainnet-beta.
[mail_hosts] — client autoconfiguration
The public IMAP/POP/SMTP coordinates domain-sithbit advertises to
unmodified mail clients through its autoconfig/autodiscover routes (see
domain-sithbit: client autoconfiguration).
Every sub-server is dev-defaulted to a loopback stack on the standard
implicit-TLS mail ports, so an empty config still serves a valid document;
point the hosts at your real, publicly reachable servers before
advertising them.
| Key | Default | Meaning |
|---|---|---|
[mail_hosts.imap] host | "127.0.0.1" | REQUIRED (public). Public IMAP hostname a client connects to. The loopback default advertises a stack no remote client can reach |
[mail_hosts.imap] port | 993 | RECOMMENDED (public). IMAP port. The default is the standard implicit-TLS port; confirm it matches the listener you are advertising |
[mail_hosts.imap] socket_type | "SSL" | RECOMMENDED (public). Transport security (see below) — keep it consistent with the port you advertise |
[mail_hosts.pop] host | "127.0.0.1" | REQUIRED (public). Public POP3 hostname — the loopback default advertises an unreachable server |
[mail_hosts.pop] port | 995 | RECOMMENDED (public). POP3 port; the default is the standard implicit-TLS one |
[mail_hosts.pop] socket_type | "SSL" | RECOMMENDED (public). Transport security — keep it consistent with the port |
[mail_hosts.smtp] host | "127.0.0.1" | REQUIRED (public). Public submission hostname — the loopback default advertises an unreachable server |
[mail_hosts.smtp] port | 465 | RECOMMENDED (public). Submission port — implicit-TLS SMTPS by default (RFC 8314); set 587 with socket_type = "STARTTLS" to advertise the opt-in secondary instead |
[mail_hosts.smtp] socket_type | "SSL" | RECOMMENDED (public). Transport security — keep it consistent with the port |
socket_type takes the Thunderbird tokens "SSL" (implicit TLS from
connect), "STARTTLS" (opportunistic upgrade), or "plain" (no
encryption, dev only); lowercase aliases ("ssl", "starttls") are also
accepted, and the Outlook POX <SSL>/<Encryption> flags are derived
from it. A present [mail_hosts.<server>] sub-table must spell out
all three fields (a partial table fails startup loudly); an omitted
whole sub-server falls back to its defaults. Env overrides use the usual
__ descent, e.g. DOMAIN_SITHBIT_MAIL_HOSTS__SMTP__HOST=mail.example.com.
[mta_sts] — MTA-STS policy publication
The
MTA-STS
policy (RFC 8461) this instance publishes at GET /.well-known/mta-sts.txt
for the domains it fronts (see domain-sithbit: publishing the MTA-STS
policy). The whole
section is opt-in: absent, the endpoint replies 404. Senders fetch the
policy as https://mta-sts.<domain>/.well-known/mta-sts.txt, so front the
service with a TLS proxy holding a certificate for that hostname.
| Key | Default | Meaning |
|---|---|---|
mode | "testing" | RECOMMENDED (public). Choose the posture deliberately rather than inheriting it. What the policy demands of senders: "enforce" (MX mismatch or TLS failure = do not deliver), "testing" (failures are reported, delivery proceeds), or "none" (the domain withdraws its policy). The default reports without blocking mail |
mx | [] | REQUIRED (public) when the section is present. Enforced at startup — an enforce/testing policy with an empty list refuses to boot. MX identity patterns senders match delivery targets against — exact hostnames (mx.example.com) or a *. wildcard covering exactly one leftmost label (*.example.com). Must cover every host your MX records name. Required — at least one — unless mode = "none" |
max_age | 604800 (one week) | Policy lifetime in seconds — how long senders cache it. RFC 8461 recommends weeks. Values above one year (31557600, the §3.2 ceiling senders clamp to anyway) are rejected |
Validation is fail-fast at startup, never per request: a mode outside
the RFC vocabulary, an enforce/testing policy with an empty mx
list, or an over-ceiling max_age all refuse to boot rather than serve
a broken policy. Remember to bump the _mta-sts.<domain> TXT record’s
id whenever you edit this section — senders re-fetch the policy only
when that id changes (see DNS
setup).
-
This is the same file (
~/.config/solana/cli/config.yml, same location on Windows too) the Solana CLI’s ownsolana configcommand reads and writes, if you already have it installed — see CLI Quickstart. ↩