Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

KeyDefaultMeaning
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.

KeyDefaultMeaning
[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] port993RECOMMENDED (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] port995RECOMMENDED (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] port465RECOMMENDED (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.

KeyDefaultMeaning
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_age604800 (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).


  1. This is the same file (~/.config/solana/cli/config.yml, same location on Windows too) the Solana CLI’s own solana config command reads and writes, if you already have it installed — see CLI Quickstart.