大家好!中文网络的第一个真正意义上的社区邮箱,LINUX DO Mail社区邮箱终于上线啦!
在前期的测评中,我们提到过,Linux Do采用了成熟的 Mailu 套件来搭建了邮件服务器。今天,我就来详细介绍一下如何搭建一个Linux Do Mail同款域名邮箱。
Mailu.io 是著名的基于Docker的邮件服务器管理系统,它的前身是著名的 Poste.io 系统。与Poste相比,Mailu的功能更加丰富,在服务器集群部署的环境中也有较好的可拓展性,但资源占用较高,且部署起来没有Poste那么直观。相对来说,Poste更适合小团队,而Mailu可以用于较大规模的团队和社区的部署。
本篇教程总共包括下面的几个部分
- 搭建开始前的准备
- 域名DNS的设置(第一部分)
- Reverse DNS的设置
- 生成 Mailu 服务器配置文件
- 安装 Mailu
- 域名DNS的设置(第二部分)
- 添加用户与其他域名
- 测试邮件收发
- 配置MTA-STS (可选)
- 设置SMTP Relay (可选)
1. 搭建开始前的准备
开始之前,我们需要准备:
(1) 一个域名 (比如 example.com , 或者 linux.do 这样的,后文中将用 linux.do 指代域名);
(2) 一台VPS或者独立服务器(必须要有独立的IPv4);
(3) 服务器为新安装的64位Linux系统,系统中不能安装任何的Nginx, 宝塔, 1Panel, Apache, 等等程序或者面板。
Mailu.io 运行时需要3 GB左右的内存,建议您的服务器拥有4 GB及以上的内存。如果您关闭了杀毒和防垃圾邮件功能(不推荐),那么1GB的服务器也可以运行。如果您需要启用全文索引功能,那么需要6 GB的内存。
如果您的服务器内存较小 (< 1 GB),那我推荐您使用 Mail-in-a-box 或者 Stalwart-Mailserver 来搭建您的邮件服务器。
另外,邮件服务器需要通过25端口进行邮件收发。有的主机商会阻断25端口,您需要发工单联系主机商解除25端口的阻断,否则会导致无法发信。您可以使用下面的命令判断25端口是否被阻断。
telnet smtp.aol.com 25
如果收到类似 220 smtp.mail.yahoo.com ESMTP ready 的回复,说明25端口正常,可以发信。如果超时,且防火墙没有禁止25端口,则说明25端口被阻断。
如果您使用第三方SMTP中继服务来进行发信(比如 Linux.do 使用了MXRoute 作为中继),那么25端口的开放就不是必须的。
2. 域名DNS的设置(第一部分)
DNS的配置对于邮件服务器来说至关重要。如果DNS配置错误,会产生诸多问题,比如收信掉信、发信进垃圾箱,等等。
DNS的配置分为两部分。第一部分需要在邮件服务器搭建开始之前设置,第二部分在邮件服务器搭建完毕之后设置。我们先来设置第一部分。
本文中,我将用域名 linux.do 来举例。您需要给服务器设置一个单独的子域名,作为邮箱服务器的服务器名,这里将假设为 mx.linux.do. 您也可以设置为 mail.linux.do. 假设我将要使用的邮件服务器IP地址为 12.34.56.78.
请在您的DNS服务提供商设置下面的DNS记录,请将IP地址和域名 linux.do 替换为您自己的IP地址和域名。
| 记录类型 | 前缀 | 解析地址 | 其他 |
|---|---|---|---|
| A | mx | 12.34.56.78 | |
| MX | @ | mx.linux.do | 优先级 10 |
| TXT | @ | v=spf1 a mx -all | |
| TXT | mx | v=spf1 a -all | |
| TXT | _dmarc | v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected] | 可以根据需要指定这个邮箱地址 |
| CNAME | mx.linux.do | 可选 | |
| CNAME | autoconfig | mx.linux.do | 可选 |
| CNAME | autodiscover | mx.linux.do | 可选 |
| CNAME | mta-sts | mx.linux.do | 可选 (参考第9节) |
| TXT | _mta-sts | v=STSv1; id=1 | 可选 (参考第9节) |
请注意,如果您使用Cloudflare作为您的DNS服务器,请关闭上述A记录的CF Proxy功能(把解析记录边上的小云朵关掉),否则会导致收不到邮件。
如果您的根域名(比如这里的 linux.do )没有指向任何地址(没有做网站),那您还需要给根域名设置一条任意的A记录或者ALIAS记录。您可以将域名指向您的邮件服务器地址,或者指向127.0.0.1。根域名的A记录是否有设定与部分收件服务器的垃圾邮件判定有关。
3. Reverse DNS的设置
Reverse DNS (rDNS) 是邮件服务器必不可少的配置。
Reverse DNS (rDNS)的作用是将IP地址指定为一个子域名。如果您的发信IP地址没有设置rDNS,发送的邮件将会被很多邮件服务器拒收。
rDNS需要在您的服务器的主机商处设置。几乎所有的国外主机商都提供了自助设置rDNS的服务,您需要在您的服务器后台设置,一般会出现在"Network"或者"IP Address"等地方。如果您找不到相关的设置,请发工单给主机商,他们会帮你设置好或者告诉你在哪里可以自助设置。
以我的服务器为例,我需要将邮件服务器地址 12.34.56.78 设置rDNS, 解析到 mx.linux.do.
当然,如果您使用第三方SMTP中继服务作为发信节点,那么就不需要给你自己的服务器设置rDNS了。
做好Reverse DNS设置后,我们就可以开始安装Mailu.io服务器了。
4. 生成Mailu.io服务器配置文件
我们提到过, Mailu.io 是基于docker compose来安装和维护的。
Mailu.io 网站上贴心地提供了一个 docker compose 配置文件生成器,我们直接用这个生成器来生成配置文件即可。
访问 https://setup.mailu.io/ 来到如下的页面。
在 Step 1 中,注意图中红框中的部分。依次填入安装路径 (本文使用的路径是 /opt/mailu ),根域名 (本文假设域名为 linux.do),管理员信箱 (我这里用的是 postmaster),并且选择自动的Let’s Encrypt证书。
您可以自由选择是否启用API. 如果启用了API,则请记录下生成的API key.
在 Step 2 中,选择您需要的功能。网页邮件客户端支持Roundcube和Snappymail, 您可以自由选择。功能列表中,除了最后一项Tika可以不用选,其他可以都选上。如果选择Tika,您的服务器需要额外2 - 3 GB的内存。
Step 3 需要配置服务器的相关网络。您需要填入服务器的外网IP。IPv6最好不要开启。最后一行的Public hostnames中,您需要填写所有需要生成SSL证书的地址(参考之前的DNS部分),且请将您的服务器名放在第一个。
比如,我这里填写的是mx.linux.do,mail.linux.do,mta-sts.linux.do,autodiscover.linux.do,autoconfig.linux.do. 请将 linux.do 换为您自己的域名。
全部填写完毕后,点击Setup Mailu,就会生成专门的下载页面,我们就可以开始安装了。
5. 安装 Mailu
用root账户登录您的服务器,首先设置主机名hostname.
hostnamectl set-hostname mx.linux.do
以Debian为例,安装需要的软件包。
apt-get update && apt-get upgrade -y
apt-get install fail2ban iptables ca-certificates curl wget -y
我们需要在服务器上安装Docker. 以Debian为例,您可以执行下面的命令。
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
接下来,按照之前生成的下载页面的提示来安装即可。
mkdir /opt/mailu
cd /opt/mailu
wget https://paste_your_link_here/docker-compose.yml
wget https://paste_your_link_here/mailu.env
docker compose -p mailu up -d
等待几分钟之后,就可以看到,所有的组件都成功运行了。
首次使用,您需要设置管理员密码。执行
docker compose -p mailu exec admin flask mailu admin postmaster linux.do PASSWORD
请将 linux.do 替换为您自己的域名,PASSWORD 替换为您自己的密码。
设置完毕后,就可以登录管理员界面了。
6. 域名DNS的设置(第二部分)
之前,我们已经设置好了邮件服务器需要的大部分DNS,包括MX, SPF, DMARC等。搭建好邮件服务器之后,我们还需要根据系统生成的DKIM密钥来配置DKIM记录。
进入服务器后台 https://mx.linux.do/ , 点击左侧Mail Domains,可以看到如下图的域名管理界面。
找到您的域名,选择Actions - Details,在右上角点击Generate Keys.
点击后,系统会生成DKIM key记录。您需要添加这条TXT记录进您的域名的DNS,用来DKIM签名。注意不要把DKIM 的内容复制错了,如果复制粘贴出错了,会导致DKIM验证失败,导致发送的邮件被拒收。
| 记录类型 | 前缀 | 解析地址 | 其他 |
|---|---|---|---|
| TXT | dkim._domainkey | v=DKIM1; k=rsa; p=MIIBscxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_your_DKIM_KEY_xxxxxxxxxxxxxxxxxDAQAB |
如果您需要支持各种客户端的自动配置,也可以按照页面的提示设置好SRV记录(不必须)。
如果您的域名支持DNSSEC, 那么也可以按照页面提示设置TLSA记录(不必须),这里不作过多叙述。
至此,所有的DNS记录全部添加完毕。
7. 添加用户与其他域名
全部设置完毕后,我们来添加用户。也可以添加其他的域名。
进入服务器后台,点击左侧Mail Domains,进入域名管理界面。在Manage模块中找到User, 可以新建邮箱用户。
您也可以添加别名和转发。在Manage模块中找到Alias,可以配置不同的邮箱别名,如下图。勾选Use SQL LIKE Syntax且输入%即可设置Catch-all.
如果您需要添加额外的域名,则同样可以在Mail Domains中添加新域名。每添加一个域名,都需要重复一遍第6部分,生成一个DKIM Key。生成完毕后,按照下面的格式添加DNS记录。
假设这个额外的域名是 example.com, 那么您需要给 example.com 做如下的解析。
| 记录类型 | 前缀 | 解析地址 | 其他 |
|---|---|---|---|
| MX | @ | mx.linux.do | 优先级 10;请注意,这个MX记录地址应该是和你的主域名设定是一样的。 |
| TXT | @ | v=spf1 a mx -all | |
| TXT | _dmarc | v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected] | 可以根据需要指定邮箱地址 |
| TXT | dkim._domainkey | v=DKIM1; h=sha256; k=rsa; s=email; p=Your_domain_key_xxxxxx | 根据系统生成的值来设定 |
8. 测试邮件收发
全部设定完毕,我们就可以开始使用啦。打开 https://mx.linux.do/ 登录刚刚新建的邮箱,给 mail-tester.com 发一封测试邮件。
可以看到,我们发送的邮件得到了10分满分。如果您按照我之前的步骤正确配置了DNS,您也应该可以得到10分满分。
有时候,mail-tester会因为邮件的内容太短之类的原因扣分,这是没关系的,您只要确保You’re properly authenticated部分全部合格即可。
至此,我们完成了 mailu.io 邮箱的搭建与配置,您可以正常开始使用了。接下来还有一些可选的设定,这里也作一些简要介绍。
9. 配置MTA-STS (可选)
Mailu.io 支持配置MTA-STS. 启用MTA-STS可以硬性要求发件方往你的邮件服务器发送邮件时使用TLS安全链接,这样可以在一定程度上提升邮箱的安全性,防止中间人攻击。
如果您已经做好了两条MTA-STS相关的DNS记录(参考第2节),那么我们可以在服务器中配置MTA-STS. 编辑文件/opt/mailu/overrides/nginx/mta-sts.conf,输入下面的内容。
location ^~ /.well-known/mta-sts.txt {
return 200 "version: STSv1
mode: enforce
max_age: 1296000
mx: mx.linux.do\r\n";
}
请将 linux.do 替换为您自己的域名。然后,重启docker.
cd /opt/mailu
docker compose restart
此时,访问 https://mta-sts.linux.do/.well-known/mta-sts.txt, 您应该能够看到类似下图的显示,说明配置成功。
10. 设置SMTP Relay (可选)
在很多情况下,使用稳定的第三方发信服务来作为SMTP中继服务器是较好的发信选择。这种情况下,我们就需要配置SMTP中继服务 (SMTP Relay).
和其他程序不同, Mailu.io 配置SMTP中继没有那么直观,需要更改docker compose的配置文件。
编辑文件 /opt/mailu/mailu.env, 找到RELAYHOST这一行,按照下面的格式填写中继服务器的地址、用户名、密码。
RELAYHOST=relay.server.com:587
RELAYUSER=relay_username
RELAYPASSWORD=relay_password
请替换为您自己的信息。保存退出后,重启mailu.
docker compose restart
这样,就设置好了SMTP Relay, 所有的发信都会通过中继服务器送出。
至此,我们使用Mailu.io程序,完成了个人邮件服务器的搭建,并正确配置了全部的DNS记录,可以实现正常收发信。如果您有任何疑问,欢迎留言讨论,我将尽量解答。












