Sendmail環(huán)境中檢測是否存在郵件代理的小技巧
我們知道郵件代理有可能是是善意的,也有可能是惡意的,我們如何在Sendmail環(huán)境中檢測和排除郵件代理帶本身的影響呢,請看下文介紹。
作為廣泛應用的郵件服務器軟件,sendmail需要和各種smtp的客戶端軟件打交道。在這些smtp客戶端軟件中,有些軟件是真正的郵件軟件,比如Microsoft Outlook Express;有些是有著特殊目的的應用程序,比如Norton Antivirus。
有些應用程序會截斷郵件客戶端和sendmail的連接,以“郵件代理”的形式接收客戶端的數(shù)據(jù),對數(shù)據(jù)進行處理(比如Norton Antivirus使用這種方式來掃描外出郵件中的病毒),然后轉發(fā)給sendmail。
這種“郵件代理”程序可能是善意的也可能是惡意的。但是,當sendmail和郵件客戶端軟件的通信出現(xiàn)問題的時候,應該首先著手檢測此類“郵件代理”程序是否存在以便進一步排除它們的影響。
sendmail服務程序具有記錄smtp會話的功能,大部分郵件客戶端軟件也有類似的功能。我們可以通過對比服務器和客戶端上的會話記錄來判斷郵件代理程序是否存在。
首先,您需要用 -X參數(shù)運行sendmail:
#startsrc -s sendmail -a"-bd -q 30m -X /tmp/smtp.sessions"
注意:
在一個生產環(huán)境中,-X參數(shù)可能會產生大量的日志信息。請只在進行測試或故障排除時使用-X參數(shù)。
一個典型的客戶機-服務器smtp會話會被這樣地記錄在/tmp/smtp.sessions中:
127184 >>> 220 marshak.austin.ibm.com ESMTP Sendmail Tue, 1 Nov 2005 10:31:22 -0600
127184 <<< HELO IBM8370FEC6B24^M
127184 >>> 250 marshak.austin.ibm.com Hello [9.53.167.160], pleased to meet you
127184 <<< MAIL FROM: ^M
200898 >>> 250 2.1.0 ... Sender ok
200898 <<< RCPT TO: ^M
200898 >>> 250 2.1.5 ... Recipient ok
200898 <<< DATA^M
200898 >>> 354 Enter mail, end with "." on a line by itself
200898 <<< Message-ID: <000f01c5df01$88a95fd0$a0a73509@austin.ibm.com>^M
200898 <<< From: "internship test" ^M
200898 <<< To: ^M
200898 <<< Subject: test^M
200898 <<< Date: Tue, 1 Nov 2005 10:29:06 -0600^M
#p#
其中"<<<"表示sendmail服務接收到的信息,而">>>"則表示sendmail服務向客戶端發(fā)送的信息。如果郵件客戶端直接和sendmail服務會話,那么在客戶端的smtp會話中所記錄的文本信息應該和/tmp/smtp.sessions一致。我們可以利用這個特點來檢測郵件代理的存在。
讓我們用一個例子來說明。
/tmp/smtp.sessions:
127184 >>> 220 marshak.austin.ibm.com ESMTP Sendmail Tue, 1 Nov 2005 10:31:22 -0600
127184 <<< HELO IBM8370FEC6B24^M
127184 >>> 250 marshak.austin.ibm.com Hello [9.53.167.160], pleased to meet you
127184 <<< MAIL FROM: ^M
200898 >>> 250 2.1.0 ... Sender ok
200898 <<< RCPT TO: ^M
200898 >>> 250 2.1.5 ... Recipient ok
200898 <<< DATA^M
200898 >>> 354 Enter mail, end with "." on a line by itself
200898 <<< Message-ID: <000f01c5df01$88a95fd0$a0a73509@austin.ibm.com>^M
200898 <<< From: "internship test" ^M
200898 <<< To: ^M
200898 <<< Subject: test^M
200898 <<< Date: Tue, 1 Nov 2005 10:29:06 -0600^M
200898 <<< X-Priority: 3^M
200898 <<< X-MSMail-Priority: Normal^M
200898 <<< X-Mailer: Microsoft Outlook Express 6.00.2800.1506^M
200898 <<< X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506^M
200898 <<< ^M
200898 <<< test^M
200898 <<< ^M
200898 <<< ^M
200898 <<< .^M
200898 >>> 250 2.0.0 jA1GVM5200898 Message accepted for delivery
郵件客戶端軟件的記錄:
SMTP: 10:38:54 [rx] 220 marshak.austin.ibm.com ESMTP Sendmail Tue, 1 Nov 2005 10:40:03 -0600
SMTP: 10:38:54 [tx] HELO IBM8370FEC6B24
SMTP: 10:38:54 [rx] 250 marshak.austin.ibm.com Hello [9.53.167.160], pleased to meet you
SMTP: 10:38:54 [tx] RSET
SMTP: 10:38:54 [rx] 250 2.0.0 Reset state
SMTP: 10:38:54 [tx] MAIL FROM:
SMTP: 10:38:54 [rx] 250 2.1.0 ... Sender ok
SMTP: 10:38:54 [tx] RCPT TO:
SMTP: 10:38:54 [rx] 250 2.1.5 ... Recipient ok
SMTP: 10:38:54 [tx] DATA
SMTP: 10:38:54 [rx] 354 Please start mail input.
SMTP: 10:38:54 [tx]
SMTP: 10:38:54 [rx] 250 Mail queued for delivery.
我們可以看到,在要求客戶端輸入郵件信息時,sendmail發(fā)出的信息是“354 Enter mail, end with "." on a line by itself”,而郵件客戶端收到的信息是“354 Please start mail input.”。由此可知有郵件代理程序存在于郵件客戶端與sendmail之間。
如果您的郵件客戶端不支持記錄smtp會話的功能,您可以采用以下兩種方法:
1、使用支持smtp會話記錄的客戶端進行測試;
2、使用telnet命令連接到sendmail服務器的25端口,手工輸入HELO,MAIL FROM,RCPT TO,DATA等命令。
通過文章,我們知道了如何在Sendmail環(huán)境中檢測是否存在郵件代理,希望對大家有所幫助!
【編輯推薦】