用别人的邮箱用了很多年,前阵子终于决定自己搭一个。
原因说出来也不复杂:域名邮箱想多开几个别名要加钱,附件大一点发不出去,后台丑得不想点开,最要紧的是——信都躺在别人的服务器上,哪天想搬家、想备份,心里没底。
手边正好有几台服务器闲着,那就动手。
先说想要什么
我给自己列了几条硬要求:整套东西得开源,不掏授权费;手机和电脑自带的客户端能直接连(IMAP/POP3/SMTP);最好连 Exchange 那一套也支持,手机上添加账号时能顺便把日历、通讯录一起同步;后台要顺手,界面最好还是中文的。
一圈看下来,选了 iRedMail。它不是单个软件,更像一套打包好的方案:Postfix 负责收发信,Dovecot 存信,MariaDB 存账号,Amavis 加 ClamAV 过滤垃圾和病毒,Fail2ban 防爆破,一口气全给装好配好,还附带 Roundcube 网页邮箱、SOGo(提供 ActiveSync)、iRedAdmin 管理后台。装完基本就能干活,不用自己东拼西凑。
两台机器,各干各的
这是整个方案里最重要的一个决定:没有用一台机器包打天下,而是把「收信的邮局」和「往外发的中继」拆成了两台。
为什么要拆?因为发邮件这件事,技术上的难点从来不是把信送出去,而是让对方愿意收。拒信的理由翻来覆去就那么几条:你的 IP 没有反向解析(PTR)、这个 IP 段历史上发过垃圾邮件、机房所在地信誉不行。国内机器很多时候申请不到 PTR,25 端口「能进不能出」也是常事,信刚出门就被拦下来。
所以分工是这样:主力服务器负责收信、存信、网页邮箱、管理后台,它是信真正的家;往外发的信,统统交给一台境外的小机器代发——那台有 PTR,IP 干净,25 出口通畅。两台之间用 SASL + TLS 认证,中继只接受主力机的投递,不开开放中继,别人蹭不了。
这么拆还有个附带好处:以后主力机换机房、换 IP,对外的发信信誉一点不受影响,DNS 里的 SPF 也只需要维护中继那一个 IP。

反向解析那点事
上面反复提到 PTR,这里单独拎出来说,因为它是我折腾这套东西时最不受自己控制的一环。
所谓反向解析,就是「拿 IP 反查域名」。收件方的服务器收到你的信,会顺手拿你的 IP 查一下:这个地址反过来指向哪个域名?如果查出来的名字跟你自称的完全不搭,很多服务器二话不说就给低分,甚至直接拒收。
它跟正向解析(拿域名查 IP)是两码事。正向解析你自己说了算,在 DNS 里加条 A 记录就行;反向解析得由这个 IP 的所有者去设,也就是机房或者运营商。你没法在域名服务商那里「顺手加一条」,只能给机房提工单,请人家把反解改成你要的那个名字。什么时候生效、给不给改,主动权不在自己手里。
我这一趟的流程大概是这样:
- 先挑一台能拿到 PTR 的机器当出口。那台境外小机器就是干这个的,机房允许自助设置反解,提交之后很快就生效;
- 在 DNS 里把
smtp.你的域名指到出口 IP,先让正向解析立住; - 给机房提工单,把这个 IP 的反向解析也改成同一个名字
smtp.你的域名; - 等生效,然后自己验:先
dig -x IP看反查出来的名字对不对,再拿这个名字正查一遍,看是不是又指回同一个 IP。
第 4 步是关键:两边必须一字不差地对上,这叫正反一致(FCrDNS)。这一项对不上,SPF、DKIM 配得再漂亮都白搭——邮件体检里的 iprev 一项直接就是红的。
而主力机那台,正好卡在「拿不到 PTR」上。国内的 IP 想改反解,流程麻烦,还不一定批。所以它的定位干脆就定成「只管收,不管出」:收信本来就不需要 PTR,所有往外发的信全交给那台能拿到 PTR 的机器。这也是「两台机器」这个设计的由来。
顺带说一句,中继那台也不是完全敞开做慈善:入站 25 端口直接关掉,只留 587,而且只放行主力机这一个 IP 来投递。这样万一配置被人摸清了,也没法拿它当跳板发垃圾——开放中继这种事一旦沾上,域名信誉基本就废了。

