【超详细新手教程】如何使用Docker搭建自己的邮件服务器

大家好,今天带来一期教程,如何快速用Docker搭建一个邮件服务器,轻松实现自己的域名邮箱系统。

很多人都听说,邮件服务器的搭建和使用非常麻烦。实际上,并非如此,我搭建、管理、使用了9年的自建团队域名邮箱了,从最早的Postfix手搓,到之后的MIAB,再到现在的Stalwart,收发都非常稳定,而且从来不进垃圾箱。

今天带来的是用Docker搭建的Poste.io一键域名邮箱,程序是由一个捷克的团队2014年就开始做了,非常适合新手。同样适合新手的还有Mail-in-a-box, 非常轻量,可以点这里查看相关的详细教程。如果您对邮件服务器已经非常了解,也可以考虑用高度定制化的Stalwart Mail Server, 可以点击这里查看相关教程。

1. 搭建开始前的准备

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

一个域名 (比如example.com, 或者linux.do这样的,后文中将用linux.do指代域名);

一台VPS或者独立服务器(必须要有独立的IPv4);

服务器为新安装的64位Linux系统,系统中不能安装任何的Nginx, 宝塔, 1Panel, Apache, 等等程序或者面板。

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

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

telnet smtp.aol.com 25

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

image612×301 17.2 KB

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:postmaster@linux.do; ruf=mailto:postmaster@linux.do

可以根据需要指定这个邮箱地址

请注意,如果您使用Cloudflare作为您的DNS服务器,您必须关闭上述记录的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.

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

4. 安装 Poste.io

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

hostnamectl set-hostname mx.linux.do

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

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

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

mkdir /opt/mail

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

docker run -d --restart=always \

--net=host \

-v /opt/mail:/data \

--name "mailserver" \

-h "mx.linux.do" \

-t analogic/poste.io

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

5. 配置Let’s Encrypt SSL证书

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

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

poste_1_initial_config-w794×615 33 KB

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

poste_2_certs-w952×745 62.3 KB

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

poste_3_certs_2-w887×621 57.6 KB

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

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

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

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

poste_4_generate_dkim-w1529×832 80.7 KB

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

poste_5_dkim_key-w1311×529 47.1 KB

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

记录类型

前缀

解析地址

TXT

s2025xxxxxxx._domainkey

k=rsa; p=MIIBscxxxxxxxxx_your_DKIM_KEY_xxxxxxxxxxxxDAQAB

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

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

poste_6_serverstatus-w1551×1036 124 KB

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

poste_7_connection_check-w1566×1005 99 KB

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

7. 添加用户与其他域名

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

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

poste_8_create_user-w1057×486 33 KB

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

poste_9_catchall-w852×556 38 KB

如果您需要添加额外的域名,则可以点击左侧Virtual domains, 在其中添加新域名。每添加一个域名,都需要重复一遍第5部分,生成一个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:postmaster@example.com; ruf=mailto:postmaster@example.com

可以根据需要指定邮箱地址

TXT

s2025xxxxxxx._domainkey

k=rsa; p=Your_domain_key_xxxxxx

根据系统生成的值来设定

8. 测试邮件收发

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

poste_10_test_email-w1174×719 83 KB

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

poste_11_mail-tester-w1166×1140 225 KB

至此,我们使用Poste.io程序,完成了个人邮件服务器的搭建,并正确配置了全部的DNS记录,可以实现正常收发信。如果您有任何疑问,欢迎留言讨论,我将尽量解答。如果想要转载,本文作者为香菇肥牛,原文链接为使用Poste.io搭建基于Docker的邮件服务器 - 香菇肥牛的博客, 转载请注明原文链接。谢谢!