2023-01-30 16:27:06 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
(
|
|
|
|
cat <<EOF
|
|
|
|
/*
|
implement dnssec-awareness throughout code, and dane for incoming/outgoing mail delivery
the vendored dns resolver code is a copy of the go stdlib dns resolver, with
awareness of the "authentic data" (i.e. dnssec secure) added, as well as support
for enhanced dns errors, and looking up tlsa records (for dane). ideally it
would be upstreamed, but the chances seem slim.
dnssec-awareness is added to all packages, e.g. spf, dkim, dmarc, iprev. their
dnssec status is added to the Received message headers for incoming email.
but the main reason to add dnssec was for implementing dane. with dane, the
verification of tls certificates can be done through certificates/public keys
published in dns (in the tlsa records). this only makes sense (is trustworthy)
if those dns records can be verified to be authentic.
mox now applies dane to delivering messages over smtp. mox already implemented
mta-sts for webpki/pkix-verification of certificates against the (large) pool
of CA's, and still enforces those policies when present. but it now also checks
for dane records, and will verify those if present. if dane and mta-sts are
both absent, the regular opportunistic tls with starttls is still done. and the
fallback to plaintext is also still done.
mox also makes it easy to setup dane for incoming deliveries, so other servers
can deliver with dane tls certificate verification. the quickstart now
generates private keys that are used when requesting certificates with acme.
the private keys are pre-generated because they must be static and known during
setup, because their public keys must be published in tlsa records in dns.
autocert would generate private keys on its own, so had to be forked to add the
option to provide the private key when requesting a new certificate. hopefully
upstream will accept the change and we can drop the fork.
with this change, using the quickstart to setup a new mox instance, the checks
at internet.nl result in a 100% score, provided the domain is dnssec-signed and
the network doesn't have any issues.
2023-10-10 13:09:35 +03:00
|
|
|
Command mox is a modern, secure, full-featured, open source mail server for
|
2023-01-30 16:27:06 +03:00
|
|
|
low-maintenance self-hosted email.
|
|
|
|
|
2024-01-10 18:48:53 +03:00
|
|
|
Mox is started with the "serve" subcommand, but mox also has many other
|
|
|
|
subcommands.
|
|
|
|
|
|
|
|
Many of those commands talk to a running mox instance, through the ctl file in
|
|
|
|
the data directory. Specify the configuration file (that holds the path to the
|
|
|
|
data directory) through the -config flag or MOXCONF environment variable.
|
|
|
|
|
|
|
|
Commands that don't talk to a running mox instance are often for
|
|
|
|
testing/debugging email functionality. For example for parsing an email message,
|
|
|
|
or looking up SPF/DKIM/DMARC records.
|
|
|
|
|
|
|
|
Below is the usage information as printed by the command when started without
|
|
|
|
any parameters. Followed by the help and usage information for each command.
|
|
|
|
|
|
|
|
|
|
|
|
# Usage
|
2023-01-30 16:27:06 +03:00
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
./mox 2>&1 | sed 's/^\( *\|usage: \)/\t/'
|
|
|
|
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
2023-03-12 12:38:02 +03:00
|
|
|
# setting XDG_CONFIG_HOME ensures "mox localserve" has reasonable default
|
|
|
|
# values in its help output.
|
|
|
|
XDG_CONFIG_HOME='$userconfigdir' ./mox helpall 2>&1
|
2023-01-30 16:27:06 +03:00
|
|
|
|
|
|
|
cat <<EOF
|
|
|
|
*/
|
|
|
|
package main
|
|
|
|
|
|
|
|
// NOTE: DO NOT EDIT, this file is generated by gendoc.sh.
|
|
|
|
EOF
|
|
|
|
)>doc.go
|
|
|
|
gofmt -w doc.go
|
|
|
|
|
|
|
|
(
|
|
|
|
cat <<EOF
|
|
|
|
/*
|
2024-01-10 18:48:53 +03:00
|
|
|
Package config holds the configuration file definitions.
|
|
|
|
|
|
|
|
Mox uses two config files:
|
|
|
|
|
|
|
|
1. mox.conf, also called the static configuration file.
|
|
|
|
2. domains.conf, also called the dynamic configuration file.
|
|
|
|
|
|
|
|
The static configuration file is never reloaded during the lifetime of a
|
|
|
|
running mox instance. After changes to mox.conf, mox must be restarted for the
|
|
|
|
changes to take effect.
|
|
|
|
|
|
|
|
The dynamic configuration file is reloaded automatically when it changes.
|
|
|
|
If the file contains an error after the change, the reload is aborted and the
|
|
|
|
previous version remains active.
|
|
|
|
|
|
|
|
Below are "empty" config files, generated from the config file definitions in
|
|
|
|
the source code, along with comments explaining the fields. Fields named "x" are
|
|
|
|
placeholders for user-chosen map keys.
|
|
|
|
|
|
|
|
# sconf
|
|
|
|
|
|
|
|
The config files are in "sconf" format. Properties of sconf files:
|
|
|
|
|
|
|
|
- Indentation with tabs only.
|
|
|
|
- "#" as first non-whitespace character makes the line a comment. Lines with a
|
|
|
|
value cannot also have a comment.
|
|
|
|
- Values don't have syntax indicating their type. For example, strings are
|
|
|
|
not quoted/escaped and can never span multiple lines.
|
|
|
|
- Fields that are optional can be left out completely. But the value of an
|
|
|
|
optional field may itself have required fields.
|
2023-01-30 16:27:06 +03:00
|
|
|
|
2024-01-10 18:48:53 +03:00
|
|
|
See https://pkg.go.dev/github.com/mjl-/sconf for details.
|
2023-03-10 13:42:50 +03:00
|
|
|
|
2023-01-30 16:27:06 +03:00
|
|
|
|
|
|
|
# mox.conf
|
|
|
|
|
|
|
|
EOF
|
|
|
|
./mox config describe-static | sed 's/^/\t/'
|
|
|
|
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
# domains.conf
|
|
|
|
|
|
|
|
EOF
|
|
|
|
./mox config describe-domains | sed 's/^/\t/'
|
|
|
|
|
2023-03-01 00:12:27 +03:00
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
# Examples
|
|
|
|
|
|
|
|
Mox includes configuration files to illustrate common setups. You can see these
|
2023-03-04 02:49:02 +03:00
|
|
|
examples with "mox example", and print a specific example with "mox example
|
2023-03-01 00:12:27 +03:00
|
|
|
<name>". Below are all examples included in mox.
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
2023-03-04 02:49:02 +03:00
|
|
|
for ex in $(./mox example); do
|
2023-03-01 00:12:27 +03:00
|
|
|
echo '# Example '$ex
|
|
|
|
echo
|
2023-03-04 02:49:02 +03:00
|
|
|
./mox example $ex | sed 's/^/\t/'
|
2023-03-01 00:12:27 +03:00
|
|
|
echo
|
|
|
|
done
|
|
|
|
|
2023-01-30 16:27:06 +03:00
|
|
|
cat <<EOF
|
|
|
|
*/
|
|
|
|
package config
|
|
|
|
|
|
|
|
// NOTE: DO NOT EDIT, this file is generated by ../gendoc.sh.
|
|
|
|
EOF
|
|
|
|
)>config/doc.go
|
|
|
|
gofmt -w config/doc.go
|