Email郵件頭揭密(一)
發表于:2007-07-02來源:作者:點擊數:
標簽:
一、簡介 這一部分內容將詳細討論email頭的方方面面。主要為用戶架設郵件 服務器 提供理論基礎并為管理員在出現電子郵件垃圾騷擾時提供發現垃圾郵件的真正源頭。根據郵件頭的知識有助于發現偽造的郵件。對于希望了解郵件是如何在 網絡 中傳輸的用戶同樣會有幫
一、簡介
這一部分內容將詳細討論email頭的方方面面。主要為用戶架設郵件
服務器提供理論基礎并為管理員在出現電子郵件垃圾騷擾時提供發現垃圾郵件的真正源頭。根據郵件頭的
知識有助于發現偽造的郵件。對于希望了解郵件是如何在
網絡中傳輸的用戶同樣會有幫助。
雖然在討論中盡量有意避免如何偽造一封郵件的討論,但是在討論中的內容可能被惡意讀者用作創建偽造郵件的基礎。因為要在文章中舉例說明,因此在文章中有若干虛構的域名和隨意分配的IP地址作為示例使用。這些域名和IP都是任意任意選擇和偽造的,和Inte
.net上真實的域名和IP沒有任何關系。
二、Email的傳輸過程
這部分包含一個簡單的對一個電子郵件生命周期的分析。這對于理解郵件頭能為你提供哪些信息是非常重要的背景信息。
從表面上看來郵件似乎是直接從發送者機器傳遞到接收者地址,但通常情況下事情并不是這樣。一個典型的電子郵件在其生命周期中至少要經過四臺計算機。
這是因為大多數企業或組織都有一個被稱為“郵件服務器”專用服務器來處理電子郵件,而這一般并不是用戶閱讀郵件的計算機。對于ISP來說,用戶從家里面的計算機撥號接入ISP網絡,這里將用戶家中的計算機稱為客戶機,而將ISP專門處理郵件的計算機稱為郵件服務器。當一個用戶發送郵件,他一般是在自己的計算機上編輯郵件,然后將郵件發送到ISP的郵件服務器上??蛻魴C就此已經完成了自己的工作,而后面的工作則由ISP的郵件服務器來完成。首先ISP郵件服務器查找接收者指定的郵件服務器的IP地址,然后將郵件發送給該目的服務器?,F在郵件則存儲在接收者郵件服務器上等待接收者收取。當接收者從接受郵件服務器取得發送給他的郵件到自己的PC機以后,通常該郵件將被刪除。
假設若干個虛構的用戶<zhangsan@263.net>和<lisi@zky.ac.cn>。zhangsan是263這個ISP的撥號用戶。使用outook express這個郵件客戶程序收發郵件。lisi是中科院的一個虛構用戶,他使用工作站通過單位局域網連接進入互聯網。
如果lisi想給zhangsan發送郵件,他在工作站(假設名字為alpha.zky.ac.cn)上編輯郵件,編輯好的信件從工作站發送到中科院的郵件服務器:mail.zky.ac.cn。一旦信件被發送到mail.zky.ac.cn,以后的信件發送過程就和lisi沒有關系了。中科院的郵件服務器發現這是發送給263.net的某個用戶的信件,則和263的郵件服務器-比如說是mail.263.net-通信,并將郵件傳送給它?,F在郵件則被存儲在mail.263.net 之上直到zhangsan在自己的PC機上撥號連接到263網絡察看并收取信件,這時mail.263.net將存儲的郵件傳送到zhangsan的個人PC機上。
在這個過程中,郵件頭將三次被加到郵件中:在編輯時由郵件客戶程序加入;當郵件傳輸到mail.zky.ac.cn時被mail.zky.ac.cn加入;當從mail.zky.ac.cn傳送到mail.263.net時被mail.263.net加入;通常來說客戶收取信件時并不添加郵件頭。下面我們就仔細看看這些郵件頭是如何產生的。
當lisi的郵件客戶程序編輯郵件并將其發送給mail.zky.ac.cn時,郵件內容如下。這些內容都是由郵件編輯程序(outlook express)添加的:
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
X-Mailer: Outlook Express 5.5
Subject: 中午搓飯?
當郵件從mail.zky.ac.cn傳送到mail.263.net后,郵件內容變為(新添加的內容是由mail.zky.ac.cn):
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id: <lisi031897143614-00000298@mail.zky.ac.cn>
X-Mailer: Outlook Express 5.5
Subject: 中午搓飯?
當mail.263.net收到信件并存儲等待zhangsan收取時,郵件內容變為,(新添加的內容是由mail.263.com添加的):
Received: from mail.zky.ac.cn (mail.zky.ac.cn [124.211.3.78]) by mail.263.net (8.8.5/8.7.2) with ESMTP id LAA20869 for <zhangsan@263.net>; Tue, 18 Mar 1997 14:39:24 -0800 (PST)
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id: <lisi031897143614-00000298@mail.zky.ac.cn>
X-Mailer: Outlook Express 5.5
Subject: 中午搓飯?
最后這封信的內容才是zhangsan收取并閱讀的內容。下面是對其中內容的詳細分析:
Received: from mail.zky.ac.cn
上面的內容表示該郵件是來自于自稱是mail.zky.ac.cn的服務器。
(mail.zky.ac.cn [124.211.3.78])
這句話表示該服務器的真實名字的確是mail.zky.ac.cn,也就是說它自稱的身份是正確的,其IP地址為124.211.3.78。
by mail.263.net (8.8.5/8.7.2)
接收這封郵件的機器是mail.263.net。其運行的郵件程序為sendmail,版本為8.8.5/8.7.2。
with ESMTP id LAA20869
接收郵件的服務器為該郵件賦有ID號LAA20869(通常該號碼是郵件服務器內部使用的,但是管理員可以根據該ID號在log文件中查找關于該信件的相關信息,但是通常該號都是沒有意義的) 。
for <zhangsan@263.net>;
該郵件是發送給地址zhangsan@263.net的??梢钥吹皆撪]件頭沒有To:相關內容。
Tue, 18 Mar 1997 14:39:24 -0800 (PST)
這次郵件傳輸發生時間為:太平洋時間Tuesday, March 18, 1997, at 14:39:24(太平洋時間,因為它比格林威治時間晚8個小時,因此是"-0800")。
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
該郵件頭記錄了郵件是從alpha.zky.ac.cn(lisi的工作站)傳送到到郵件服務器mail.zky.ac.cn的。傳送發生在太平洋時間14:36:17。發送計算機自稱是alpha.zky.ac.cn,其真實名經dns查詢的確是alpha.zky.ac.cn,其IP地址為124.211.3.11,郵件服務器軟件為sendmail v8.8.5。該信件被郵件服務器的mail.zky.ac.cn賦給的ID號為004A21。
From: lisi@zky.ac.cn (Li Si)
該郵件是由lisi@zky.ac.cn發送的,其名字為Li Si。
To: zhangsan@263.net
郵件目的地址為:zhangsan@263.net?!?
Date: Tue, Mar 18 1997 14:36:14 PST
郵件編輯時間為14:36:14 Pacific Standard Time on Tuesday, March 18, 1997。
Message-Id: <lisi031897143614-00000298@mail.zky.ac.cn
mail.zky.ac.cn給該郵件分配了這個號碼來標識它。它和Received頭中的SMTP機ESMTP ID號是不一樣的。因為該號碼是一直伴隨整個郵件的。而其它ID則僅僅在特定的郵件服務器上的郵件傳輸階段相關聯。因此該機器ID號對其它機器來說沒有任何意義。有時候Message-ID包含了發送者郵件地址在其中。
X-Mailer: Outlook Express 5.5
該消息是使用Outlook Express發送的,版本號為5.5。
Subject: 中午搓飯?
郵件標題。
三、郵件協議
這部分內容相對其它部分來說具有更多原理性內容,主要討論郵件是如何從一點傳輸到另外一點的細節。你不需要理解每一句話,但是熟悉這方面的內容有助于在郵件傳輸出現奇怪現象時弄明白問題所在。由于垃圾電子郵件發送者常常故意制造一些奇怪的情況以掩飾自己的身份,因此能理解這些奇怪的現象對對付這些家伙是非常有用的。
為了在網絡上傳輸數據,計算機網絡協議使用了稱為端口的訪問入口,你可以將端口看做是一個通道,通過它計算機可以監聽網絡通信以提供服務。為了同時監聽多個通信,計算機需要有使用端口號碼標識多個不同的端口以區別這些通信。而和電子郵件傳輸相關的端口是25。
正常情況
讓我們重新討論上面的例子,但是這次我們僅僅關心mail.zky.ac.cn到mail.263.net之間的通信過程。首先mail.zky.edu.cn打開一個到mail.263.net的25號端口的連接,然后通過該連接發送郵件,當然在發送郵件過程中會有一些管理命令交互過程。交互中的命令和相應都或多或少的是可讀的。命令是SMTP協議規定的。如果監聽兩者之間的通信,可能有以下內容:(粗體部分是mail.zky.ac.cn發出的)
220 mail.263.net ESMTP Sendmail 8.8.5/1.4/8.7.2/1.13; Tue, Mar 18 1997 14:38:58 -0800 (PST)
HELO mail.zky.ac.cn
250 mail.263.net Hello mail.zky.ac.cn [124.211.3.78], pleased to meet you
MAIL FROM: lisi@zky.ac.cn
250 lisi@zky.ac.cn... Sender ok
RCPT TO: zhangsan@263.net
250 zhangsan@263.net... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (R.T. Hood)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id: <lisi031897143614-00000298@mail.zky.ac.cn>
X-Mailer: Outlook Express 5.5
Subject: 中午搓飯?
Do you have time to meet for lunch?
--lisi
.
250 LAA20869 Message a
clearcase/" target="_blank" >ccepted for delivery
QUIT
221 mail.263.net closing connection
整個傳輸依賴于五個SMTP核心命令(當然SMTP還有一些其它命令,但是它們并不是用來完成真正的郵件傳輸):HELO,MAIL FROM,RCPT TO,DATA和QUIT。
郵件發送者HELO命令用來標識自己的身份。HELO mail.zky.ac.cn可以被解讀為"嗨,我是mail.zky.ac.cn"。當然這里發送者可能會撒謊,但是沒有任何機制能防止發送者mail.zky.ac.cn 說"嗨,我是mail.xxx.com"或是"嗨,我是mail.yyy.com"。然而在大多數情況下接收者都有一些方法來確認發送者的真實身份。
MAIL FROM命令標識開始郵件傳輸,含義是"我有從某人發送來的郵件",該命令后跟的地址就是所謂的“信封地址”(在后面我們將深入討論),信封from地址不一定是發送者自己的地址。這個明顯的
安全漏洞是不可避免的(因為接收者并不知道發送者機器上有哪些地址),但是在特定的情況下這又是一個有用處的特色。
RCPT TO和MAIL FROM是相輔相成的。其指定郵件接收者。通過多個RCPT TO命令一個郵件可以被發送給多個接收者。(在后面的郵件中繼部分將解釋該特色可能針對某些不安全的系統濫用)。該命令后跟的地址稱為"envelope to"地址。其指定了郵件將被投遞給哪些用戶,而和信件中的To:指定的地址沒有關系。
DATA命令指示開始實際的郵件內容傳輸。DATA命令后輸入的任何內容都被看做是郵件的一部分。而格式并沒有任何限制。以一個英文單詞加冒號開始的行一般被郵件程序看做是郵件頭。以英文句號符號(.)開始的行被認為是郵件內容結束。
QUIT命令終止連接。
SMTP協議規范定義在RFC 821中。
非正常情況
上面的例子有些過于簡單。上面的例子有一個假設前提:兩個組織的郵件服務器相互之間能直接訪問,而不需要經過代理、防火墻等安全設備。這在當前Internet環境下情況往往是這樣的。但由于安全對于某些組織來說非常重要,而且網絡或組織可能變得越來越龐大,情況就不那么簡單了。對于具有代理型防火墻系統的郵件傳輸來說,區別就在于在郵件的頭中多了一次轉發過程的記錄,也就是郵件首先從發送者郵件服務器發送到防火墻上,然后再從防火墻發送到目的郵件服務器。
四、郵件中繼
對于某些具有特殊的“生命”周期的郵件頭可能和前面討論的情況完全不同:
Received: from unwilling.intermedia.com (unwilling.intermedia.com [98.134.11.32]) by mail.zky.ac.cn (8.8.5) id 004B32 for <lisi@zky.ac.cn>; Wed, Jul 30 1997 16:39:50 -0800 (PST)
Received: from
linuxaid.com.cn ([202.99.11.120]) by unwilling.intermedia.com (8.6.5/8.5.8) with SMTP id LAA12741; Wed, Jul 30 1997 19:36:28 -0500 (EST)
From: Anonymous Spammer <junkmail@linuxaid.com.cn>
To: (recipient list suppressed)
Message-Id: <w45qxz23-34ls5@unwilling.intermedia.com>
X-Mailer: Massive Annoyance
Subject: WANT TO MAKE ALOT OF MONEY???
這個郵件頭和以前的不同之處可能會令你認為這是一封垃圾郵件,但是這里引起你的懷疑的是"Received:"頭。從"Received:"頭看來,郵件是來自linuxaid.com.cn,然后從這里傳輸給unwilling.intermedia.com,然后從這里再次傳輸到最終目的地址:mail.zky.ac.cn。從"Received:"頭看來事情就是這樣的,但是中間為什么會出現unwilling.intermedia.com呢?因為它和發送者和接收者都沒有直接的關系。
要理解原因需要對SMTP協議進行一些了解。本質上來講,傳輸過程是這樣的:linuxaid.com.cn連接unwilling.intermedia.com的SMTP端口。告訴它“請發送這封郵件到lisi@zky.ac.cn。它可能是以最直接的方法來實現:RCPT TO:lisi@zky.ac.cn。到現在為止,unwilling.intermedia.com接管對該郵件的處理。因為它被告知將該信件轉發給其他一個域:zky.ac.cn,它就查找對于域名zky.ac.cn的郵件服務器然后將郵件轉發給zky.ac.cn。這個過程通常被稱作郵件中繼(mail relaying)。
出現郵件中繼是由于歷史的原因,使用郵件中繼是有它的好處的。到八十年代末期,很多網絡中的計算機都不是直接通信來傳輸郵件。而是通過郵件路由來傳遞郵件,通過郵件路由服務器一步一步地進行郵件傳輸。這樣做是非常麻煩的,發送者往往需要手工指定一封郵件需要經過哪些郵件路由服務器,比如需要從San Francisco發送一封郵件到New York,則需要在信封中添加如下內容:
San Francisco, Sacramento, Reno, Salt Lake City, Rock Springs, Laramie, North Platte, Lincoln, Omaha, Des Moines, Cedar Rapids, Dubuque, Rockford, Chicago, Gary, Elkhart, Fort Wayne, Toledo, Cleveland, Erie, Elmira, Williamsport, Newark, New York City, Greenwich Village, #12 Desolation Row, Apt. #35, R.A. Zimmermann
如果從郵局工作人員的角度來考慮,這種模型是非常有用的。在Gary的郵局只需要知道如何和臨近的郵局Chicago和Elkhart通信,而無需消耗資源計算如何將郵件發送到New York(這時候就很清楚為什么這種模式對于郵件發送者來說非常糟糕,為什么這種方法被拋棄了)。但是這就是郵件被傳輸的過程。因此服務器具有這樣的中繼的能力在那時是很重要的。
而現在中繼通常被用作不道德的廣告商用來隱藏它們的原始地址,將埋怨轉嫁給被用來中繼的服務器而不是其所在ISP的技術。同樣通過中繼可以實現將發送信件的負載轉移到中繼服務器上,從而實現盜用中繼服務器的服務資源。在這里最重要的一點是理解郵件內容是在發送點linuxaid.com.cn被編輯。中間的服務器unwilling.intermedia.com只是參加了中間的傳輸工作,它并不能對發送者有任何的約束力。
在上面的例子中應該注意的另外一點是"Message-Id:"并不是由發送者服務器(linuxaid.com.cn)而是中繼計算機(unwilling.intermedia. com)填寫的。這是被中繼的郵件的一個典型特性,該特性反映了發送服務器并沒有提供Message-Id的事實。
原文轉自:http://www.kjueaiud.com