记一次离奇的宕机经历

给一个用户邮箱添加了一个smtp导致邮箱服务器宕机,我的exchange到底怎么了?

故障发生前

关注到一个被删除两年的前管理员邮箱地址一直在接收退信。作为现管理员我决定把smtp地址添加到我的账号上一探究竟:

邮箱里立刻收到了一堆莫名其妙的退信邮件

接下来不到30秒我接到了zabbix的报警

又是队列长,肯定是哪个部门的报警又堵了,容我看下是谁,登上服务器发现事情不妙

解决问题

刷新控制台,报错仍存在并且相同。打开exchange managent shell 用get-message获取队列信息,也有大致相同的报错

控制台服务里观察 exhcange传输 服务状态正常,尝试重启服务,所有问题依旧。检查服务器日志,发现如下异常日志。

根据日志看起来是邮件量过大导致传输服务down掉,直觉判断是添加了smtp的操作引起的,立刻删除添加的smtp,回滚变更操作

重启服务器,所有问题依旧,并伴随25端口间接性不通,已经陆续接到用户反馈pop模式邮箱无法使用。

只能临时重命名TransportRoles\data下面的queue目录释放传输队列

停止传输服务——重命名queue目录——启动传输服务

队列报警停止,25端口恢复正常,传输服务正常

寻找原因

观察刚才异常的退信邮件,发现一个邮箱地址

查询这个地址实际并不存在,经过一番寻找,发现一个日志归档策略,策略处于启用状态,但是日志账号已经不存在了

找到了一个配置,前管理员添加的,作用是所有退信邮件都会转到这个地址一封,但是他离职后账号被删除,策略缺没停用,所以会出现一个不存在的地址一直在接收退信邮件

到这里好像明白了,在我把smtp添加到我的邮箱后,一但整个系统内有任何一封退信邮件产生,退信邮件就会给策略地址一封相同的退信邮件(也就是我的邮箱),我收到了一封邮件,日志规则就会同步给日志账号一封日志邮件,日志账号的邮箱地址不存在,就会产生一封退信,退信邮件又会到我这里,日志规则又会同步账一封日志邮件给日志账号,日志账号的邮箱地址不存在,又会产生一封退信。。。

就这样,进入了死循环,彻底堵死了传输服务

在后续的测试中,发现如果接收退信邮箱地址为任意账号的邮件答复地址时(SMTP地址),并不会触发死循环,只有在接收退信邮箱地址为smtp地址,并且日志账号邮箱不存在时,会触发退信循环。