总述 #
为了清楚起见,本教程中使用这些值作为示例,无论您在何处看到它们,都需要将它们替换为实际值:
- 域名:example.org
- MX 域(主机名):mx1.example.org
- IPv4地址:10.2.3.4
- IPv6 地址:2001:beef::1
同时确保您的提供商不会阻止 SMTP 流量(25 TCP 端口),还建议运行您自己的 DNS 解析器并启用 DNSSEC 验证。
安装 maddy #
我使用 Docker 来安装 maddy,compose 示例文件如下:
services:
maddy:
image: 'foxcpp/maddy:latest'
ports:
- '993:993'
- '587:587'
- '465:465'
- '143:143'
- '25:25'
volumes:
- 'maddydata:/data'
environment:
- MADDY_DOMAIN=maddy.test
- MADDY_HOSTNAME=mx.maddy.test
container_name: maddy
restart: unless-stopped
根据需要自行修改
默认配置自动放置在 /data 那里,MADDY_DOMAIN 和 MADDY_HOSTNAME 将控制服务器的主域名和主机名。
TLS 证书应放置在 /data/tls/fullchain.pem 中,私钥应放置在 /data/tls/privkey.pem 中。
DKIM 密钥在 /data/dkim_keys 目录中生成。
/data - maddy 状态目录。数据库、队列等都存储在这里。您可能需要在此处挂载一个命名卷。主配置文件也存储在这里(/data/maddy.conf)。
注意:docker 不会自己创建
maddy.conf,需要自己到 foxcpp/maddy 里找到类似maddy.conf.docker的配置文件复制过去。
TLS 配置 #
此处 TLS 证书应是 MX 主机域名的证书
首次启动会失败。请将 TLS 证书复制到 /data/tls/fullchain.pem ,并将密钥复制到 /data/tls/privkey.pem 。再次运行服务器。
然后按照说明完成 DNS 配置。
DNS记录 #
如何配置取决于您的 DNS 提供商(如果您自己运行,则为服务器)。您的 DNS 区域应如下所示:
; Basic domain->IP records, you probably already have them.
example.org. A 10.2.3.4
example.org. AAAA 2001:beef::1
; It says that "server mx1.example.org is handling messages for example.org".
example.org. MX 10 mx1.example.org.
; Of course, mx1 should have A/AAAA entry as well:
mx1.example.org. A 10.2.3.4
mx1.example.org. AAAA 2001:beef::1
; Use SPF to say that the servers in "MX" above are allowed to send email
; for this domain, and nobody else.
example.org. TXT "v=spf1 mx ~all"
; It is recommended to server SPF record for both domain and MX hostname
mx1.example.org. TXT "v=spf1 a ~all"
; Opt-in into DMARC with permissive policy and request reports about broken
; messages.
_dmarc.example.org. TXT "v=DMARC1; p=quarantine; ruf=mailto:postmaster@example.org"
; Mark domain as MTA-STS compatible (see the next section)
; and request reports about failures to be sent to postmaster@example.org
_mta-sts.example.org. TXT "v=STSv1; id=1"
_smtp._tls.example.org. TXT "v=TLSRPTv1;rua=mailto:postmaster@example.org"
最后一个,DKIM 密钥,有点棘手。 maddy 在第一次启动时为您生成了密钥。您可以在 /data/dkim_keys/example.org_default.dns 中找到它。您需要将其放入域 default._domainkey.example.org 的 TXT 记录中,如下所示:
default._domainkey.example.org. TXT "v=DKIM1; k=ed25519; p=nAcUUozPlhc4VPhp7hZl+owES7j7OlEv0laaDEDBAqg="
MTA-STS 和 DANE #
MTA-STS #
默认情况下,SMTP 不受主动攻击的保护。 MTA-STS 策略告诉兼容的发件人在与您的服务器通信时始终使用经过正确身份验证的 TLS ,从而提供一种易于部署的方法来保护您的服务器免受端口 25 上的 MitM 攻击。
基本上,您要创建一个包含以下内容的文件,并使其在 https://mta-sts.example.org/.well-known/mta-sts.txt 上可用:
version: STSv1
mode: enforce
max_age: 604800
mx: mx1.example.org
注意:文件中的 mx1.example.org 是您的 MX 主机名,在简单的配置中,它将与您的主机名 example.org 相同。在更复杂的设置中,您将拥有多个 MX 服务器 - 请将它们全部添加为一行,如下所示:
mx: mx1.example.org
mx: mx2.example.org
DANE #
还建议设置 TLSA (DANE) 记录。
注意:每更新 TLS 证书后都要重新生成 TLSA 记录
使用在线工具 #
使用 https://www.huque.com/bin/gen_tlsa 生成一个。将端口设置为 25,传输协议设置为“tcp”,域名设置为 MX 主机名 。有效记录示例:
_25._tcp.mx1.example.org. TLSA 3 1 1 7f59d873a70e224b184c95a4eb54caa9621e47d48b4a25d312d83d96e3498238
本地生成 #
需要安装 hash-slinger 。请根据所使用的发行版进行安装,对于 Debian ,可以直接:
apt install hash-slinger
使用 hash-slinger 生成 TLSA 记录:
tlsa --create [-4] [-6] --certificate file.crt --protocol tcp --port 25 --usage 3 --selector 1 --mtype 1 mx1.example.org
可以验证:
tlsa --verify [-4] [-6] --port 25 mx1.example.org
DANE 记录更新问题 #
由于 TLSA 记录是根据证书生成的,如果证书发生改变(比如每次更新证书),则需要更新相应的 TLSA 记录,如果不想频繁修改 TLSA 记录的话,可以在更新证书时沿用之前的证书,如 Certbot 的 --reuse-key 选项。注意 TLSA 还需要像 3 1 1 这样的参数,这样 TLSA 记录应该不用修改了,如不放心,可以进行验证。
注意:沿用证书可能会使安全性大大降低。
用户帐户和 maddy 命令 #
IMAP 邮箱(“帐户”)和身份验证凭据是分开保存的。
要注册用户凭据,请使用maddy creds create命令。像那样:
docker exec -it container_name_here maddy creds create postmaster@example.org
请注意,用户名是电子邮件地址。这是必需的,因为用户名用于授权 IMAP 和 SMTP 访问(除非您配置了自定义映射,此处不再赘述)。
注册用户凭据后,您还需要创建一个本地存储帐户:
docker exec -it container_name_here maddy imap-acct create postmaster@example.org
就是这样。现在你有了你的第一个电子邮件地址。使用你的电子邮件客户端进行身份验证时,请不要忘记用户名是 postmaster@example.org ,而不仅仅是 postmaster 。
您可能会发现运行 maddy creds --help 并 maddy imap-acct --help 了解其他命令很有用。请注意,IMAP 帐户和凭据是单独管理的,用户名应默认匹配才能正常工作。
从旧的 Maddy 版本升级 #
通常可以在现有安装上安装最新版本(例如使用 build.sh 脚本)。
建议在执行此操作之前备份状态目录(对于 Linux 通常为 /var/lib/maddy )。新的服务器版本可能会自动转换数据库文件,从而使旧版本无法读取它们。
端口 #
- 25 - SMTP 入站端口
- 465,587 - SMTP 提交端口
- 993,143 - IMAP4 端口
实践 #
在使用客户端连接邮件服务器时:
- 配置 IMAP 建议使用 993 端口
- 配置 SMTP 建议使用 465 端口
此部分根据 stalwart 文档 得到