癥狀
如果使用某種第三方測試對Microsoft簡單郵件傳輸協議(SMTP)服務器的中繼情況進行測試,SMTP服務器可能看起來未能通過測試,MicrosoftSMTP產品可能看起來是對中繼開放的,即使事實并非如此。
現有多個常用測試可用來測試SMTP服務器的中繼情況。您可以使用第三方Web站點及工具,例如:
http://www.abuse.net/relay.html
-和-
http://mail-abuse.net
Microsoft提供了第三方聯系信息以便于您尋求技術支持。該聯系信息如有更改,恕不另行通知。Microsoft不保證此第三方聯系信息的準確性。
開始,您的SMTP服務器看起來可能未能通過部分測試,這時,您的MicrosoftSMTP產品可能看起來是對中繼開放的。但是,在您進一步仔細檢查了服務器后,將發現您的MicrosoftSMTP產品并沒有對中繼開放。
原因
SMTP協議中的每個“收件人”或“發件人”地址均包含以下兩個部分:本地部分(或郵箱)和域部分。如果沒有指定域部分(換句話說,就是緊跟在[@]符號后面的部分),則會假定電子郵件是本地電子郵件。實際上,有些MicrosoftSMTP產品會將本地域附上,原因是某些用戶配置其SMTP客戶端時,僅將用戶名當作電子郵件地址。通過添加默認的本地域,Microsoft服務器將最可能是默認值的設置添加了上去,這樣就減少了支持費用。
發生上述情況的原因是,MicrosoftSMTP產品在接受將要傳遞的SMTP電子郵件之前,不執行目錄查找。MicrosoftSMTP產品只檢查收件人域,看它是不是一個本地域或顯式允許的域。如果收件人域不是一個本地域或允許的域,則服務器將顯示一條與下面類似的錯誤信息:
5505.7.1Relayingprohibited
阻止中繼只需要一個條件,即證明“收件人”地址的域部分是本地域。一種選擇是,檢查郵件服務器的目錄以了解收件人是否有效,但此操作不是必需的。如果郵件服務器接受了一個郵件,后來發現它無法傳遞該郵件,該郵件服務器必須生成一個未送達報告(NDR)。(請參見RequestforComments[RFC]2821文檔的第3.7節和RFC1123文檔的第5.2.7節。)MicrosoftSMTP產品符合此要求。MicrosoftSMTP服務器似乎接受了要中繼的郵件,但是后來該服務器并不傳遞該郵件并且生成一個NDR。
更多信息
如果您必須擁有在SMTP協議會話期間執行目錄查找的能力,您可以編寫一個Windows2000SMTP協議事件接收器。
有關其他信息,請參見下面的MSDN平臺SDKSMTP服務器事件Web站點:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/smtpevt/html/_smtpevt_protocol_event_interfaces.asp
推薦的符合RFC的響應與下面的響應類似:
5505.1.1user@northwindtraders.com...Userunknown
Microsoft選擇不在SMTP協議會話期間執行目錄查找,原因是:
如果您將5xx錯誤返給假冒的用戶,則向您的服務器發送主動提供的大量商務電子郵件(垃圾郵件或UCE)的用戶即刻會發現哪些地址是真實的、哪些地址是假冒的。用戶如果使用SMTP協議運行一個名稱詞典,就很容易獲取一個有效電子郵件地址的列表。這也可能會給本地用戶帶來安全風險,因為用戶名往往與電子郵件地址是一樣的。
惡意用戶可以使用“發件人”地址在未經授權的情況下訪問系統(欺騙),然后使用受害者的服務器向目標收件人發送NDR。這種攻擊只能用攻擊者能夠發送的數據量攻擊服務器。換句話說,如果惡意用戶想對第三方發送1兆(MB)的數據,則必須使用他(或她)自己的1兆帶寬把1兆的數據發送到SMTP服務器。通常情況下,這種惡意用戶嘗試發送1MB的數據,但是仍會導致Internet上有幾十或幾百MB的數據攻擊一個或一組受害者服務器。阻止發生這一情況最好的做法是,在整個Internet范圍內驗證“發件人”的地址。但是,還沒有任何標準用于在整個Internet范圍內驗證“發件人”的地址;因此,應對這一情況的最好做法是查看郵件標頭。
如果在SMTP協議會話期間執行了目錄查找,則SMTP協議的運行速度可能大大減慢。在本文發布時,Microsoft是在以下前提下運作的:SMTP服務器應以盡可能快的速度運行,以避免Internet上或桌面SMTP客戶端上的SMTP郵件發生阻塞。如果目錄過載,則客戶端可能會發現服務器運行速度過慢,而且會收到一條錯誤信息。在某些情況下,目錄也可能不可用;或者,可能需要對特定的域進行中繼,但是目錄的副本可能不可用(例如,在ISP承載的環境中)。
關于中繼的一般信息
一臺SMTP客戶端可以使用SMTP服務器將電子郵件轉發到遠程(即,非本地)域,這一情況叫做中繼。中繼本來不是壞事,因為SMTP就是為這一用途設計的(請參見RFC2821文檔的第2.1節和第3.7節)。
但是,如果對中繼不加控制(不受控制的主機稱作“開放中繼”的主機),惡意用戶可能使用中繼來發送主動提供的大量商務電子郵件(垃圾郵件或UCE)。通過將這些不請自來的電子郵件借助中間主機彈跳,惡意用戶會讓自己的身份真假難辨。這還會使資源綁定到中繼主機上,使中繼主機無法發送有效的電子郵件。特別是,大多數發送這種主動提供的電子郵件的用戶無需使用自己的帶寬即可將一封郵件發送給大量的收件人。
中繼測試1
此為SMTP中繼的標準測試。如果不是管理員特許或者SMTP客戶端首先進行驗證,SMTP客戶端不應以這種方式進行中繼。
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@contoso.net....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中繼測試2
此測試與上一個測試基本上一樣,只是發起人是本地用戶而不是遠程域的用戶。因為“發件人”地址常被用于在未經授權的情況下訪問系統(欺騙),所以任何服務器都不應被這種方法欺騙:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@northwindtraders.com....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中繼測試3
此測試針對NULL或空白“發件人”信封地址。NDR及其他通知會使用NULL“發件人”信封地址。然而,如果“收件人”地址中的域不是本地域,通知仍然不會通過:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:<>
<<<2502.1.0<>....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中繼測試4
此測試與中繼測試2一樣,只是客戶端已顯式添加本地域。這不應騙過SMTP服務器:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@northwindtraders.com....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中繼測試5
此測試也與中繼測試2一樣,只是已添加服務器的本地IP地址,目的是嘗試欺騙服務器。盡管此地址格式通常是可接受的,但服務器不應接受到遠程域的中繼。在嘗試將服務器的“本地主機名”或域名稱系統(DNS)名填入“發件人”地址中的各種其他測試中,服務器都不應被“發件人”地址欺騙:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@[10.10.10.10]....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中繼測試6
此測試專用于舊式的基于UNIX的服務器,該服務器通過附加本地域并將(@)符號更改為百分號(%)來路由電子郵件。然后服務器才中繼郵件。此Microsoft產品可接受該郵件,顯示未能通過測試。因為百分號(%)在本地部分是個有效字符,此產品選擇了接受該郵件并在目錄查找失敗時發出一個NDR。對于這一類型的中繼,MicrosoftSMTP產品沒有漏洞,因為郵件沒有轉發,而是發出了一個NDR:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@northwindtraders.com....SenderOK
>>>RCPTTO:
<<<2502.1.5relaytest%contoso.net@northwindtraders.com
中繼測試7
此測試是中繼測試6的又一個變種。此Microsoft產品接受郵件并顯示未能通過測試。因為引號符號(")在本地部分是個有效字符,此產品選擇了接受該郵件并在目錄查找失敗時發出一個NDR。對于這一類型的中繼,MicrosoftSMTP產品沒有漏洞,因為郵件沒有轉發,而是發出了一個NDR:
>>>mailfrom:
<<<2502.1.0spamtest@northwindtraders....SenderOK
>>>rcptto:<"nobody@mail-contoso.org">
<<<2502.1.5"nobody@mail-contoso.org"@northwindtraders.com
如果您的SMTP服務器未能通過這些測試中的一個或多個,特別是中繼測試6和7,這并不一定能說明該服務器是一個開放中繼。有些系統(包括MicrosoftExchange和MicrosoftWindows2000SMTP)看起來能接受中繼郵件,但是隨后在內部拒絕郵件而不進行傳遞。但是,如果不發送一條真實的測試郵件,您無法真正確定某個服務器是否真的開放中繼。
當您對Exchange2000服務器進行中繼測試6和測試7時,因為這兩種測試都會針對無效收件人生成一條消息,所以在ExchangeSystemManager中指定的郵箱(具體指定位置是在默認SMTP虛擬服務器的屬性中,在郵件選項卡上,在“將使用未解析的收件人的郵件全部轉發到主機”框中)會收到一個與下例類似的DNR:
Yourmessagedidnotreachsomeoralloftheintendedrecipients.
Subject:中繼測試6
Sent:3/22/20025:47PM
Thefollowingrecipient(s)couldnotbereached:
relaytest%contoso.net@northwindtraders.comon3/12/200212:30PM
Thee-mailaclearcase/" target="_blank" >ccountdoesnotexistattheorganizationthismessagewassentto.Checkthee-mailaddress,orcontacttherecipientdirectlytofindoutthecorrectaddress.
-或者-
Yourmessagedidnotreachsomeoralloftheintendedrecipients.
Subject:中繼測試7
Sent:3/13/200212:30PM
Thefollowingrecipient(s)couldnotbereached:
"nobody@mail-contoso.org"@northwindtraders.comon3/13/200212:30PM
Thee-mailaccountdoesnotexistattheorganizationthismessagewassentto.Checkthee-mailaddress,orcontacttherecipientdirectlytofindoutthecorrectaddress.
您可以使用這些NDR來驗證這些郵件確實未被中繼。
有關如何在運行ExchangeServer5.5時使服務器防范開放中繼的其他信息,請單擊下面的文章編號,以查看Microsoft知識庫中相應的文章:
196626XFOR:RestrictingRoutingintheInternetMailService
如果您運行的是MicrosoftExchange2000,默認情況下,中繼需要身份驗證。有關其他信息,請參見Exchange2000幫助。