大家好!Mail-in-a-box 是著名的个人邮件服务器系统。它包含了域名邮箱系统的全部功能包括:邮件收发(postfix / dovecot), 网页邮件(roundcube),日历与联系人管理,垃圾邮件与杀毒,维护与备份。同时,Mail-in-a-box支持各类高级邮件服务器功能,包括灰名单, Z-Push, 权限管理, DNS管理,MTA-STS, AutoConfig, 中继服务器,Catch-all信箱, Sieve Script等等。
邮件服务器的搭建与维护相比与其他服务来说困难得多,如果你以前没有搭建过类似的服务,那Mail-in-a-box是非常好的选择,因为它能够全自动地帮你处理好所有的各项组件。
9年前,我曾经介绍过Mail-in-a-box在Ubuntu 14.04 LTS系统中的搭建。今天,我将介绍新版本Mail-in-a-box在Ubuntu 22.04 LTS系统中的搭建。本文作者为香菇肥牛,原文链接为https://qing.su/article/mail-in-a-box-external-dns-ubuntu-22.html, 转载请注明原文链接。谢谢!
1. 搭建开始前的准备
开始之前,我们需要准备:(1) 一个域名 (比如example.com, 或者qing.su这样的,后文中将用qing.su指代域名);(2) 一台VPS或者独立服务器(必须要有独立的IPv4).
Mail-in-a-box (下文中简称MIAB)的最新版本仅支持Ubuntu 22.04 LTS操作系统,您需要将服务器重装为该操作系统。请勿在服务器上安装任何其他的服务,比如Nginx, 宝塔面板, Apache, 1panel面板,各种docker, 等等。任何类似的服务或者组件都将导致邮件服务器的安装失败。
MIAB在运行时会占用400 MB左右的内存,因此服务器至少需要512 MB内存。建议您的服务器拥有1 GB的内存,这样不用担心内存不够的问题。
另外,邮件服务器需要通过25端口进行邮件收发。有的主机商会阻断25端口,您需要发工单联系主机商解除25端口的阻断,否则会导致无法发信。您可以使用下面的命令判断25端口是否被阻断。
1 | telnet smtp.aol.com 25 |
如果收到类似 220 smtp.mail.yahoo.com ESMTP ready 的回复,说明25端口正常,可以发信。如果超时,且防火墙没有禁止25端口,则说明25端口被阻断。
如果您有OVH 0.97, Netcup 1欧之类的服务器,就非常适合用来做邮件服务器。其他大部分国外VPS也都可以(GCP/AWS/Azure不行)。国内的服务器不支持做邮件服务器,会直接被阻断。
2. 域名DNS的设置(第一部分)
DNS的配置对于邮件服务器来说至关重要。如果DNS配置错误,会产生诸多问题,比如收信掉信、发信进垃圾箱,等等。
Mail-in-a-box自带了DNS的托管功能,使用Glue record的方式用邮件服务器本身来解析。虽然这样部署起来非常简单,但并不建议这样操作,因为缺少任何相关的冗余。而且自带的解析不支持DMARC聚合报告收件邮箱的指定。本教程将使用外部DNS服务器来配置DNS。
DNS的配置分为两部分。第一部分需要在邮件服务器搭建开始之前设置,第二部分在邮件服务器搭建完毕之后设置。我们先来设置第一部分。
本文中,我将用域名qing.su来举例。您需要给服务器设置一个单独的子域名,这里将假设为mx.qing.su. 您也可以设置为mail.qing.su. 假设我将要使用的邮件服务器IP地址为88.188.88.88。
请在您的DNS服务提供商设置下面的DNS记录,请将IP地址和域名qing.su替换为您自己的IP地址和域名。
记录类型 | 前缀 | 解析地址 | 其他 |
A | mx | 88.188.88.88 | |
MX | @ | mx.qing.su | 优先级 10 |
TXT | @ | v=spf1 a mx -all | |
TXT | mx | v=spf1 a -all | |
TXT | _dmarc | v=DMARC1; p=reject; rua=mailto:postmaster@qing.su; ruf=mailto:postmaster@qing.su | 可以根据需要指定这个邮箱地址 |
CNAME | mta-sts | mx.qing.su | 可选 |
CNAME | autodiscover | mx.qing.su | 可选 |
CNAME | autoconfig | mx.qing.su | 可选 |
请注意,如果您使用Cloudflare作为您的DNS服务器,您必须关闭上述记录的CF Proxy功能(把解析记录边上的小云朵关掉),否则会导致收不到任何邮件。
如果您的根域名(比如这里的qing.su)没有指向任何地址(没有做网站),那您还需要给根域名设置一条任意的A记录或者ALIAS记录。您可以将域名指向您的邮件服务器地址,或者指向127.0.0.1。根域名的A记录是否有设定与部分收件服务器的垃圾邮件判定有关。请注意,根域名不能设置任何CNAME记录,否则会和MX记录冲突导致收不到邮件。如果您必须将根域名解析到另一个域名(比如有些CDN有这样的要求),您需要设置ALIAS记录或者CNAME Flattening,而不是CNAME记录。
3. Reverse DNS的设置
Reverse DNS (rDNS) 是邮件服务器必不可少的配置。Reverse DNS (rDNS)的作用是将IP地址指定为一个子域名。如果您的发信IP地址没有设置rDNS,发送的邮件将会被很多邮件服务器拒收。
rDNS需要在您的服务器的主机商处设置。几乎所有的国外主机商都提供了自助设置rDNS的服务,您需要在您的服务器后台设置,一般会出现在”Network”或者”IP Address”等地方。如果您找不到相关的设置,请发工单给主机商,他们会帮你设置好或者告诉你在哪里可以自助设置。
以我的服务器为例,我需要将邮件服务器地址88.188.88.88 设置rDNS, 解析到 mx.qing.su.
做好Reverse DNS设置后,我们就可以开始安装Mail-in-a-box组件了。
4. 安装Mail-in-a-box
用root账户登录您的服务器,首先设置主机名hostname. 请将下面的qing.su替换为您自己的域名。
1 | hostnamectl set-hostname mx.qing.su |
设置好后,执行下面的指令,一键安装Mail-in-a-box.
1 | curl -s https://mailinabox.email/setup.sh | bash |
安装过程中,需要输入管理员邮箱和主机名。我们这里设置admin@qing.su作为管理员邮箱,mx.qing.su作为主机名。
一键安装包还会询问您的时区,您可以自行设定,或者用默认的也没有关系。如果您有任何疑问,都可以参考下面的SSH录制的轻视频,里面有全部流程。整个安装包需要10 – 20 分钟左右(其中SpamAssassin那里可能会卡好几分钟,请耐心等候)。
等待安装完毕后,就可以登录管理后台,进行剩下的设定了。
5. 配置Let’s Encrypt SSL证书
现代邮件服务器的邮件收发均需要TLS证书支持。Mail-in-a-box可以进行自动的Let’s Encrypt SSL证书的部署和自动续期。
我们访问https://88.188.88.88/admin (替换为您自己的服务器地址或者主机名,第一次访问需要手动允许,后面安装好证书之后就不需要了),输入安装过程中新建的管理员邮箱和密码,然后登录。
点击顶部System – TLS (SSL) Certificates,进入下图的界面。我们点击”Provision”, 如果您域名的DNS设置正确,系统就会自动帮我们申请和部署Let’s Encrypt证书了。
等几分钟后,系统会提示部署完毕。此时我们已经可以用我们的域名https://mx.qing.su/admin来访问系统后台了。此时再回到这个页面,就可以看到,我们的域名已经部署好了安全证书。
6. 域名DNS的设置(第二部分)
之前,我们已经设置好了邮件服务器需要的大部分DNS,包括MX, SPF, DMARC等。搭建好邮件服务器之后,我们还需要根据系统生成的DKIM密钥来配置DKIM记录。
在服务器后台 https://mx.qing.su/admin, 点击顶部 System – External DNS, 找到类似下面红框里的记录。请在您的DNS服务提供商这里设置一条同样的DKIM记录。
注意不要把DKIM 的内容复制错了,如果复制粘贴出错了,会导致DKIM验证失败,导致发送的邮件被拒收。
记录类型 | 前缀 | 解析地址 | 其他 |
TXT | mail._domainkey | v=DKIM1; h=sha256; k=rsa; s=email; p=MIIBxxx_your_DKIM_KEY_xxxDAQAB |
如果您之前配置了mta-sts的CNAME记录,那么您也需要再添加一条MTA-STS TXT记录。您可以在系统后台External DNS这一页的后面看到一条类似下面的记录。
请在您的DNS服务提供商这里设置一条同样的STSv1记录,以及配套的TLSRPTv1记录。
记录类型 | 前缀 | 解析地址 | 其他 |
TXT | _mta-sts | v=STSv1; id=JEAfQ4v6jyMvxwErkTmg | (如果之前没有添加mta-sts的CNAME, 那也不需要添加这条TXT.) |
TXT | _smtp._tls | v=TLSRPTv1; rua=mailto:postmaster@qing.su | (如果之前没有添加mta-sts的CNAME, 那也不需要添加这条TXT;邮箱地址可以自行指定) |
至此,所有的DNS记录全部添加完毕。如果您对邮件服务器颇有研究,您还可以再添加相关的SRV和TLSA记录等等,以及设置域名DNSSEC. 对于大多数用户来说,这些记录对邮件收发没有什么影响,就不必再折腾了。
此时,我们来做一遍最后的检查,看一下我们的邮件服务器是否配置正确。点击顶部System – Status Check, 查看一下您的配置是否有报错。请重点参考我下面用蓝框框起来的部分,不能有报错。粉色框是可选的配置,如果有报错也不会影响收发。没有框起来的部分则不用理会。
这样,Mail-in-a-box就全部设置完毕了。
7. 添加用户与其他域名
全部设置完毕后,我们来添加用户。也可以添加其他的域名。
点击顶部Mail & Users – Users,就来到了下面的界面。我们可以直接添加新用户。
如果您需要添加额外的域名,就在新用户里直接添加即可;如果系统检测到这个用户的邮箱不存在系统里,就会自动添加这个域名。
请注意,添加新域名之后,您也需要为这个新域名配置DNS. 假设这个额外的域名是example.com, 那么您需要给example.com做如下的解析。
记录类型 | 前缀 | 解析地址 | 其他 |
MX | @ | mx.qing.su | 优先级 10;请注意,这个MX记录地址应该是和你的主域名设定是一样的。 |
TXT | @ | v=spf1 a mx -all | |
TXT | _dmarc | v=DMARC1; p=reject; rua=mailto:postmaster@example.com; ruf=mailto:postmaster@example.com | 可以根据需要指定邮箱地址 |
CNAME | mta-sts | mx.qing.su | 可选 |
CNAME | autodiscover | mx.qing.su | 可选 |
CNAME | autoconfig | mx.qing.su | 可选 |
TXT | mail._domainkey | v=DKIM1; h=sha256; k=rsa; s=email; p=Your_domain_key_xxxxxx | 根据系统生成的值来设定 |
TXT | _mta-sts | v=STSv1; id=xxxxxxxx | 可选(根据系统生成的值来设定) |
TXT | _smtp._tls | v=TLSRPTv1; rua=mailto:postmaster@example.com | 可选(可以根据需要指定邮箱地址) |
如果您需要添加Catch-all邮箱(将域名下所有邮箱前缀的邮件转发到某一个邮箱),您可以在Mail & User – Alias中设定。
8. 测试邮件收发
全部设定完毕,我们就可以开始使用啦。打开 https://mx.qing.su/mail 登录刚刚新建的邮箱,给mail-tester.com发一封测试邮件。
可以看到,我们发送的邮件得到了稳稳的10分满分。如果您按照我之前的步骤正确配置了DNS,您也应该可以得到10分满分。有时候,mail-tester会因为邮件的内容太短之类的原因扣分,这是没关系的,您只要保证图中蓝框中的Authentication部分全部合格即可。
我们再用任意一个外部邮箱给自己新建的域名邮箱发一封邮件,可以看到,邮件接收没有问题。
至此,我们使用Mail-in-a-box程序,完成了个人邮件服务器的搭建,并正确配置了全部的DNS记录,可以实现正常收发信。如果您有任何疑问,欢迎留言讨论,我将尽量解答。
本文作者为香菇肥牛,原文链接为https://qing.su/article/mail-in-a-box-external-dns-ubuntu-22.html, 转载请注明原文链接。谢谢!
1 thought on “使用Mail-in-a-box在Ubuntu 22.04中搭建邮件服务器”