[叶子]在自己的服务器上搭建自己的邮箱

前言:

这可能是我写的文章中为数不多的有全程完整截图的、不是在完工后再来回忆的文章,但并不是因为我一开始就打算写这篇教程,而是搭建邮箱这玩意我做了”双份“——先在我自己的服务器上面给我自己搭建,确认成功了、各项功能都正常了我才在 @gaoice 的服务器上面搭建,并同时边搭建边截图,之所以我写这个,是因为我在给自己的服务器搭建的时候走了太多的弯路,过程太曲折,以至于在完工之后我觉得有必要写这么一篇文章来记录这个过程。但是我并不打算在这篇文章里面详细讲我走的弯路的具体情况,这篇文章主要还是讲搭建这件事本身。

废话不多说了,现在开始正文部分。宝塔面板上面本来有一个邮局插件是可以用于搭建邮箱的,但奈何它总能给我整出点新花样,我便只好选择放弃它了。首先要把端口给空出来,下面贴出poste官方文档里面安装指导篇给出的需要的端口列表,我直接把原文贴了过来,如果看不懂请自行找翻译工具

Ports which are opened by poste.io:

Port numberPurpose
25SMTP – mostly processing incoming mails
80HTTP – redirect to https (see options) and authentication for Let’s encrypt service
110POP3 – standard protocol for accessing mailbox, STARTTLS is required before client auth
143IMAP – standard protocol for accessing mailbox, STARTTLS is required before client auth
443HTTPS – access to administration or webmail client
465SMTPS – Legacy SMTPs port
587MSA – SMTP port used primarily for email clients after STARTTLS and auth
993IMAPS – alternative port for IMAP encrypted since connection
995POP3S – encrypted POP3 since connections
4190Sieve – remote sieve settings
引用自poste官方文档

而三个关于邮件的协议以及它们的加密版本使用的7个端口,宝塔邮局里面的组件至少占了3个(SMTP的25,IMAP的143,还有pop3的110),在设置了ssl证书之后占用的端口会再多出三个(SMTPs的465,IMAPs的993,还有pop3s的995),由于我是从宝塔邮局转别的邮件,所以得先在宝塔的设置里面把相关的服务先停了

停了之后宝塔这边会显示”已停止“,为了确定是真的停了,在本地用nmap扫一下这些需要用到的端口

显示”filtered“意思是防火墙或者安全组没有放通这个端口,显示closed的话就是端口已经放通了,但是没有程序在监听这个端口,然后就按照腾讯云的文档去设置docker的镜像源,设置成腾讯云的内网源

然后通过ssh连接到服务器上,把需要用到的docker镜像给pull下来,上一步的设置镜像源就是为了在这一步省点时间,毕竟走腾讯的内网,会快很多

然后根据官方的安装指导,结合这篇帖子,根据自己的需要以及实际情况,拼凑出完整的一条docker run命令。我这里为了后期更改启动命令方便,我把启动命令设置成了一个放在映射目录中的脚本文件,这样如果后期我需要更改容器的启动命令,那我只需要更改这个脚本的内容就行了

目前脚本里面的内容有点简陋,就一条命令,不过这是因为我暂时没有需要更改它的启动命令,就让它启动一个bash先

在脚本放置完毕、启动命令拼凑完成之后,将启动命令粘贴到ssh里面执行,执行完成之后如果一切顺利,用docker ps命令能看到大概这样的输出

接着在本地再拿nmap扫一下,跟刚才相对比,除了那两个filtered的端口依旧是filtered之外,其它的端口都由close转为open,open表示端口放通了并且有程序在监听这个端口

在上面的命令中,我把容器内的80端口映射到宿主机的8000端口并禁用了https,但我并不想放通8000端口,放通的端口越多,潜在的安全风险就越多,所以接下来就该设置ng的反代了,在宝塔新建一个网站(由于我这次搭建,映射出来的目录本身就是在一个网站下面,网站也事先建好了故跳过这步),PHP版本选择”纯静态“,然后到反向代理那里添加一条环回地址8000端口的反向代理,然后去配置ssl相关的设置

在一切都设置完成之后就可以通过域名访问刚刚搭建的邮箱,由于是首次使用,所以它会先跳到首次使用的设置页面,设置好邮件服务器的主机名和管理员邮箱的地址与密码,这里需要注意的是主机名最好是设置的跟域名一样,有条件的给服务器的IP上ptr记录会更好(腾讯这边的ptr记录得花钱买,1k5 元/年/5条,这个价格令我望而生畏,买不起),不然容易进垃圾箱(虽说由于未知原因,这个 @gaoice 的自建邮箱还是逃不过Gmail的垃圾箱,而我自己的就没事。。。)

在完成初始配置之后去到”virtual domains“设置里面点你域名右边的”show“,然后点”create new key“

如果一切顺利,它顶部会显示”new dkim keys generated,update your dns settings“,并在刚才显示”create new key“的地方显示你的dkim记录

然后去dns服务提供商那边按照poste给你的信息去添加一条txt的解析,顺带把spf和dmarc的txt记录也添加了

在完事之后去这里验证一下你的dkim等设置,等这里显示dkim、spf、dmarc都pass了之后再去mail-tester那边测试

