Centos

Sendmail 已停止工作

  • June 7, 2018

我有多個 CentOS 伺服器,它們都有帶有 masquerade_domain 選項的 sendmail 設置。我們的電子郵件伺服器是 Gmail;因此,這些伺服器中的每一個都通過 Gmail 向我們的域發送郵件。我已將我們 gmail 域中的每個伺服器的 IP 地址列入白名單。它已經工作了很多年……實際上是幾年。

突然,我伺服器的一封夜間電子郵件停止工作。

使用我的設置,當使用命令行從伺服器發送電子郵件時,例如:

echo "Hello World" | mutt -s "Test Hello World Email" myname@mydomain.com

…或者…

echo "Hello World" | mail -s "Test Hello World Email" myname@mydomain.com

…郵件日誌顯示它被 localhost 轉發到 gmail。成功發送如下所示:

from=<root@server.domain.com>, size=483096, class=0, nrcpts=1, msgid=<201806051845@server.domain.com>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
to=myname@mydomain.com, 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=<myname@mydomain.com>, ctladdr=<root@server.domain.com> (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=<root@server.domain.com>, size=483096, class=0, nrcpts=1, msgid=<201806051835@server.domain.com>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
to=myname@mydomain.com, 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=<myname@mydomain.com>, ctladdr=<root@server.domain.com> (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 地址相匹配。

任何幫助是極大的讚賞。

我想分享我的問題的解決方案。這並不是說這將是每個人類似問題的解決方案,但也許我採取的故障排除路徑可能對其他人有所幫助。

首先,我看了郵件日誌。其中,對於 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. 化裝舞會試圖將電子郵件重播給Google
  3. 重播不起作用,並創建了一條退回消息
  4. 退回郵件未能發送,因為它也試圖重播到Google

因此,我無法查看反彈的原因。

我克服了這個問題,並能夠使用以下命令成功查看退回詳細資訊:

(echo Subject: test; echo; echo test)|/usr/sbin/sendmail -Am -i -v myemail@address.com

(顯然將 myemail@address.com 更改為其他內容;儘管它不會以任何一種方式發送)。

上面的命令讓我可以看到詳細的錯誤消息:

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 從策略塊中刪除,一切都恢復正常了。

引用自:https://unix.stackexchange.com/questions/448063