Sendmail環(huán)境中檢測(cè)是否存在郵件代理的小技巧
我們知道郵件代理有可能是是善意的,也有可能是惡意的,我們?nèi)绾卧?strong>Sendmail環(huán)境中檢測(cè)和排除郵件代理帶本身的影響呢,請(qǐng)看下文介紹。
作為廣泛應(yīng)用的郵件服務(wù)器軟件,sendmail需要和各種smtp的客戶端軟件打交道。在這些smtp客戶端軟件中,有些軟件是真正的郵件軟件,比如Microsoft Outlook Express;有些是有著特殊目的的應(yīng)用程序,比如Norton Antivirus。
有些應(yīng)用程序會(huì)截?cái)噜]件客戶端和sendmail的連接,以“郵件代理”的形式接收客戶端的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行處理(比如Norton Antivirus使用這種方式來(lái)掃描外出郵件中的病毒),然后轉(zhuǎn)發(fā)給sendmail。
這種“郵件代理”程序可能是善意的也可能是惡意的。但是,當(dāng)sendmail和郵件客戶端軟件的通信出現(xiàn)問(wèn)題的時(shí)候,應(yīng)該首先著手檢測(cè)此類“郵件代理”程序是否存在以便進(jìn)一步排除它們的影響。
sendmail服務(wù)程序具有記錄smtp會(huì)話的功能,大部分郵件客戶端軟件也有類似的功能。我們可以通過(guò)對(duì)比服務(wù)器和客戶端上的會(huì)話記錄來(lái)判斷郵件代理程序是否存在。
首先,您需要用 -X參數(shù)運(yùn)行sendmail:
#startsrc -s sendmail -a"-bd -q 30m -X /tmp/smtp.sessions"
注意:
在一個(gè)生產(chǎn)環(huán)境中,-X參數(shù)可能會(huì)產(chǎn)生大量的日志信息。請(qǐng)只在進(jìn)行測(cè)試或故障排除時(shí)使用-X參數(shù)。
一個(gè)典型的客戶機(jī)-服務(wù)器smtp會(huì)話會(huì)被這樣地記錄在/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服務(wù)接收到的信息,而">>>"則表示sendmail服務(wù)向客戶端發(fā)送的信息。如果郵件客戶端直接和sendmail服務(wù)會(huì)話,那么在客戶端的smtp會(huì)話中所記錄的文本信息應(yīng)該和/tmp/smtp.sessions一致。我們可以利用這個(gè)特點(diǎn)來(lái)檢測(cè)郵件代理的存在。
讓我們用一個(gè)例子來(lái)說(shuō)明。
/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.
我們可以看到,在要求客戶端輸入郵件信息時(shí),sendmail發(fā)出的信息是“354 Enter mail, end with "." on a line by itself”,而郵件客戶端收到的信息是“354 Please start mail input.”。由此可知有郵件代理程序存在于郵件客戶端與sendmail之間。
如果您的郵件客戶端不支持記錄smtp會(huì)話的功能,您可以采用以下兩種方法:
1、使用支持smtp會(huì)話記錄的客戶端進(jìn)行測(cè)試;
2、使用telnet命令連接到sendmail服務(wù)器的25端口,手工輸入HELO,MAIL FROM,RCPT TO,DATA等命令。
通過(guò)文章,我們知道了如何在Sendmail環(huán)境中檢測(cè)是否存在郵件代理,希望對(duì)大家有所幫助!
【編輯推薦】