Logs

使 sendmail 不記錄“未發出 MAIL/EXPN/VRFY/ETRN”消息?

  • October 23, 2018

我們在 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// EXPNETRN,那麼要麼修改預期的程式碼,要麼使用MAILthen RSET

....
send "MAIL from:<postmaster@domain.com>\r\n"  
expect "250"
send "RSET\r\n"
expect "250"
send "QUIT\r\n"
expect "221"

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