Wildduck 搭建邮件服务器

WildDuck is a scalable no-SPOF IMAP/POP3 mail server. WildDuck uses a distributed database (sharded + replicated MongoDB) as a backend for storing all data, including emails.

WildDuck tries to follow Gmail in product design. If there’s a decision to be made then usually the answer is to do whatever Gmail has done.

下文将展示如何使用 Wildduck 搭建邮件服务器

环境

  • Ubuntu 18.04
    • 最好是纯净系统,由于 Wildduck 使用的端口比较多,还包括 Web 界面,所以需要没有其他程序占用必要端口
    • Ubuntu 16.04 – 20.04 可以使用脚本安装,其他发行版无法正常使用脚本,即使是 Debain 也会卡在等待服务启动

准备

  • 一个域名
    • 可以正常设置 DNS
  • VPS
    • 可以设置 PTR(Reverse DNS)

参考

步骤

注意:有些(几乎所有) VPS 厂商为了防止滥发邮件,预先屏蔽了 25 端口出口流量,这造成了 Wildduck 无法向其他邮件服务器发送邮件,需要提工单解封(Vultr 就是如此,排错一下午的经(教)验(训))

以下功能仍然可以正常使用:

  • 接受所有邮件
  • 向同一 Wildduck 服务器下的用户发送邮件

例如:在某 VPS 上搭建的 Wildduck 中有两个用户 A 和 B,A 与 B 之间是可以相互发送/接受邮件的,A 与 B 也可以接受来自 QQ、Gmail 等用户发来的邮件,但是 A 与 B 均不能发送邮件给 QQ、Gmail 等用户

配置域名 DNS

  1. 进入域名商家的 DNS 配置页面,添加 A 记录将域名解析到机器的 IP 地址
  2. 添加 MX 记录将 mail 子域名指向顶级域名
  3. (可选)也可以选择添加 CNAME 记录

安装 Wildduck

安装方式选择 Wildduck 提供的一键脚本(仅适用于 Ubuntu 16.04 – 20.04)

以下指令使用 root 用户执行

  1. 下载脚本
    wget -O - https://raw.githubusercontent.com/nodemailer/wildduck/master/setup/get_install.sh | bash
  2. 安装 Wildduck
    ./install.sh [your domain] mail.[your domain]

    将 [your domain] 替换为你的域名

添加 DNS 记录

安装完成后,安装脚本会在当前目录下生成名为 [你的域名]-nameserver.txt 文件,其中描述了接下来你需要完成的 DNS 设置

  1. 添加 MX 记录这一步已经在配置域名 DNS 时完成了
  2. 添加 TXT 记录在 DNS 设置中添加对应 TXT 记录,如果使用 Or: 后的配置,则需要两条 TXT 记录
    除以上 TXT 记录外还需要添加 DKIM 的 TXT 记录(没有此记录也可以正常收发邮件,具体原因没有深究)
    使用指令查看设置是否生效
    nslookup -qt=txt [your domain]
  3. 设置 PTR
    这一步需要进入 VPS 商家的控制面板,设置反向 DNS 地址(下图为 Vultr 界面)使用指令查看设置是否生效
    nslookup -qt=ptr [your IP]
  4. 最终的 DNS 记录(截图中缺少 DKIM 对应的 TXT 记录, Cloudflare 的迁移过程中没有自动侦测到)

安装后一些问题的解决

安装后无法 SSH 连接

此问题是因为我修改了默认 SSH 端口,我一度怀疑机器被墙了(这么快的吗)

Wildduck 安装时自动安装了 ufw 作为防火墙,但是只放行了 22 默认端口,执行指令放行端口

ufw allow [port]

或者干脆禁用 ufw(需重启)

ufw disable

Redis 服务器

在重启机器后,Wildduck 无法正常启动,具体的日志忘记截图,但是其中有 net.js 报错

原因为 redis-server 没有开启开机启动,执行以下指令开启 redis 开机自启

systemctl start redis-server
systemctl enable redis-server

zone-mta 以及 25 端口

上文说到了 VPS 厂商会屏蔽 25 端口,导致无法向其他邮件服务商发邮件

以下内容仅作记录,并不能解决此问题,只有发送工单才可以解封端口

Wildduck 的 smtp 邮件发送功能是由 zone-mta 实现的,其配置文件的路径在 /etc/zone-mta/,其中包含 DNS 配置文件。根据 Github issue 里的一些解决方法,我更改了 DNS 设置,将 dns 服务器换为谷歌 DNS,并关闭了 DNS 缓存,但无济于事

可以由下图的日志输出看出,域名已经成功解析为 IP,但还是无法连接

效果

用户注册和登录收件箱界面接收邮件   站内用户可以发送和接受邮件

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据