Sendmail 已停止工作
我有多個 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)。最終發生的事情是:
- 最初的電子郵件是在本地發送的
- 化裝舞會試圖將電子郵件重播給Google
- 重播不起作用,並創建了一條退回消息
- 退回郵件未能發送,因為它也試圖重播到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 從策略塊中刪除,一切都恢復正常了。