DNS 才是命门
不少人装完邮箱发现「发出去的信进垃圾箱」「外面的信收不到」,问题十有八九不在服务器上,在 DNS 记录上。
- SPF:明明白白告诉全世界,这个域名的信只可能从这几个 IP 发出来。
- DKIM:给自己的信盖一个域名签章,收件方拿到手能验真伪。
- DMARC:规定上面两条对不上时怎么办,顺便收报告。配好之后每天都会收到邮件,告诉你今天有谁在冒充你的域名发信。
- MTA-STS / TLS-RPT:要求对方投递时必须走加密通道,否则拒收;万一失败,对方服务器还会把原因报回来。
配完别急着上线,找个在线的邮件体检工具(比如 Port25)跑一遍,看到 SPF pass、DKIM pass、IP 反查 pass 三项都绿了,心里才踏实。
装起来不难,踩坑才费时间
安装本身一两个小时差不多,剩下的时间全耗在意外上。挑几个印象最深的:
坑一:这台机器以前装过别的面板,卸是卸了,可它的 MySQL 配置文件还在 /etc 里蹲着,数据目录指着一个早就删掉的路径,还带了一行不合法的启动参数。结果数据库怎么都起不来,报的错跟配置文件看着毫无关系,翻了半天才逮到真凶。
坑二:防火墙打架。系统里的 ufw 和一套 nftables 规则冲突,开机的时候 ufw 初始化失败,留下一套「默认全拒绝」的半残规则,SSH、网站、邮件端口全被丢掉。表现就是服务器「假死」——能 ping 通,什么都连不上。最后是从云控制台的 VNC 进去救回来的。教训很值:VPS 突然失联,第一怀疑对象永远是防火墙,别急着重装系统。
坑三:灰名单的反作用。反垃圾里有个灰名单机制,本意是让可疑的发件方「重试一次」,绝大多数垃圾邮件程序不会重试,就被挡住了。但它碰上大型企业邮箱就尴尬:对方从一整个 IP 池发信,每封信走不同 IP,每次都被当成新客人延迟一次。结果人家发来的验证码邮件,能晚好几分钟才到。最后只能把对方的域名整个加进白名单。
坑四:给外发邮件加「保密声明」,第一版发出去正文全是乱码。原因是邮件正文绝大多数是 base64 编码的,处理工具默认不去动这种段落,硬塞进去就把编码弄坏了。得强制让它按同样的编码方式重写,才正常。
坑五:想让声明「只加给外部收件人,自己人之间不加」,开关明明开了却一点效果没有。查下来是配置里开着「所有域名都算本地域」,于是在系统眼里全世界都是自己人,开关自然等于关着。把本地域改成只写自己的域名,立刻就对了。
装完之后,自己又补了一堆
原生的东西够用,但不够顺手,于是陆续加了些自己的:
网页邮箱的登录页换成了每天自动更新的壁纸,用户名固定 @自己的域名 后缀不用手打,还能记住账号;忘记密码不用再找管理员,绑定一个外部恢复邮箱,走邮件里的链接自己就能重设;新开的账号会自动收到一封欢迎信,里面写清楚客户端怎么设置、密码要注意什么。
管理后台也补了几个官方免费版没有的页面:别名管理、发件人黑白名单、邮件收发日志(谁收了、谁发了、有没有被退)。系统自己发出的通知邮件,统一换成了同一套卡片样式,退信模板也翻成了中文——毕竟用户看不懂英文退信,只会跑来问你「为什么我的信发不出去」。
这里有个不大不小的提醒:iRedMail 升级会覆盖掉一部分系统文件,所有自己改过的地方都得存成补丁脚本,升级完重新打一遍。我第一次不知道,升级完发现后台自定义的页面全没了。
最后
跑到现在,收信发信都稳,手机上加个账号就能用,日历和通讯录也跟着同步。
回头想想,自己搭邮箱真正难的地方其实不在安装,安装是体力活。难的是「让对方信你」:反向解析、IP 信誉、加密、签名,这些看不见的东西才是门槛,而且一部分还得求运营商、机房配合,不是自己敲几行命令就能解决的。
但搭完之后最舒服的地方反而很朴素:域名是自己的,信躺在自己的硬盘上,想加个别名、想换个登录页、想把某个人拉黑,随手就改了,不用看谁的脸色。
评论区
共 0 条评论