使 sendmail 不記錄“未發出 MAIL/EXPN/VRFY/ETRN”消息?
我們在 F5 負載平衡器後面有 sendmail 伺服器。負載平衡器不斷打開/關閉到每個郵件伺服器的連接,以查看它是否正在應答。這意味著我們的 syslog 文件中充滿了類似的行:
9 月 19 日 11:13:29 郵件伺服器-X sm-mta
$$ 12643 $$:w8JGDTmi012643:lb5a$$ 10.11.12.13 $$在連接到 MTA 期間未發出 MAIL/EXPN/VRFY/ETRN 9 月 19 日 11:13:29 郵件伺服器-X sm-mta
$$ 12819 $$:w8JGDSLk0012819:lb5b$$ 10.11.12.14 $$在連接到 MTA 期間未發出 MAIL/EXPN/VRFY/ETRN
有沒有辦法讓 sendmail 悄悄地忽略這些?
目前正在執行 sendmail-8.14.5,但如果需要修復此問題會更新。
負載平衡器通常具有相當少的腳本協議測試,僅足以確認可能的正確操作,但經常忽略協議細節,或者不執行任何有用的操作,這正是 sendmail 抱怨的。SMTP 預設是發送
HELO
然後QUIT
(檢查每個響應程式碼)。這是一條 LogLevel > 5 消息,預設為 LogLevel 9,因此您可以
.cf
在添加到以下內容後重新創建.mc
:define(`confLOG_level',`5')
-O LogLevel=5
或通過在 sendmail 命令行上添加來臨時覆蓋它。不利的一面是 6-9 級以上的許多其他(約 140 條)消息也將被抑制。只有一種記錄在案的情況是該特定消息被抑制 - 當一個連接無論如何都會通過配置(訪問映射或 TCP 包裝器)被拒絕時。但是,我能想到的每種情況都涉及記錄拒絕錯誤……(更糟糕的是,有些人可能會向問候語返回錯誤,
HELO
這會導致 F5 將服務標記為關閉)。標準中沒有可配置的項目
SMTP_monitor
,但作為一種解決方法,您可以設置一個備用 SMTP 監控腳本,F5 的 devcentral 上的這個範例(需要註冊才能查看原始碼)顯示了它是如何使用Expect完成的:https://devcentral.f5.com/codeshare/smtp-scripted-monitor
該範例在您幾乎肯定不想要的每個探針上發送一封電子郵件;-) 而是嘗試這樣的事情:
expect "220" ;# must wait for SMTP banner send "HELO mydomain.com\r\n" ;# EHLO is better expect "250" send "VRFY postmaster\r\n" ;# some non-NOP command expect "250" send "QUIT\r\n" ;# clean exit expect "221"
並根據需要進行調整。如果您的 sendmail 很挑剔(
PrivacyOptions
可能會阻止VRFY
//EXPN
)ETRN
,那麼要麼修改預期的程式碼,要麼使用RSET
:.... send "MAIL from:<postmaster@domain.com>\r\n" expect "250" send "RSET\r\n" expect "250" send "QUIT\r\n" expect "221"