因为mailtester这边免费用户一天只能测三次,而上面的dkim测试就没有限制,故不要因为dkim、spf、dmarc等问题导致的意外而浪费每天仅有的三次测试机会

最后来一张绝望的Gmail截图

写在最后:

我之前在自己服务器上面搭建的时候,最开始用的宝塔,在刚开始搭建的时候是能收到邮件的,那个时候我25端口是没有放通的好像,但是不知道什么时候开始,突然收不到邮件,我以为是宝塔发疯,便上网搜寻其它的类似的组件包,上网搜索过很多资料,最后唯一对我有用的就是这篇,看了这篇之后考虑过ewomail、iredmail、mailcow和poste.io,ireadmail和ewomail都是丢给你一个脚本让你自己在服务器上面跑,ewomail同时还是开源的,文档也很详细,也免费提供一定的技术支持,而ireadmail不知道是否开源,文档也没怎么详细讲,最关键似乎不提供官方免费技术支持,网上也没多少相关资料,mailcow搞不太懂,最开始是先尝试的ewomail,结果最后登不上去,只好再找别的,后来发现poste.Io的文档也挺详细,而且官方支持docker部署,就照着官方文档结合网上的一些资料搭建起来了,不过刚搭建好也是收不到邮件,后来找腾讯云的客服才知道,25端口的入方向是得放通的,放通25端口之后,就一切顺利了。但是很多IDC是默认阻塞掉25端口的出方向的,不过这实测并不太影响发邮件,25端口如果真心想搭建邮件服务器的话出方向的影响并不大,正如poste官方文档里面客户端设置的示例中说所的一样

Do not use port 25 at all as it is reserved for communication for remote mailservers only. Even if it will work you might be affected by unnecessary connection testing and various slowdowns. Some ISPs also blocks customers outbound connections to 25 due fighting with SPAM so it might be impossible to connect to your mailserver from various places. Connections to port 465/587 are mostly tolerated.

翻译:完全不要使用端口 25,因为它仅用于远程邮件服务器的通信。即使它会起作用,您也可能会受到不必要的连接测试和各种减速的影响。由于与垃圾邮件的斗争,一些 ISP 还会阻止客户与 25 的出站连接,因此可能无法从各个地方连接到您的邮件服务器。大多数情况下可以容忍连接到端口 465/587。

实测在配置了ssl之后,25端口在出方向的阻塞并不影响发件,但是入方向会影响收件,不过这个是在自己的可控范围内,因为25端口的入站方向是由自己控制的

参考资料:

评论

  1. Chrome OS Chrome 97.0.4692.77
    2年前
    2022-1-17 1:38:17

    一直以為是你這邊是 DKIM 沒配好,看配圖的話應該是 reverse DNS 沒有設定好,PTR 完全是查不到的。

    • 博主
      櫻川 浅羽
      Android Chrome 97.0.4692.70
      2年前
      2022-1-17 1:42:57

      反向解析确实没弄,但应该不关这事,我自己的邮箱leaf@mail.ba7jcm.live同样没有反向解析,但也没有这种情况

    • 博主
      櫻川 浅羽
      Android Chrome 97.0.4692.70
      2年前
      2022-1-17 1:44:16

      另外反向解析太贵,弄不起,之前看好像是一千还是一千五,单位是元/年/5条

      • 叶子
        Chrome OS Chrome 97.0.4692.77
        2年前
        2022-1-17 1:47:11

        還可以這樣賣的嗎……境外的話 reverse DNS 基本都是免費的,可以直接自助設定……

        • 博主
          櫻川 浅羽
          Windows Edge 97.0.1072.62
          2年前
          2022-1-17 22:15:58

          我之前查过资料,反向解析需要在服务器提供商这边设置,就是说你用谁的服务器就得让谁给你设置反向dns

          查看图片
          腾讯这边的反向dns价格

        • 博主
          櫻川 浅羽
          Windows Edge 97.0.1072.62
          2年前
          2022-1-17 22:20:24

          如果是用像office365、腾讯企业邮箱之类的成品邮箱的话,rdns人家都是给你设置好的,你只需要去你域名的权威dns那边添加一条cname记录就行了,但是对于自建邮箱的话这一切都要自己动手,阿里云那边的机子可以免费设置rdns,但是他那边的机子很少有活动,比腾讯云这边贵很多,你有空的话可以查一下我这个邮箱(leaf@azure.ba7jcm.top)的rdns之类杂七杂八的相关设置,然后再查一下这个(leaf@mail.ba7jcm.live)的设置,前面那个是365的邮箱,后面这个是我的自建邮箱

        • 博主
          櫻川 浅羽
          Windows Edge 97.0.1072.62
          2年前
          2022-1-17 22:24:12

          国外的机子的话由于我和gaoice都没有可用于境外支付的途径,所以也就基本没法弄,像甲骨文、微软、谷歌这些大厂的云的免费试用门槛都是一张外币visa/master信用卡,而且基本都不支持银联卡,但是在国内,学生能申请到的卡几乎都是银联的

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
酷安
滑稽
贴吧
上一篇
下一篇