安装 MOX 参考:
使用 Docker 部署 Mox Mail 邮局
在 Linux 上使用 Docker 部署 Mox 邮件服务器时,很多人会遇到:
1
| DANE is inactive because MX records are not DNSSEC-signed.
|
但多数情况下,并不是域名没开启 DNSSEC,而是:
Mox 使用的 DNS 解析器没有真正进行 DNSSEC 验证。
本文介绍如何使用 Unbound 为 Docker 中的 Mox 提供支持 DNSSEC 的 DNS 解析。
适用环境:
1
2
3
4
| Debian / Ubuntu
Docker
Mox Mail Server
Unbound
|
为什么会出现 DANE inactive#
Mox 启用 DANE 时,会验证:
- MX 记录
- TLSA 记录
- DNSSEC 签名
只有 DNSSEC 验证成功,DANE 才会生效。
Docker 默认 DNS:
只是 Docker 的内部转发器:
因此即使域名已经开启 DNSSEC,Mox 仍可能提示:
1
| DANE is inactive because MX records are not DNSSEC-signed.
|
推荐架构#
推荐:
1
2
3
4
5
| Internet
↓
Unbound
↓
Docker Mox
|
不要使用:
1
2
3
| Docker DNS
↓
8.8.8.8
|
也不推荐:
1
2
3
| systemd-resolved
↓
Docker DNS
|
禁用 systemd-resolved#
Ubuntu / Debian 默认启用了:
它会占用:
并接管 /etc/resolv.conf。
这会导致:
- Unbound 无法监听 53
- Docker 使用错误 DNS
- DNSSEC 验证失效
停止并禁用:
1
2
| systemctl stop systemd-resolved
systemctl disable systemd-resolved
|
重建 /etc/resolv.conf:
1
2
3
| mv /etc/resolv.conf /etc/resolv.conf.bak
echo "nameserver 127.0.0.1" > /etc/resolv.conf
|
安装 Unbound#
安装:
1
2
| apt update
apt install -y unbound unbound-anchor dnsutils
|
确认支持 DNSSEC:
输出中应包含:
初始化 trust anchor#
检查:
1
| ls -l /var/lib/unbound/root.key
|
不存在则执行:
1
| unbound-anchor -a /var/lib/unbound/root.key
|
配置 Unbound#
创建配置:
1
| nano /etc/unbound/unbound.conf.d/mox.conf
|
写入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| server:
interface: 0.0.0.0
port: 53
do-ip4: yes
do-ip6: yes
harden-dnssec-stripped: yes
qname-minimisation: yes
access-control: 127.0.0.0/8 allow
access-control: 172.16.0.0/12 allow
access-control: 0.0.0.0/0 refuse
|
这里使用:
是为了让 Docker 中的 Mox 能访问宿主机 Unbound。
公网访问则通过:
限制。
启动 Unbound#
检查配置:
启动:
1
2
| systemctl enable unbound
systemctl restart unbound
|
确认 53 端口已经被 Unbound 接管:
验证 DNSSEC#
普通测试:
1
| dig google.com @127.0.0.1
|
DNSSEC 测试:
1
| dig +dnssec cloudflare.com @127.0.0.1
|
返回结果必须包含:
例如:
其中:
1
| ad = Authenticated Data
|
测试是否生效
测试故意损坏 DNSSEC 的域名:
1
| dig dnssec-failed.org @127.0.0.1
|
正确结果应为:
如果还能解析出 IP:
让 Docker 中的 Mox 使用 Unbound#
docker-compose.yml:
1
2
3
4
| services:
mox:
dns:
- 172.17.0.1
|
这样:
1
2
3
4
5
| Mox
↓
Unbound
↓
递归 DNS
|
域名侧还需要完成#
开启 DNSSEC#
在 DNS 服务商后台启用 DNSSEC。
添加 DS 记录#
如果注册商没有 DS:
配置 TLSA#
Mox 会自动生成:
1
| _25._tcp.mail.example.com
|
对应的 TLSA 记录。
推荐检测工具#
本地:
1
| delv _25._tcp.mail.example.com TLSA
|
在线:
DANE 是否生效,关键不只是:
更重要的是:
1
2
| Mox 使用的 DNS
是否真正验证 DNSSEC
|
因此:
- Docker 默认 DNS 不适合 DANE
- 建议禁用 systemd-resolved
- 使用支持 DNSSEC 的 resolver
- 推荐使用 Unbound
- 正确配置 DS 与 TLSA
完成后,Mox 才能真正启用: