Sendmail 已停止工作

Sendmail 已停止工作

我有多个 CentOS 服务器,它们都具有带有 masquerade_domain 选项的 sendmail 设置。我们的电子邮件服务器是 Gmail;因此,每个服务器都会将邮件发送到我们在 Gmail 上的域。我已将 Gmail 域中的每个服务器的 IP 地址列入白名单。它已经工作了很多年……确实是很多年了。

突然,我的服务器的一封夜间电子邮件停止工作。

根据我的设置,当使用服务器的命令行发送电子邮件时,例如:

echo "Hello World" | mutt -s "Test Hello World Email" [email protected]

...或者...

echo "Hello World" | mail -s "Test Hello World Email" [email protected]

...邮件日志显示它由本地主机转发,然后转发到 gmail。成功发送如下所示:

from=<[email protected]>, size=483096, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
[email protected], ctladdr=root (0/0), delay=00:02:00, xdelay=00:00:00, mailer=relay, pri=512775, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Message accepted for delivery)
STARTTLS=client, relay=aspmx.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES128-GCM-SHA256, bits=128/128
to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:03, xdelay=00:00:03, mailer=esmtp, pri=603096, relay=aspmx.l.google.com. [74.125.124.27], dsn=2.0.0, stat=Sent (OK)

然而目前,在停止工作的服务器上,我看到:

from=<[email protected]>, size=483096, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
[email protected], ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30006, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Message accepted for delivery)
STARTTLS=client, relay=aspmx.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=AES128-SHA, bits=128/128
to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=120317, relay=aspmx.l.google.com. [108.177.112.27], dsn=5.0.0, stat=Service unavailable
DSN: Service unavailable
Losing ./: savemail panic
SYSERR(root): savemail: cannot save rejected email anywhere

两个突出的 /var/log/maillog 行是:

DSN: Service unavailable

...和...

SYSERR(root): savemail: cannot save rejected email anywhere

我最初认为后一个日志条目(无法保存拒绝的电子邮件)是由于中继不起作用;然而,自从这个问题出现以来,我尝试切换我的 sendmail 配置以允许本地传递一些帐户,并且我更新了我的 /etc/aliases 以将许多别名指向每个 virtusertable 进行本地传递的帐户之一。 ......但我一直未能取得任何进展。

值得注意的是,我仔细检查了 /etc/hosts 文件以及 /etc/resolv.conf。 Nslookups 似乎都运行良好,并且我的主机名与 /etc/hosts 文件匹配。此外,该服务器的公共 DNS 条目与服务器的主机名和 IP 地址相匹配。

任何帮助是极大的赞赏。

答案1

我想分享我的问题的解决方案。这并不是说这将是每个人类似问题的解决方案,但也许我采取的故障排除路径可能会对其他人有所帮助。

首先,我查看了邮件日志。对于 sendmail,在 RHEL 和 CentOS 上默认为:/var/log/maillog。您可以在上面看到我的邮件日志条目以及我目睹的两个问题,它们是(简化的):

relay=aspmx.l.google.com., dsn=5.0.0, stat=Service unavailable

...缩短为:DSN: Service unavailable

... 和 ...

SYSERR(root): savemail: cannot save rejected email anywhere

后一个问题是因为我使用 sendmail 将所有电子邮件伪装到我们公司的主电子邮件服务器(位于 google)。最终发生的事情是:

  1. 最初的电子邮件是在本地发送的
  2. 伪装者试图将电子邮件重播给谷歌
  3. 重播不起作用并创建了一条退回消息
  4. 退回邮件无法发送,因为它也试图重播到谷歌

因此,我无法查看反弹的原因。

我克服了这个问题,并能够使用以下命令成功查看退回详细信息:

(echo Subject: test; echo; echo test)|/usr/sbin/sendmail -Am -i -v [email protected]

(显然改变[电子邮件受保护]做其他事;尽管它不会以任何方式发送)。

上面的命令让我可以详细查看错误消息:

550-5.7.1 [my.servers.ip.address] The IP you're using to send mail is not authorized to
550-5.7.1 send email directly to our servers. Please use the SMTP relay at your
550-5.7.1 service provider instead. Learn more at
550 5.7.1  https://support.google.com/mail/?p=NotAuthorizedError

在阅读本文时,我很快了解到我的服务器的 IP 只是在涵盖 1000 个 IP 的策略阻止列表中。我发送了一个请求,要求将我的 IP 从策略块中删除,然后一切又恢复正常了。

相关内容