本文作者为香菇肥牛, 原文链接为https://qing.su/article/122.html, 未经允许不得转载, 谢谢.
本次我将介绍如何使用国外已经发展较为成熟的Mail-in-a-Box套件搭建专业的私有邮件服务器, 并试图将其作为邮件中继服务器, 让第二台服务器使用此服务器发信. 很遗憾, 对于这样一个强大成熟的邮件服务器套件, 国内尚无任何的介绍和使用.
第一部分 邮件服务器的搭建
Mail-in-a-Box套件的安装条件如下: 1, 一个域名; 2, 一个VPS或独立服务器, 内存要求768MB以上, 系统必须是Ubuntu 14.04 LTS 64bit; 3, Mail-in-a-Box安装过后不能和其他任何应用类程序 (比如MySQL, PHP, Apache等) 共存, 因此我建议您在安装前重装系统; 4, 有部分国人垃圾主机商喜欢使用一种垃圾的XenSystem VPS控制面板, 该面板有一个极其傻逼的特性是会在重启的时候重置主机名和hosts文件, 这对于任何一个邮件服务器来说都是灾难性的, 因此不能在使用XenSystem控制面板的VPS上使用这个套件. 5, 因为未知的原因,OVH的服务器无法安装Mail-in-a-Box. 确定您的服务器满足了以上条件之后, 我们就开始操作. 教程中我们以12.34.56.78代替您的IP地址, 以mail.example.com代替您的主机名.
1, 主机名的设置
拿到一个新的VPS或者独立服务器之后要设置主机名,这是使用主机服务的良好习惯,是所有Linux服务器用户的基本功,也是使用任何邮件类服务所必须的操作。一个合格的主机名应当具有这样的格式:
1 | xxx.example.com |
有些服务器支持example.com这类的主机名,不过对于邮件服务器,请务必设置成xxx.example.com这种格式。在这里我们以mail.example.com为例介绍一下怎样设置主机名(hostname).
首先,修改系统内的自解析文件。编辑: /etc/hosts 在文件中添加一行(或者修改已有的行):
1 | 12.34.56.78 mail.example.com mail |
然后在SSH中执行:
1 2 | echo 'mail' > /etc/hostname hostname -F /etc/hostname |
这时,主机名应该设置完毕了。我们执行hostname命令,应该能看到”mail” (不含引号), 执行hostname -f命令,应该能看到”mail.example.com” (不含引号). 如果这里没有设置正确(比如,如果你输入hostname命令检查的时候看到的仍然是长主机名mail.example.com, 说明没有设置正确),请不要继续。
2, 域名的解析
域名的解析是重要的, 尤其是对于一个邮件服务器. Mail-in-a-Box支持DNS的自动设置, 因此我强烈建议您将您的域名交给您的服务器来解析, 而不是用注册商或其他第三方的解析服务. 如果您想详细了解DNS设置在配置邮件服务器中的作用, 后面我会详细介绍一下域名的各项邮件解析记录对于邮件的收发产生了怎样的作用.
第一步,我们需要注册两个NS服务器。请到您的域名注册商处,注册两个NS服务器(中国的好多傻逼注册商新建NS服务器居然还要收费,国外都是免费的,告别国产保平安),分别为ns1.mail.example.com和ns2.mail.example.com且指向您的VPS/独服的IP地址。
第二步,记下您的域名当前的解析记录,然后将您的域名的DNS服务器设置为我们刚才新注册的两个地址。
第三步,添加Reverse DNS, 将12.34.56.78解析到mail.example.com. 国外VPS用户请在您的VPS控制面板中自行设置Reverse DNS, 国外独服用户请您提交工单申请设置Reverse DNS. 国内主机商都是傻逼,不支持Reverse DNS.
3, 安装Mail-in-a-Box
1 2 | wget https://mailinabox.email/setup.sh sh setup.sh |
安装过程中管理员邮箱请按照xxx@example.com的格式输入; 系统的主机名请输入mail.example.com. 其他的设置默认即可。
第二部分,使用Mail-in-a-Box邮件服务器进行邮件中继
1, 邮件服务器与邮件中继的工作机制
在介绍邮件中继服务器之前,我们有必要介绍一下邮件服务器的工作流程。
一封邮件从诞生到传输到投递,大致需要经过三个主要部件: MUA, MTA, MDA. MUA全称是Mail User Agent, 即邮件用户代理,它的作用是将用户写好的邮件传送给MTA, Mail Transfer Agent, 即邮件中转代理. MTA在接到邮件后,判断该邮件的收件人是否在本域;若在本域,则转交MDA (Mail Delivery Agent) 投递至目标用户的收件箱;若收件人不在本域,则转发至目标用户所在域的MTA, 并进而传达给该域的MDA进行投递。因此我们可以作这样的归纳,即一般情况下A域MTA扮演的角色有二: (1) 接受A域MUA的邮件并传给B域MTA; (2) 接受B域 (或A域) MTA的邮件并传给A域MDA.
然而还有一种特殊的情况是这样的: A域MTA接受B域MUA的邮件并传给C域MTA. 这很有意思——邮件服务器A的MTA既接收了外域MUA传来的邮件,又把收到的邮件投递到另一外域的邮箱。这种情况我们即称为邮件中继。通常,如果我们已经有了一台邮件服务器,其他服务器就可以通过这台邮件服务器进行中继发送而无需再额外搭建邮件服务了。
2, 配置和使用邮件中继服务器
我们仍以Mail-in-a-Box邮件服务器为例,讲解邮件中继服务器的使用。按照第一部分的操作步骤,我们假设您已经成功安装好了Mail-in-a-Box服务器 (称为A), 那么A已是现成可用的邮件中继服务器。在这里扮演中继角色的, 是A服务器上面的Postfix. 在A上新建一个合格的用户,比如test@example.net密码为pass, 下面我们配置另一台服务器B (主机名: xxx.example.net) 以期通过A进行邮件中继发送。
首先,我们在B服务器上安装postfix. 执行:
1 | apt-get install postfix |
需要注意的是,我们并不将B服务器上的postfix作为MTA使用,只是作为一个MUA, 因此我们在安装时需要选择Satellite System.
安装完毕后,需要手动配置Postfix. 新建文件/etc/postfix/credential, 内容为:
1 | mail.example.com test@example.net : pass |
给该文件设权,执行:
1 | chmod 600 /etc/postfix/credential |
然后在文件/etc/postfix/main.cf尾部添加下面语句:
1 2 3 4 5 6 7 8 9 10 11 | mydestination = smtp_tls_security_level = verify smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/credential smtp_sasl_tls_security_options = |
在SSH中执行:
1 | postmap /etc/postifx/credential && service postfix reload |
然后我们配置SSL. 将A服务器的/home/user-data/ssl/ssl_certificate.pem拷贝至B服务器相同路径并复制到/usr/local/share/ca-certificates/ssl_certificate.crt, 执行
1 | update-ca-certificates |
这样,B服务器就会通过已安装好Mail-in-a-Box的A服务器发信了(你需要安装SMTP服务器比如Dovecot/Exim/Mailman或者使用系统mail/mailx等命令发信).
第三部分,邮件服务器对域名解析的要求
很多新手(甚至很多主机商本身)都不知道,一个邮件服务器对于域名解析的要求有多严苛。大部分人,只知道搭建域名邮箱需要添加MX记录。少部分人知道添加SRV记录。还有很多重要的DNS记录,比如Reverse DNS, DKIM, DNSSEC, TLSA等等,鲜为人知。殊不知,发送的邮件会被很多的邮箱直接标记为垃圾邮件,其重要原因就是没有设置好DNS解析。
这里,我简要介绍一下一个合格的域名邮箱对于域名解析的要求。
1, MX记录。
MX记录大家都知道,我这里也不再啰嗦。但必须要提及的一个重要常识是同域名的MX记录和CNAME记录一般不能共存。准确地说,是CNAME记录和其他所有类型记录 (DNSSEC除外) 一般不能共存。有部分CDN厂商还有很多傻逼国内主机商,他们的虚拟主机不提供IP绑定而是让你把你的域名CNAME到一个子域名上面,这时如果你再用同样的域名设置MX记录用企业邮箱,那么你的邮箱收信将会经常掉信。这是CNAME记录的解析方式所决定的。因此,尽管部分DNS解析服务提供商支持同域名CNAME与MX解析,请不要这么做,否则你的MX记录将可能无效。
2, Reverse DNS
国人如果没有用过国外主机商的产品,基本不会知道这是什么东西。因为所有国内的主机商都不支持Reverse DNS. Reverse DNS将IP地址解析到邮箱服务器主hostname上,旨在提供一种途径,使得收件方能够追溯邮件的来路。若rDNS未设置,将被诸多邮件系统标记为可疑。正确设置rDNS可以将SpamAssassin的Spam Score评估降低0.3分左右。
3, DKIM, DMARC, SPF
同样的,国内的傻逼企业邮箱服务提供商不会告诉你怎样设置DKIM和DMARC的。这些DNS记录旨在提供一种途径,使得收件方能够知道是“你”或者说是从“这台服务器”发送了这封邮件,而不是由其他人冒用你的地址发送的邮件。正确设置这些记录可以将SpamAssassin评估分降低0.5~1.0左右。
4, DNSSEC
说多了都是泪。有次我打电话给万网(中国最大的虚拟主机和互联网域名服务提供商)的客服问能不能设置com域名的DNSSEC记录。结果客服一脸懵逼:“那是什么?”忍不住再骂一遍国产主机和域名服务商都是傻逼。DNSSEC记录需要在域名注册商处设置,它提供了额外的验证途径,以提高来自该域邮件的可信度。
综上,本文介绍了使用技术成熟的MIAB套件搭建私有邮件服务器和邮件中继服务器的方法、邮件服务器的工作原理及其对域名DNS记录的要求。若有任何疑问,或在安装使用过程中遇到报错,欢迎在本文下方留言和我讨论。
本文作者为香菇肥牛, 原文链接为https://qing.su/article/122.html, 未经允许不得转载, 谢谢.
这样起码一台做好域名解析就行了,不用每台都做,挺好
是呀~
资源要求这么高?我还想再64MB的破vps上搭一个自用呢
64mb很可以
第一次来,你的博客头像很炫酷啊
谢谢~
如果只是简单的邮件收发 是否可以用这套系统 不发垃圾邮件 只不过域名比较多的情况下 是否可以用这套系统
可以的,这套邮件系统除了在磁盘配额上功能比较有限,其他的功能和可靠性都完爆市面上其他的邮件系统
存在一个问题 我想要添加多个域名WEB登陆 不知道从哪里下手
这需要编辑/etc/nginx/conf.d/local.conf文件,按里面现成的实例复制粘贴即可,编辑完后给该文件chattr +i并service nginx reload.
收藏备用。
您 的文章很好想转发到weibo上,求问找不到转发的按钮阿。
感谢您的支持,回头我就来弄个转发的插件~
博主,这个软件想装centos可以吗,我的vps习惯centos7
不可以的,必须Ubuntu 14.04
能推荐一下适合邮件服务器的vps嘛?想尝试下MIAB. 谢谢!
你好,只要没有限制端口的服务器都是可以的,比如Linode $10/月的VPS就不错。
再请教! 阿里 万网的域名能做 DNSSEC 吗?
目前是不可以的。
请问! MIAB 邮件归档有吗? 就是所有邮件进出都能有备份
方便查阅!
MIAB是定期增量备份的,所有邮件都有备份
您必须选择Ubuntu 18.04 x64 (server edition)
看官方手册已经支持这个版本了!
请教!
云服务器硬盘空间怎么用呢,比如就10G或则20G 默认设置就能使用整个空间吗,还是要另外设置?
把硬盘全部空间分配给”/”目录即可
我又来了! 新年好!
假期抽空正式搭建了miab,状态检查除了第二条ssh server 提醒(这个没事)。
其它都是ok的, 邮箱健康检查是10/10 算是满分了,通过web发送,接收一切正常。
但是一直卡在 客户端,比如foxmail 只能接收,不能发送。
imap 模式:
Protocol/Method IMAP ,Mail server box.xxxx.com ,IMAP Port 993 ,IMAP Security SSL or TLS
SMTP Port 587 ,SMTP Security STARTTLS (“always” or “required”, if prompted)
错误提示 :
错误信息::服务器不支持ssl,请检查服务器配置, errorCode: 1
改用25端口: 错误信息:554 5.7.1 : Relay access denied
改用 pop
也是无法发送 貌似说 我家里电脑ip(adsl)在 spam里面啥的,改用单位固定ip 也是这样!
我想着是否可以添加 自身的域名到白名单,避开spam和灰名单,博主有啥好的建议吗?
非常感谢!
再来请教下!
maib 能不能转发所有进出邮件到指定账户,比如第三方邮件账户(也是自建的)?
解决了! 谢谢
你好,poste可以设置邮件中继吗?怎么设置