前期准备
服务器
选择服务器是自建域名邮箱的关键一步。邮件服务器需要开放的端口比较多,其中最重要的就是 25 端口,这是 SMTP 服务必需的。但很多VPS厂商由于垃圾邮件的发送和其他恶意活动,选择禁止或限制了 25 端口。因此,在选择VPS时,务必要确定所选的厂商是否开放了 25 端口。如果不确定,最好提前联系客服进行确认。
所以选择那些对邮件服务友好、已经默认开放 25 端口的 VPS 厂商会更为便捷。这里推荐的两家:
- Contabo: Contabo 是一家德国的VPS厂商,它提供的 VPS 价格合理且性能稳定。最重要的是,它默认开放了 25 端口,为邮件服务提供了很好的支持。Contabo 以高配低价著称,由于 Mailcow 的容器化部署对内存要求较高,所以也非常推荐使用 Contabo 的 VPS 基本款。右上角切换成欧元更便宜,基础款 VPS 仅需 5.99 欧元/月,配置为 4 核 8G 内存 200G SSD 硬盘,流量 25TB,带宽 200Mbps,支持 25 端口。
- RackNerd: RackNerd 是一家美国的VPS厂商,它的服务也非常受欢迎。和 Contabo 一样,RackNerd 也支持 25 端口,并提供了多种配置选择,以满足不同用户的需求。
对于其他云服务器厂商,例如 Oracle Cloud 等,可能需要自己申请开放 25 端口。
Windows用户SSH连接VPS
使用cmder(适用于Windows用户)
Cmder是一款功能强大的终端模拟器,Windows用户需要先安装SSH的连接工具,打开Cmder官网,然后点击download full即可。当然也可以选择其他SSH客户端工具,诸如Xshell、PuTTY等。
首先打开你的Cmder或者Terminal,然后输入下面的命令:
ssh username@VPS_IP
按下Enter键后,系统询问你是否确认连接,请输入”yes”并按下Enter。
接下来,系统将要求你输入VPS的密码,输入后按下Enter确认。
连接成功后,你将进入到VPS的命令行界面,可以开始进行后续操作。
检测是否开通25端口
VPS 上打开的端口取决于服务器上安装的操作系统。 例如,要在 VPS(虚拟服务器)上打开端口 25 并检查它,您需要执行以下步骤:
- 使用 VPS 凭据通过 SSH 客户端(例如适用于 Windows 的 PuTTY 或适用于 macOS 和 Linux 的终端)连接到 VPS。
- 使用以下命令更新软件包并安装必要的实用程序:
sudo apt update
sudo apt install ufw - 使用以下命令打开端口 25:
sudo ufw allow 25 - 使用以下命令检查 ufw(防火墙管理实用程序)的当前状态:
sudo ufw status - 有多种方法可以检查端口 25。您可以通过运行以下命令来使用 Telnet 实用程序:
telnet localhost 25
如果连接成功,则端口已启动并准备好接受连接。 - 完成这些步骤后,端口 25 将打开并可供 CentOS 服务器上使用。
- 您还可以使用在线实用程序检查端口 25,例如通过网站 Open Port Check Tool – Test Port Forwarding on Your Router
邮件服务还需要设置 rDNS (Reverse DNS) 记录,即反向 DNS 记录。rDNS 记录是将 IP 地址解析为域名的过程,而 DNS 记录则是将域名解析为 IP 地址的过程。邮件服务器发送邮件时,会将邮件服务器的 IP 地址放在邮件头中,而邮件头中的 IP 地址可以通过 rDNS 记录解析为域名。如果邮件服务器的 IP 地址没有设置 rDNS 记录,那么邮件可能会被对方的邮件服务器拒收,因为对方的邮件服务器会认为该邮件是垃圾邮件。因此,设置 rDNS 记录是非常重要的。而 Contabo 支持直接在服务器面板设置 rDNS,非常方便。
搭建方案选择
自建域名邮箱的方式有很多,比如使用 Mailcow、Mail-in-a-Box、iRedMail 等。这些方式都需要自己购买 VPS 服务器,然后在服务器上安装相应的软件。Mail-in-a-Box 之前尝试过,其需要在服务器上搭建一个 DNS 服务器,较为麻烦,而且不支持 Docker 容器化部署。
这里我选择使用 Mailcow,因为它的安装方式比较简单,而且支持 Docker 容器化部署,可以在服务器上快速部署,但其内存占用较大,因此也十分推荐 Contabo。此外,Mailcow 也提供了 Web 界面,可以方便地管理邮箱账号,而 Web 也可以设置反向代理,不占用 80 或 443 端口,方便与其他服务共存。
开始搭建
准备
本文使用的系统为 Ubuntu 22.04。首先需要安装 Docker 和 Docker Compose,可以参考 Docker 官方文档。建议使用安装脚本安装,安装脚本会自动安装 Docker 和 Docker Compose,并设置 Docker 服务开机自启动。
Debian手动安装docker、docker compose命令
下载
curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加执行权限
chmod +x /usr/local/bin/docker-compose
建立软连接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
修改VPS的hostname(# your-domain.com 替换成你自己的域名)
hostnamectl set-hostname mail.zwaxu.com
然后修改/etc/hosts
,添加一行hosts解析,就是将mail.zwaxu.com
指向到您当前服务器的公网IP,命令如下:
echo '173.0.xx.xxx mail.zwaxu.com' >> /etc/hosts
部署mailcow
#Debian安装Git
apt-get install git
#克隆mailcow代码
git clone https://github.com/mailcow/mailcow-dockerized
进入代码目录cd mailcow-dockerized
执行初始化脚本:./generate_config.sh
根据提示设置域名和时区等信息。注意:
- 域名要和上面设置的主机名一致,比如
mail.domain.com
- 如果后续需要修改,可以编辑
mailcow.conf
这个配置文件 - 生成的时间可以选择:Asia/Shanghai
运行
docker-compose up -d
等待如下图,安装完成
接下来我们需要一个域名,本文将以 zwaxu.com
为例,并以 Cloudflare 为例,介绍如何配置域名解析,建议将域名托管到 Cloudflare。
现在可以访问 Web Dashboard 了,地址为 https://mail.zwaxu.com
,用户名为 admin
,密码为 moohoo
。
/
Mailcow DNS 配置
一个邮件服务器需要配置 SPF、DKIM、DMARC 等,这些有助于提高邮件的送达率,而不会被判定为垃圾邮件或者被拒收。这些配置都对应到相应的 DNS 记录。下面我们将一一进行配置。
步骤如下
首先在 Mail Web Dashboard 中,点击右侧上方的 E-Mail
– 配置 – 添加域名,输入 zwaxu.com
,然后点击 添加域名并重启
。然后在 操作
栏点击 DNS
,等待一会,查看系统检测到的目前的 DNS 记录。当前状态下只有 A 记录,即将 mail.zwaxu.com
解析到服务器 IP 地址。
如果你的服务器支持 IPV6,那么需要添加 IPv6 记录。在 Cloudflare 中,点击 添加记录
,选择 AAAA
类型,输入 mail
,然后输入服务器 IPV6 地址。
在 Contabo control panel 中,点击 Reverse DNS Management
,然后为 IPv4 和 IPv6 地址分别设置 rDNS 记录,即将 IP 地址解析为 mail.zwaxu.com
。
其他 VPS 厂商可能需要申请客服来添加 rDNS 记录,请咨询客服。
在 Cloudflare 中,点击 添加记录
,选择 TLSA
类型,输入 _25._tcp.mail
,然后 Usage (required)、Selector (required)、Matching type (required) 分别选择 3
、1
、1
,最后根据 Web Dashboard 中提供的正确数据,输入正确的 Certificate (hexadecimal) (required)。
在 Cloudflare 中,点击 添加记录
,选择 MX
类型,输入 @
,内容输入 mail.zwaxu.com
,优先级为 10
。
在 Cloudflare 中,点击 添加记录
,选择 CNAME
类型,输入 autodiscover
,然后输入 mail.zwaxu.com
。
继续添加 CNAME
记录,输入 autoconfig
,然后输入 mail.zwaxu.com
。
SRV 较为复杂,具体配置如上图所示:
在 Cloudflare 中,点击 添加记录
,选择 TXT
类型,输入 @
,内容输入 v=spf1 mx a -all
。
在 Cloudflare 中,点击 添加记录
,选择 TXT
类型,输入 _dmarc
,内容输入 V=DMARC1;p=reject;rua=mailto:[email protected]
。
注意,这里的 [email protected]
需要是一个真实的地址。 这个地址的主要作用是接收 DMARC 聚合报告。这些报告为域名拥有者提供关于其域名电子邮件使用情况的反馈,特别是哪些邮件是合法的,哪些可能是仿冒的。它们提供了关于邮件的详细信息,如发件人、接收时间、发件的IP地址等。等 DNS 全部设置完毕后,需要创建这个邮箱账号。
在 Cloudflare 中,点击 添加记录
,选择 TXT
类型,输入 dkim._domainkey
,然后内容请输入 Web Dashboard 中提供的正确数据。
全部 DNS 记录配置完毕后,可以点击 Web Dashboard 中域名页面的 DNS
按钮,查看是否配置正确。
邮箱使用
创建账号
在 Web Dashboard 中,点击右侧上方的 E-Mail
– 配置 – 邮箱 – 添加邮箱。输入用户名和密码。
Webmail
在 Web Dashboard 中,点击右侧上方的 应用
– Webmail
,即可进入 Webmail。
输入用户名和密码,即可登录 Webmail。
客户端设置
例如在 Apple Mail.app 中,添加账户,然后输入用户名和密码,配置 STMP 和 IMAP 服务器地址,都为 mail.zwaxu.com
,都需要输入用户名和密码,其余默认即可。
效果
当上述 DNS 配置都设置好后,可以使用 Mail Tester 来测试邮件的送达率。输入邮件内容,建议内容多一点,不然太像垃圾邮件。一般情况下,邮件得分可以到满分:
发送一封邮件到 Gmail,也会被判定为一封重要邮件:
查看原始邮件,也可以看到 SPF、DKIM、DMARC 都已经通过验证: