ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从550退信到邮件高可用:企业邮件运维实战指南

从550退信到邮件高可用:企业邮件运维实战指南 做企业邮件运维这些年我最怕的从来不是“服务挂了”而是“服务看起来活着但业务同学一天收到几十封退信”。用户把退信截图往群里一甩问你是不是邮箱被人投诉了你一看好家伙十封里有九封都是550拒绝码。更妙的是我最近发现很多人把“vsftpd 550错误”和邮件550搞混——一个是FTP的文件访问拒绝一个是SMTP的收信拒绝压根是两条线。这篇文章就从一个550退信事故讲起把企业邮件服务从单机排查到高可用架构的完整过程记录下来写给所有为邮件稳定头疼的运维和IT网管。1. 从稳定性目标反推企业邮件服务到底在优化什么1.1 “看起来正常”的故障比宕机更可怕邮件服务这行有个特点真正把人逼疯的故障都不是“服务挂了”而是“服务半死不活”。TCP 25端口通着IMAP能登录网页端也能打开表面上一切正常但外部用户收不到你的邮件或者你这边发出去就被对方一口回绝。这类故障在监控系统里几乎是盲区因为它不体现在进程状态和端口上只会体现在退信、延迟和用户投诉里。我接手过不少企业的邮件系统单机部署占绝大多数。单机就意味着所有风险都压在一台机器上好消息是邮件服务本身不太容易“蹦”跑个三五年都不重启的大有人在坏消息是一旦它出问题影响面往往是你想象不到的。硬盘满了、队列积压、某个域名被对方加黑、甚至机房出口IP被列进公共黑名单这些事都不会让服务直接停机但会一点一点放干业务的信任感。等业务部门开始拿Excel统计“本周退信率30%”的时候你再去解释“服务器本身没事”就没人愿意听了。所以我在做邮箱稳定性优化时心里始终有一条原则可用性不等于进程存活而是等于“用户感知层面的投递成功率”。出发点和终点都应该是用户的退信率、延迟和垃圾邮件误判率。这也是为什么我会把一次550错误当成整个项目的起点而不是当成一个孤立工单处理。1.2 起点是550终点是高可用550这个错误码很特别。它是SMTP协议里最常见、也最“扎眼”的永久拒绝回复。作为一个运维你看到550的第一反应是“这条消息没戏了”因为发件服务器收到5xx开头的回复后正常的逻辑就是放弃重试、生成退信。这意味着每一次550都对应着一封实际没送达的邮件它是实打实的业务损失。而550背后的原因五花八门。收件人写错、对方服务器策略严格、你的IP被列入黑名单、SPF记录不存在、PTR反解缺失、发件人需要认证而你用的是客户端明文中继……每个原因对应的修复方式完全不同。这恰恰是邮件运维比普通Web运维复杂的地方邮件投递是一个“你的服务器、DNS、对方的服务器、对方的反垃圾策略”四方协作的过程任何一环出了问题最终都会以退信的形式暴露在你面前。我在处理这类问题时习惯性地会把550错误往上抽象一层它不只是配置问题更是架构和运维体系的体检报告。当你反复遇到同类型550背后往往藏着单点架构的脆弱、监控盲区、DNS记录管理混乱、出站IP信誉维护缺失这些更深层的问题。所以这篇文章的思路就是从一次典型550事故入手的做完之后我顺势把整个服务从单机推进到了高可用架构每一步都有据可依不是拍脑袋堆组件。1.3 先定目标自建还是托管RPO/RTO怎么算建议大家在做架构优化之前先别急着上Keepalived、Galera、分布式存储这些东西先坐下来和业务把两个数字定清楚RPO可丢失多久的邮件数据和RTO故障后多久必须恢复。这两个数字决定了你后续所有技术选型的复杂度。举个例子一家100人左右的贸易公司邮箱是自建PostfixDovecot。如果要求RPO接近于零、RTO五分钟那你就得考虑同步复制、共享存储加VIP切换成本不低。如果业务能接受“故障后最多丢10分钟邮件、半小时内恢复”那方案就简单很多主备节点加上定时增量同步就够了备机接管时最多丢一小段窗口内的信。邮件这种服务有很大的特殊性外部发件方有重试机制4xx临时失败会等几分钟甚至几小时再来一次所以只要不是完全断掉很多延迟邮件会自动补投这给了你很大的设计余地。我在真实环境里建议多数中小企业按“RPO15分钟内、RTO15分钟内”来设计已经能覆盖绝大多数需求。要记住邮件高可用不是银行交易系统那种强一致场景别为了追求理论上的完美把系统搞到没人敢碰。稳定是目标简单是手段。2. 550错误全解读SMTP拒绝码与vsftpd混淆溯源2.1 SMTP 550是什么永久拒绝的家族谱550在RFC 5321里的标准含义是“请求的动作未被执行邮箱不可用”Requested action not taken: mailbox unavailable。翻译成人话就是对方SMTP服务器明确告诉你“这封信我不要了你也别重试了直接退回去吧”。但是550后面的内容才是真正有用的。现代邮件服务器回复550时通常会带上增强状态码按照RFC 3463的格式最常见的几种我列一下大家工作中对照着看550 5.1.1 User unknown收件人地址不存在最常见通常是拼错地址或对方离职删号。550 5.7.1 Relay access denied你的服务器尝试让对方帮你转发邮件但对方认证没通过或者你没权限中继。550 5.7.1 Client host rejected连接方IP被拒绝常见于反解缺失、IP信誉差、被对方管理员封了网段。550 5.7.26 Message was not authenticated对方要求发件方做SMTP认证或TLS加密你没有提供。550 5.7.0 Blocked by RBL你的IP在某个公共黑名单里对方直接一刀切。以上每一种的排查路径都不同。如果你只看“550”三个字就去调服务器配置十有八九会白忙活一场。正确做法是找到原始退信里的完整句子和增强状态码那个才是定位的第一把钥匙。举个例子我在日志里看550 5.1.1 User unknown和550 5.7.1 Client host rejected完全是两码事前者查收件人地址后者查发件IP信誉和反解。2.2 一个容易踩的坑vsftpd 550错误不是邮件问题这里必须单独把vsftpd拎出来讲因为最近好多人在搜索“vsftpd 550错误”结果搜出来的文章全是邮件退信的内容越看越对不上号。原因很简单FTP协议里也有550这个回复码但含义截然不同。vsftpd返回550 Permission denied.通常表示FTP登录没问题但目录或文件权限不匹配导致读写被拒550 Failed to open file.则表示你请求的文件在服务器上不存在或路径不对。如果你们的邮件服务器上还兼跑着vsftpd你查日志的时候会发现两个完全不同的550混在一起不看上下文很容易误判方向。遇到vsftpd的550排查顺序应该是这样的先看客户端登录用户对应的目录权限ls -la确认属主和权限位再看SELinux是否开着如果是用getsebool -a | grep ftp查ftp_home_dir和allow_ftpd_full_access两个布尔值经常是它们拦了路最后确认vsftpd配置里的chroot_local_user、local_root是否把用户锁到了错误目录。这个跟SMTP链路一毛钱关系都没有。所以大家排查时先问自己一句我这个550是出现在FTP客户端里还是邮件退信通知里FTP的550查本地文件系统邮件的550查DNS、IP信誉和对方策略。把这一步搞清楚能少走一整天的弯路。2.3 用SMTP会话逐段定位550到底是谁拒绝的熟悉协议的人都知道SMTP是一条纯文本协议手动模拟一遍相当于“现场直播”一次投递过程。我最常用的排查方式是nc或telnet直接连到对方MX端口的25号手动敲命令看每一阶段返回什么$ dig short MX target.com 10 mail.target.com $ nc -w 5 mail.target.com 25 220 mail.target.com ESMTP EHLO test.example.com 250-mail.target.com 250-PIPELINING 250-SIZE 10485760 250-STARTTLS MAIL FROM:postmasterexample.com 250 2.1.0 Ok RCPT TO:usertarget.com 550 5.1.1 User unknown这段会话已经能说明很多问题连接阶段返回了220说明对方服务在线“MAIL FROM”阶段通过说明对方没有一发件就拒收卡在“RCPT TO”阶段说明是收件人地址或域策略出问题。如果卡在“MAIL FROM”阶段往往就是SPF、反解或IP信誉的锅如果“DATA”之后才收到550对方多半是内容过滤或SPF结果评估后才做决定的策略。我把这个“分段定位法”当成邮件排错的基本功强烈建议每个做邮件运维的人都练一遍。它比看日志更直观因为日志里写在哪个阶段其实不醒目而手动会话的节奏感会直接告诉你问题出在哪个环节。3. 从一次退信事故到系统性修复邮件服务调优实录3.1 事故现场为什么业务部门的退信突然暴增前面讲了那么多理论我来还原一次真实事故。某家外贸公司用自建PostfixDovecot某天业务邮件组炸了销售反馈给美国客户的邮件大量被退一封、两封可以当偶然半天收了五十多封退信的时候我就知道出大事了。第一件事是拉Postfix日志看退信的真正原因。日志位置一般是/var/log/mail.log用关键词筛一下grep statusbounced /var/log/mail.log | tail -50结果发现退信原因高度集中都是同一家目标域返回的550 5.7.1 Client host rejected。这个信号非常关键不是个别用户写错地址而是对方服务器在整体拒绝我们这台服务器发过去的连接。如果是收件人地址错误应该是分散的user unknown现在集中出现client host rejected说明问题出在发件方身份上而不是收件人身上。3.2 逐项体检PTR、SPF、DKIM、DMARC、RBL确定了是“发件方身份”问题后我把企业邮件出站最核心的五项配置拉出来过了一遍。很多人问为什么要查这么多项因为收件方邮件服务器对陌生IP的信任判断是综合性的任何一项不合格都可能触发拒绝或丢进垃圾箱。当时逐项查下来的手段是这样的PTR反解dig short -x 203.0.113.15换成你们出站IP。结果很尴尬查询无输出也就是PTR没配。很多企业从IDC或云厂商买IP的时候只顾着用完全忘了做反向解析。SPF记录dig short TXT example.com。查出来有一行vspf1 include:spf.example.net ~all代码层面存在但里面没包含出站服务器的IP段。DKIM签名查邮件头里有没有dkimpass。当时邮件头连dkim-signature字段都没有等于裸奔。DMARC策略dig short TXT _dmarc.example.com。这个连记录都没有对方服务器即使收到信也没有一个统一的策略指令来判断该投递还是该拒收。RBL黑名单用dig short 15.113.0.203.zen.spamhaus.org查注意IP要反序写。这里返回了127.0.0.2命中了Spamhaus的SBL黑名单意味着这个IP段有人干过垃圾邮件的勾当被记录在案了。这一查完原因就清晰了PTR缺失加空壳SPF又顶着个被RBL记录的IP段对方邮件服务器选择直接550拒绝是意料之中的。这次事故不是配置改出来的是历史欠账攒出来的。3.3 修复动作改DNS、调整postfix配置、解除黑名单修复过程分三步走。第一步是补DNS记录。SPF里明确列出出站服务器IP段改成vspf1 ip4:203.0.113.0/24 include:spf.example.net -all把~all软失败升级成-all硬失败防止别人伪造你的域名发信。DKIM在Postfix侧配置好之后把公钥发布到DNS的TXT记录里网上很多教程这里不赘述。DMARC策略先发一个vDMARC1; pnone; ruamailto:dmarcexample.com观察一段时间再逐步收紧到pquarantine。第二步是申请PTR反解。这个不是你自己能搞定的得提工单给IP所属的IDC或云服务商把你服务器的主机名和IP绑上。反解值要和你SMTP问候语里的主机名一致否则会有新的麻烦。这一步在部分服务商要等1-2个工作日期间可以用dig -x反复确认是否生效。第三步是RBL申诉。Spamhaus这类组织都有移除申请的流程但前提是你必须解决黑名单根源。我们查了一下那个IP段里有台被爆破的Windows主机以前发过垃圾邮件被清洗之后才轮到我们来填这个坑。申诉填表、等其他服务商的系统重新评估前后折腾了三天IP从黑名单里掉出来之后退信量肉眼可见地归零。这里提醒一句DNS修改有TTL缓存无论你改了SPF还是DKIM别指望客户端那边立刻生效。可以用dig trace一层层确认全球递归服务器的返回情况再通知业务方重新测试不然容易误判“还没生效”。3.4 向内看别再只怪外部拒绝内部中继与认证也容易闹550外部记录修好之后我顺手把内部SMTP认证体系也盘了一遍。为什么因为550不只来自对方策略很多时候是你自己服务器发出的。企业内部有人用Outlook、Foxmail或者手机邮箱客户端发信如果SMTP认证没开或者配置错误对方会直接返回550 5.7.1 Relay access denied因为你是在让对方服务器帮你转发而对方不认你这个“陌生人”。Postfix这边最基本的配置点是这几个smtpd_sasl_auth_enable yes smtpd_relay_restrictions permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination broken_sasl_auth_clients yes注意smtpd_relay_restrictions这项老的配置叫smtpd_recipient_restrictions新版本已经拆开不加上的话即便是合法用户也可能被中继策略挡掉。客户端那边要确认“发送服务器需要认证”和“使用安全密码登录”两个选项都开了。很多办公室网络换了IP从陌生IP上来连接认证又没通过就会看到550。另外出站队列积压也是个隐藏雷区。如果你的队列里积压了上万封邮件目标服务器会认为你在轰炸它轻则限速重则直接550甚至把你的IP丢进本地黑名单。用postqueue -p看下队列数量和状态用postsuper清理异常邮件这些都是日常必须做的动作。4. 高可用架构落地从单机到双节点主备与双活4.1 架构选型稳定不等于复杂先想清楚故障模型550事故解决之后我开始认真考虑一个问题这次是IP信誉事故下次如果是服务器硬盘坏了呢单机环境下一旦系统盘物理损坏邮箱数据、账号、配置全部完蛋RPO可能是一周甚至一个月RTO得按天算。这时候我决定推进高可用改造。选型之前先想清楚故障模型。邮件服务从功能上拆至少包含四条链路入站接收MX、出站发送中继、用户访问IMAP/POP3/HTTP、数据存储Maildir数据库。任何一条断了用户感知都是“邮件系统出问题了”。但不同链路的容灾成本差别很大没必要一上来就全链路双活。多数不到1000人的企业务实做法是双节点主备VIP漂移。两台服务器跑相同的Postfix、Dovecot和数据库平时一台承载全部流量另一台实时同步数据和配置。主节点故障时VIP切到备机DNS的MX记录保留在主备两个地址上外部发件方会自动选择可用节点。这套架构的成本可控、维护清晰既解决了90%的单点问题又不会把你拖入分布式系统的复杂泥潭。4.2 入站/出站高可用MX记录、VIP与连接健康检查先讲网络层的实现。假设你有两个公网IP分别绑定两台服务器DNS里配置两条MX记录example.com. 600 IN MX 10 mail1.example.com. example.com. 600 IN MX 20 mail2.example.com.数字10和20就是优先级数字越小越优先。正常时候外部发件方会先连mail1连接失败时自动尝试mail2。这个机制天然就是邮件服务的“负载均衡故障转移”不需要额外的LB设备。但要注意被作为备用MX的节点必须有完整的接收、认证和存储能力否则对方退而求其次连过来得到的却是拒收那比没有备用还糟糕。VIP漂移用Keepalived来实现配置不复杂核心是健康检查脚本。我的经验是不要只检查TCP端口要检查SMTP协议层面的banner。用下面这个思路#!/bin/bash echo QUIT | nc -w 5 127.0.0.1 25 | grep -q ^220只有SMTP返回220才说明Postfix master进程真的活着TCP端口通但进程僵死的情况也能挡得住。Keepalived把虚拟IP挂在主节点上主节点挂了备节点自动接管。邮件客户端一般走VIP连接IMAP和SMTP所以VIP漂移对用户几乎是透明的最多重连一次。出站方向更简单。Postfix本身在投递失败时会自动重试你只要保证备节点也能正常出站即可。如果企业出站量很大可以单独部署无状态的出站中继机relayhost让所有站点都把信甩给中继机由它统一对外投递。这样即使某台业务服务器宕机只要中继机活着队列里的信就能继续投。4.3 存储与数据同步Maildir是邮件高可用的核心难点邮件高可用最容易翻车的地方在存储。很多人以为邮件就是一堆文件同步一下不就完了实际上Maildir目录里每个文件的文件名都包含时间戳、进程号和随机数直接用rsync同步两台机器上的Maildir遇到并发写入会产生大量冲突而且增量处理很痛苦。我推荐的方案是Dovecot自带的复制能力。Dovecot从2.2版本开始内置了dsync和replication插件可以在两个节点之间做双向同步。配置思路是两个Dovecot节点通过独立端口互信同步每次用户访问或新邮件投递后增量同步到对端。这样两台机器各有一份完整的Maildir任何一台硬盘挂了另一台的数据也是完整的。这个方案避免了NFS共享存储的单点风险也不需要上分布式文件系统是开源邮件系统里性价比很高的选择。如果你坚持用共享存储那NFS或GlusterFS也是一个路子但要注意网络质量。邮件写入是大量小文件操作网络延迟稍微一高用户感知就是“积压”和“卡顿”。而且NFS服务端本身又是一个新单点。我的看法是对于邮件这种“重状态”业务宁可多复制一份数据也不要依赖一个集中存储点。双份独立数据加上好的备份策略比花钱买存储阵列更让人安心。4.4 认证与状态数据数据库怎么保持一致性邮件系统的用户认证数据、别名表、域名信息通常放在数据库里。我这边用的是MariaDB高可用方案选了Galera集群三节点两个数据中心各放一个节点再加一个仲裁节点。Galera的好处是数据同步实时、读请求可以分摊到任意节点但有个关键注意事项它虽然支持多写实际生产环境最好只保留一个写入口。两个节点同时写同一行用户数据哪怕差几毫秒都可能触发冲突和死锁。所以我在架构里做了个明确分工应用层只连接主写入节点读操作可以走其他节点。遇到主写入节点宕机Galera会自己投票选出新主应用层通过VIP或连接串里的多个地址自动切换。这个过程中只要保证数据不缺页用户登录认证几乎感知不到变化。至于会话状态和Redis缓存老实说邮件服务对这些的依赖比Web业务弱很多。用户的IMAP连接断了就断了客户端会自动重连Rspamd的统计缓存丢了重来也不影响收信。我不建议为了这些“轻状态”上太复杂的分布式缓存方案够用就好别给自己找事。4.5 故障演练与切换实测把RTO当数字而不是口号架构搭完不演练等于白搭。我连续做了三轮故障注入测试形成了一套标准动作停掉主节点的Postfix进程观察Keepalived是否把VIP漂移到备机断开主节点的网络观察外部发件方是否走备用MX入口甚至直接模拟系统盘不可写观察备节点的接管能力和数据完整度。这里给大家一个真实数据参考Keepalived检测脚本默认的检查间隔是2秒故障后大约10秒内完成VIP切换。但邮件客户端的表现不完全取决于VIP切换还取决于客户端自己的连接超时设置和DNS缓存。实测下来多数客户端在1-2分钟内恢复收发业务感知上基本就是“断了几分钟然后又好了”。但要注意入站邮件的到达延迟和RTO是两回事。故障期间外部发件方可能会收到4xx临时错误然后按重试策略等几分钟甚至半小时再来投递。所以一封目标域来的新邮件可能在故障后半小时才真正落盘这不代表系统没恢复而是重试机制在起作用。做汇报前把这个讲清楚业务部门才不会有误解。5. 监控与日常巡检让550和高可用“可视化”5.1 必须盯住的几个数字高可用架构落地后我把监控系统重做了一遍。以前只监控“服务是否在线”远远不够现在重点盯的是和用户体验直接相关的业务指标监控对象建议阈值说明SMTP端口Banner必须返回220用协议层探测不用TCP端口代替邮件队列深度小于500持续增长要报警队列积压直接反映投递异常退信率bounced/sent小于5%短期超过10%基本是有批量拒收单域投递失败数超过10封/小时报警锁定是哪个目标域在拒绝你邮件延迟delay平均值小于5分钟从日志里统计delay字段磁盘剩余空间低于20%报警Maildir目录膨胀很快尤其有附件IMAP登录失败次数特定IP连续失败要锁定防止被爆破后拿去发垃圾信这些指标里我最看重的是退信率和队列深度。退信率直接等于业务受损面队列深度则是系统健康的晴雨表队列越堆越多说明出站链路出了问题再拖下去就会触发目标站的限流甚至拉黑。5.2 脚本与告警的落地方式监控不用一步到位上特别重的平台先用脚本把核心指标抓到再接到Zabbix或Prometheus里都能跑。我贴一个简单但实用的巡检脚本片段逻辑非常简单胜在直接有效#!/bin/bash # 邮件健康巡检队列、退信、端口 QCOUNT$(postqueue -p | awk /Requests:/{print $3}) BOUNCE$(grep -c statusbounced /var/log/mail.log) SENT$(grep -c statussent /var/log/mail.log) PORT25$(echo QUIT | nc -w 5 127.0.0.1 25 | grep -c ^220) echo queue$QCOUNT bounced$BOUNCE sent$SENT port25$PORT25 if [ $QCOUNT -gt 500 ] || [ $BOUNCE -gt 100 ] || [ $PORT25 -eq 0 ]; then # 通知到值班群 curl -s -X POST https://your-monitor-endpoint/alerts -d statusmail_check_failed fi这个脚本我用cron每五分钟跑一次数据推到Zabbix的trapper顺便生成一张趋势图。报警规则不要设得太敏感邮件服务有重试机制单次失败别急着惊动值班人看趋势才有意义。比如退信率连续三次检查都在10%以上再报警可以避免半夜被假警报叫醒。5.3 哪些“假警报”不用慌张监控落地之后会收到一些“看起来严重但实际无害”的告警我花了一段时间才摸清它们。最常见的是451临时错误很多服务器会对陌生IP先做灰名单greylisting处理第一次连接故意返回4xx让发件方过几分钟再来试。这种延迟投递不是故障只是对方在防垃圾。还有一类是外部安全扫描器。互联网上每天有大量扫描bot尝试用25端口往外发信你的服务器日志里会留下大量“reject RCPT”记录这些是正常拦截动作不代表服务有问题。我当时被这种日志吓了一跳后来统计了一下每天有二三百条来自不同国家的扫描连接但系统全部正确拒绝了这才是它们该有的样子。另外ClamAV或Rspamd规则更新偶尔会导致milter临时拒绝日志里表现为“temporary failure”等规则库更新完就自动恢复。这类问题只要加上“规则版本变化”的上下文就很容易判断不用每次看到异常日志就拉群轰炸。6. 常见问题速查550错误与高可用运维的避坑清单6.1 问题定位速查表把这一路踩过的坑汇总成一张速查表排查时直接对照着查能够节省大量时间。报错特征协议/阶段可能原因首要排查动作550 5.1.1 User unknownSMTP RCPT阶段收件人地址不存在、被服务器吞掉核对收件人拼写查对方是否有该账号550 5.7.1 Relay access deniedSMTP MAIL/RCPT阶段未认证中继、中继白名单缺失检查发件客户端是否启用SMTP认证550 5.7.1 Client host rejectedSMTP连接阶段反解缺失、IP信誉低、被对方封禁查PTR记录和RBL黑名单550 5.7.26 UnauthenticatedSMTP MAIL阶段对方要求强制TLS或登录认证开启Postfix TLS和SASL认证550 blocked by RBLSMTP连接阶段出站IP被列入公共黑名单查询Spamhaus等黑名单并发起申诉vsftpd 550 Permission deniedFTP数据连接本地目录权限或SELinux拦截查用户目录权限、SELinux布尔值vsftpd 550 Failed to open fileFTP命令阶段文件路径错误或不存在核对文件名和路径大小写6.2 避坑清单与个人经验最后一节写几个真正值钱的经验都是踩过之后才懂的道理。第一改DNS记录后别急着测试。递归DNS的缓存可能还留着旧记录半路上不生效会把你带偏。我习惯用dig trace从根服务器逐级查看到权威服务器返回新值再让业务方重测。第二SPF记录里的include链不要太长。SPF规范要求DNS查询次数不超过10次include链叠太多层会直接把SPF判成permerror反而起反作用。精简SPF能用ip4写明出站IP段的尽量直接写。第三千万不要在Maildir双向同步还没完成的时候强行重启两个Dovecot节点。两边都以为自己是主节点会写出互相冲突的同步记录数据一致性立刻崩坏。操作顺序永远是先停一边等同步完全静默再动另一边。第四DKIM私钥一定要备份而且要在主备节点同时存放。私钥丢了你签名的邮件全部验证失败对方轻则进垃圾箱重则550。公钥丢了可以重新发布私钥丢了只能重新生成并群发通知很痛苦。第五TLS证书在邮件服务里不止一份。Postfix的SMTP证书、Dovecot的IMAP/POP3证书、Webmail证书三处独立配置。漏了任何一处客户端就会报“服务器不受信任”别看这是小问题它一样会转化为“邮件用不了”的投诉。第六最后一个很现实的坑一个IP段里有一台机器被黑去发垃圾邮件整段IP都会被RBL连带拉黑。你的邮件服务器再干净也没用。所以内网其他面向外网的主机也要做好端口管控和病毒扫描否则邮件这边做得再好也可能被隔壁服务器一个扫描器拖下水。这套折腾下来我最大的体会是邮件服务高可用不是买一套双机热备软件就交差的事550退信也不只是被拒收那么简单。每一次退信都是一次体检报告背后可能是DNS配置欠账、IP信誉管理缺失、架构单点、监控盲区。把这些一环环补上服务才真正稳得住。最后再分享一个小技巧把每次退信都截个原始内容存到一个目录里按月归档时间久了就能从退信模式的演变里提前发现大问题。
返回列表