使用Poste.io搭建基于Docker的邮件服务器

大家好!Poste 是著名的基于Docker的邮件服务器管理系统。这套程序由捷克团队Analogic开发,从2014年起,被邮件服务器用户广泛使用。它使用了基于NodeJS的Haraka作为MTA, 支持高通量的邮件收发。同时使用传统的Dovecot作为MUA, 同时支持网页邮件(Roundcube),日历与联系人管理,垃圾邮件与杀毒, Sieve Script等功能。

由于Poste.io是基于Docker的,因此它的安装和运维比较方便,也比较时候邮件服务器新手使用。7年前,我就介绍过Poste的搭建。今天,我将介绍新版本Poste在Linux系统中的搭建与配置。本文作者为香菇肥牛,原文链接为https://qing.su/article/poste-io-with-docker-on-linux.html, 转载请注明原文链接。谢谢!


1. 搭建开始前的准备

开始之前,我们需要准备:

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

Poste.io运行时需要1.8 GB左右的内存,所以建议您的服务器拥有2 GB及以上的内存。如果您关闭了杀毒和防垃圾邮件功能,那么1GB的服务器也可以运行。

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

1
telnet smtp.aol.com 25

如果收到类似 220 smtp.mail.yahoo.com ESMTP ready 的回复,说明25端口正常,可以发信。如果超时,且防火墙没有禁止25端口,则说明25端口被阻断。


2. 域名DNS的设置(第一部分)

DNS的配置对于邮件服务器来说至关重要。如果DNS配置错误,会产生诸多问题,比如收信掉信、发信进垃圾箱,等等。

DNS的配置分为两部分。第一部分需要在邮件服务器搭建开始之前设置,第二部分在邮件服务器搭建完毕之后设置。我们先来设置第一部分。

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

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

记录类型前缀解析地址其他
Amx12.34.56.78 
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可以根据需要指定这个邮箱地址

请注意,如果您使用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.

做好Reverse DNS设置后,我们就可以开始安装Poste.io组件了。


4. 安装Poste.io

用root账户登录您的服务器,首先设置主机名hostname. 请将qing.su替换为您自己的域名。

1
hostnamectl set-hostname mx.qing.su

设置好后,执行下面的指令,安装Docker.

1
sh <(curl -fsSL https://get.docker.com)

新建一个文件夹用于存储所有的数据。

1
mkdir /opt/mail

然后,就可以用Docker一键安装了。请将qing.su替换为您自己的域名。

1
2
3
4
5
6
docker run -d --restart=always \
    --net=host \
    -v /opt/mail:/data \
    --name "mailserver" \
    -h "mx.qing.su" \
    -t analogic/poste.io

等待5分钟左右安装完毕后,就可以登录管理后台,进行剩下的设定了。


5. 配置Let’s Encrypt SSL证书

现代邮件服务器的邮件收发均需要TLS证书支持。Poste.io可以进行自动的Let’s Encrypt SSL证书的部署和自动续期。

我们访问https://mx.qing.su/admin (替换为您自己的服务器地址或者主机名,第一次访问需要手动允许,后面安装好证书之后就不需要了),系统会引导输入hostname新建管理员用户名和密码。我这里填入mx.qing.su作为hostname, 然后设置admin@qing.su作为管理员账户。

点击左侧System settings – TLS Certificate,进入下图的界面。

如果您的域名已经解析到服务器,则点击issue free letsencrypt.org certificate, 勾选enabled, 然后点击save changes.  如下图。

等几分钟后,系统会提示部署完毕。此时我们已经可以用我们的域名https://mx.qing.su/admin来访问系统后台了。此时再刷新登录管理后台,就可以看到,我们的域名已经部署好了安全证书。


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

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

在服务器后台 https://mx.qing.su/admin, 点击左侧Virtual domains, 选择您的域名,可以看到如下图的域名管理界面。在DKIM部分点击”create a new key”.

点击后,系统会生成如下图的DKIM key记录。您需要添加这条TXT记录进您的域名的DNS,用来DKIM签名。

注意不要把DKIM 的内容复制错了,如果复制粘贴出错了,会导致DKIM验证失败,导致发送的邮件被拒收。

记录类型前缀解析地址其他
TXTs2025xxxxxxx._domainkeyk=rsa; p=MIIBscxxxxxxxxx_your_DKIM_KEY_xxxxxxxxxxxxDAQAB 

至此,所有的DNS记录全部添加完毕。

此时,我们来做一遍最后的检查,看一下我们的邮件服务器是否配置正确。点击左侧Server status,进入服务器状态页面。这里可以查看服务器的各个组件是否正常运行。

再点击顶部Connection diagnostics. – Status Check, 查看一下服务器的各个组件的连通性。这个页面的所有条目都应该有绿勾。

这样,您的Poste.io邮件服务器就全部设置完毕了。


7. 添加用户与其他域名

全部设置完毕后,我们来添加用户。也可以添加其他的域名。

点击左侧Email accounts,就来到了下面的界面。我们可以点击Create a new email添加新用户。

您也可以添加别名和转发。点击Create a redirect (alias)可以配置Catch-all邮箱,如下图。

如果您需要添加额外的域名,则可以点击左侧Virtual domains, 在其中添加新域名。每添加一个域名,都需要重复一遍第5部分,生成一个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可以根据需要指定邮箱地址
TXTs2025xxxxxxx._domainkeyk=rsa; p=Your_domain_key_xxxxxx根据系统生成的值来设定

8. 测试邮件收发

全部设定完毕,我们就可以开始使用啦。打开 https://mx.qing.su/ 登录刚刚新建的邮箱,给mail-tester.com发一封测试邮件。

可以看到,我们发送的邮件得到了10分满分。如果您按照我之前的步骤正确配置了DNS,您也应该可以得到10分满分。有时候,mail-tester会因为邮件的内容太短之类的原因扣分,这是没关系的,您只要保证图中蓝框中的Authentication部分全部合格即可。


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

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

Leave a Comment