使用Mailu.io在Linux系统中搭建邮件服务器

大家好!Mailu.io (https://mailu.io/) 是著名的基于Docker的邮件服务器管理系统,它的前身是著名的Poste.io系统。与Poste相比,Mailu的功能更加丰富,在服务器集群部署的环境中也有较好的可拓展性,但资源占用较高,且部署起来没有Poste那么直观。相对来说,Poste更适合小团队,而Mailu可以用于较大规模的团队和社区的部署。

值得一提的是,著名的中文论坛Linux.do的社区邮箱就是基于Mailu.io搭建的。5年前,我就介绍过Mailu.io邮箱服务器的搭建(https://qing.su/article/mail-hosting-with-mailu-io.html)。今天,我将介绍新版本Mailu在Linux系统中的单服务器搭建与配置。本文作者为香菇肥牛,原文链接为https://qing.su/article/mailu-io-docker-compose-setup-linux.html, 转载请注明原文链接。谢谢!


1. 搭建开始前的准备

开始之前,我们需要准备:(1) 一个域名 (比如example.com, 或者qing.su这样的,后文中将用qing.su指代域名);(2) 一台VPS或者独立服务器(必须要有独立的IPv4);(3) 服务器为新安装的64位Linux系统,系统中不能安装任何的Nginx, 宝塔, 1Panel, Apache, 等等程序或者面板

Mailu.io运行时需要3 GB左右的内存,建议您的服务器拥有4 GB及以上的内存。如果您关闭了杀毒和防垃圾邮件功能(不推荐),那么1 GB的服务器也可以运行。如果您需要启用全文索引功能,那么需要6 GB的内存。

另外,邮件服务器需要通过25端口进行邮件收发。有的主机商会阻断25端口,您需要发工单联系主机商解除25端口的阻断,否则会导致无法发信。您可以使用下面的命令判断25端口是否被阻断。

1
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的配置分为两部分。第一部分需要在邮件服务器搭建开始之前设置,第二部分在邮件服务器搭建完毕之后设置。我们先来设置第一部分。

本文中,我将用域名qing.su来举例。您需要给服务器设置一个单独的子域名,作为邮箱服务器的服务器名,这里将假设为mx.qing.su.  您也可以设置为mail.qing.su.  假设我将要使用的邮件服务器IP地址为88.88.88.88。

请在您的DNS服务提供商设置下面的DNS记录,请将IP地址和域名qing.su替换为您自己的IP地址和域名。

记录类型前缀解析地址其他
Amx88.88.88.88
MX@mx.qing.su优先级 10
TXT@v=spf1 a mx -all
TXTmxv=spf1 a -all
TXT_dmarcv=DMARC1; p=reject; rua=mailto:postmaster@qing.su; ruf=mailto:postmaster@qing.su可以根据需要指定这个邮箱地址
CNAMEmailmx.qing.su可选
CNAMEautoconfigmx.qing.su可选
CNAMEautodiscovermx.qing.su可选
CNAMEmta-stsmx.qing.su可选 (参考第9节)
TXT_mta-stsv=STSv1; id=1可选 (参考第9节)

 

请注意,如果您使用Cloudflare作为您的DNS服务器,请关闭上述记录的CF Proxy功能(把解析记录边上的小云朵关掉),否则会导致收不到邮件。

如果您的根域名(比如这里的qing.su)没有指向任何地址(没有做网站),那您还需要给根域名设置一条任意的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.qing.su.

当然,如果您使用第三方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 ),根域名 (本文假设域名为 qing.su),管理员信箱 (我这里用的是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.qing.su,mail.qing.su,mta-sts.qing.su,autodiscover.qing.su,autoconfig.qing.su请将qing.su换为您自己的域名

全部填写完毕后,点击Setup Mailu,就会生成专门的下载页面,我们就可以开始安装了。


5. 安装Mailu

用root账户登录您的服务器,首先设置主机名hostname.

1
hostnamectl set-hostname mx.qing.su

安装需要的软件包。

1
2
apt-get update && apt-get upgrade -y
apt-get install fail2ban iptables ca-certificates curl wget -y

我们需要在服务器上安装Docker.  以Debian为例,您可以执行下面的命令。

1
2
3
4
5
6
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

接下来,按照之前生成的下载页面的提示来安装即可。

1
2
3
4
5
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

等待几分钟之后,就可以看到,所有的组件都成功运行了。

首次使用,您需要设置管理员密码。执行

1
docker compose -p mailu exec admin flask mailu admin postmaster qing.su PASSWORD

请将qing.su替换为您自己的域名,PASSWORD替换为您自己的密码。

设置完毕后,就可以登录管理员界面了。


6. 域名DNS的设置(第二部分)

之前,我们已经设置好了邮件服务器需要的大部分DNS,包括MX, SPF, DMARC等。搭建好邮件服务器之后,我们还需要根据系统生成的DKIM密钥来配置DKIM记录。

进入服务器后台 https://mx.qing.su/, 点击左侧Mail Domains,可以看到如下图的域名管理界面。

找到您的域名,选择Actions – Details,在右上角点击”Generate Keys”.

点击后,系统会生成DKIM key记录。您需要添加这条TXT记录进您的域名的DNS,用来DKIM签名。注意不要把DKIM 的内容复制错了,如果复制粘贴出错了,会导致DKIM验证失败,导致发送的邮件被拒收。

记录类型前缀解析地址其他
TXTdkim._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.qing.su优先级 10;请注意,这个MX记录地址应该是和你的主域名设定是一样的。
TXT@v=spf1 a mx -all
TXT_dmarcv=DMARC1; p=reject; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com可以根据需要指定邮箱地址
TXTdkim._domainkeyv=DKIM1; h=sha256; k=rsa; s=email; p=Your_domain_key_xxxxxx根据系统生成的值来设定

8. 测试邮件收发

全部设定完毕,我们就可以开始使用啦。打开 https://mx.qing.su/ 登录刚刚新建的邮箱,给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,输入下面的内容。

1
2
3
4
5
6
location ^~ /.well-known/mta-sts.txt {
return 200 "version: STSv1
mode: enforce
max_age: 1296000
mx: mx.qing.su\r\n"
;
}

请将qing.su替换为您自己的域名。然后,重启docker.

1
2
3
cd /opt/mailu
docker compose down
docker compose up -d

此时,访问 https://mta-sts.qing.su/.well-known/mta-sts.txt, 您应该能够看到类似下图的显示,说明配置成功。


10. 设置SMTP Relay (可选)

在很多情况下,使用稳定的第三方发信服务来作为SMTP中继服务器是较好的发信选择。这种情况下,我们就需要配置SMTP中继服务 (SMTP Relay).

和其他程序不同,Mailu.io配置SMTP中继没有那么直观,需要更改docker compose的配置文件。

编辑文件 /opt/mailu/mailu.env, 找到RELAYHOST这一行,按照下面的格式填写中继服务器的地址、用户名、密码。

1
2
3
RELAYHOST=relay.server.com:587
RELAYUSER=relay_username
RELAYPASSWORD=relay_password

请替换为您自己的信息。保存退出后,重启mailu.

1
2
docker compose down
docker compose up -d

这样,就设置好了SMTP Relay, 所有的发信都会通过中继服务器送出。


至此,我们使用Mailu.io程序,完成了个人邮件服务器的搭建,并正确配置了全部的DNS记录,可以实现正常收发信。如果您有任何疑问,欢迎留言讨论,我将尽量解答。

本文作者为香菇肥牛,原文链接为https://qing.su/article/mailu-io-docker-compose-setup-linux.html, 转载请注明原文链接。谢谢!

Leave a Comment