本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)安全領(lǐng)域,具體涉及一種網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法。
背景技術(shù):
企業(yè)或個(gè)人之間的很多業(yè)務(wù)往來都是通過電子郵件的方式進(jìn)行,但是在郵件交互過程中,往往會(huì)攜帶企業(yè)重要或保密文件,可能會(huì)損害企業(yè)的根本利益。而現(xiàn)有的網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法效率較低,響應(yīng)時(shí)間較長,需要較高的服務(wù)器配置成本且無法進(jìn)行協(xié)議擴(kuò)展。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法,該網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法可以有效的監(jiān)控企業(yè)所有的郵件內(nèi)容,效率較高,響應(yīng)時(shí)間較短,無需較高的服務(wù)器配置成本且能夠進(jìn)行標(biāo)準(zhǔn)與非標(biāo)準(zhǔn)的協(xié)議擴(kuò)展。
為實(shí)現(xiàn)上述目的本發(fā)明提供了一種網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法,通過在出口交換機(jī)上設(shè)置網(wǎng)絡(luò)監(jiān)視服務(wù)器對(duì)通過出口交換機(jī)的郵件進(jìn)行監(jiān)視,并將郵件的發(fā)件人,收件人,主題,郵件正文及附件還原至鏡像服務(wù)器。
所述網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法包括步驟:鏡像數(shù)據(jù)、數(shù)據(jù)采集、過濾數(shù)據(jù)、TCP流重組、數(shù)據(jù)識(shí)別、郵件還原、數(shù)據(jù)儲(chǔ)存。
所述的鏡像數(shù)據(jù)具體為獲取通過出口交換機(jī)的數(shù)據(jù);
所述的數(shù)據(jù)采集具體為使用PF_RING驅(qū)動(dòng)將數(shù)據(jù)采集至網(wǎng)絡(luò)監(jiān)視服務(wù)器。
所述的過濾數(shù)據(jù)具體為將非郵件數(shù)據(jù)拋棄;
所述的TCP流重組具體為處理TCP亂序重傳,對(duì)TCP數(shù)據(jù)進(jìn)行重新排序。
所述的數(shù)據(jù)識(shí)別具體為對(duì)數(shù)據(jù)進(jìn)行分析,確定協(xié)議ID,為后續(xù)業(yè)務(wù)還原提供依據(jù);
所述的郵件還原具體為根據(jù)協(xié)議ID,對(duì)郵件還原,提取郵件的發(fā)件人,收件人,主題,郵件正文及附件等重要信息;
所述的數(shù)據(jù)儲(chǔ)存具體為把還原的郵件信息進(jìn)行存儲(chǔ)到鏡像服務(wù)器上。
所述的根據(jù)協(xié)議ID,對(duì)郵件還原,提取郵件的發(fā)件人,收件人,主題,郵件正文及附件等重要信息,當(dāng)郵件端口為25時(shí),步驟為:
a)通過協(xié)議ID,加載smtp動(dòng)態(tài)庫;
b)初始化smtp數(shù)據(jù),主要上行數(shù)據(jù)和下行數(shù)據(jù);
c)判斷此數(shù)據(jù)是否compress壓縮,如果壓縮則解壓,并把解壓后的數(shù)據(jù)和前面未壓縮的數(shù)據(jù)合并,生成新的上行數(shù)據(jù),并刪除原有的上行數(shù)據(jù);
d)解析用戶名和密碼,當(dāng)上行數(shù)據(jù)出現(xiàn)AUTH LOGIN時(shí),后面即可認(rèn)為是用戶名和密碼,數(shù)據(jù)采用base64解碼,即可得到用戶名和密碼信息;
e)解析所有收件人,特征字RCPT TO:;
f)解析內(nèi)嵌郵件,凡出現(xiàn)特征字Content-Type:message/rfc822均認(rèn)為內(nèi)嵌郵件,具體流程:
g)解析郵件中所有特征字Content-Type:application/的附件,內(nèi)部判斷是否都含有附件名稱,有則處理,沒有則丟棄,此外還需判斷附件名稱和特征字是否在同一個(gè)mime片段內(nèi),如果不是則丟棄,可能含有附件名分段情況,需特殊處理;
h)解析郵件中所有特征字Content-Type:image/的附件,內(nèi)部判斷是否都含有附件名稱,有則處理,沒有則丟棄,此外還需判斷附件名稱和特征字是否在同一個(gè)mime片段內(nèi),如果不是則丟棄,可能含有附件名分段情況,需特殊處理;
i)解析郵件中所有特征字Content-Type:text/的附件,內(nèi)部判斷是否都含有附件名稱,有則處理,沒有則丟棄,此外還需判斷附件名稱和特征字是否在同一個(gè)mime片段內(nèi),如果不是則丟棄,可能含有附件名分段情況,需特殊處理;
j)解析郵件時(shí)間;
k)解析郵件發(fā)件人;
l)解析郵件收件人,可能含有多個(gè),根據(jù)客戶端不同,解析有細(xì)節(jié)變化;
m)解析郵件抄送人,可能含有多個(gè),根據(jù)客戶端不同,解析有細(xì)節(jié)變化;
n)解析郵件密送人;
o)解析郵件主題,可能含有主題分段情況,需特殊處理;
p)解析客戶端版本;
q)解析郵件正文,先識(shí)別html格式的正文,如果沒有則把text/plain作為正文;
r)如果發(fā)件人為空,則丟棄則郵件;
s)結(jié)束。
所述的根據(jù)協(xié)議ID,對(duì)郵件還原,提取郵件的發(fā)件人,收件人,主題,郵件正文及附件等重要信息,當(dāng)郵件端口為80時(shí),步驟為:
a)通過協(xié)議ID,加載http動(dòng)態(tài)庫;
b)http識(shí)別后,進(jìn)行http協(xié)議解析,解析出http的主要信息,包括Mail-Upload-size等郵件上傳附件等關(guān)鍵信息,用于判斷此附件內(nèi)容是否完整,此種格式為“非mime格式”;
c)通過http具體應(yīng)用配置文件,識(shí)別出webmail的數(shù)據(jù),進(jìn)而調(diào)用webmail入口,進(jìn)行webmail的解析;
d)進(jìn)行用戶名和id的分析,對(duì)符合條件的加入到hash表中;
e)分析類mime格式附件是否完整,完整則繼續(xù);否則緩存該附件,退出;此時(shí)必須在模板中配置相應(yīng)的內(nèi)容,UPLOADSIZE;
f)判斷非mime格式附件是否完整,完整則繼續(xù);否則緩存該附件,退出;無需配置,自動(dòng)識(shí)別;
g)解析郵件的其他基本信息,如收件人,抄送人等;
h)識(shí)別附件id(包括上傳附件,和發(fā)送郵件),可以優(yōu)先配置id在較小區(qū)域內(nèi)查找,此處解析均得到附件id的數(shù)組(多個(gè));
i)根據(jù)附件id的個(gè)數(shù),逐個(gè)進(jìn)行判斷;
j)通過id查找用戶緩存,找到對(duì)應(yīng)的附件名稱和附件內(nèi)容,從而添加到webmail結(jié)構(gòu)中;
k)解析郵件正文,區(qū)分類mime格式和非mime格式,進(jìn)行不同的處理;
l)解析郵件附件內(nèi)容跟隨郵件正文一起發(fā)送的特殊格式,循環(huán)處理;
m)判斷如果行為為用戶上傳或者刪除時(shí),清空webmail對(duì)象內(nèi)存,退出;
n)判斷郵箱為163和126時(shí),則會(huì)把用戶空間緩存的所有附件一并輸出;
o)去掉to、cc、bcc最后的“;”號(hào);
p)使http的pGeneralInfo指向webmail對(duì)象,退出;
q)使http的m_nAppID置為webmail的協(xié)議ID;
r)如果在webmail識(shí)別過程中發(fā)現(xiàn)非webmail,則返回false,則會(huì)繼續(xù)對(duì)此http進(jìn)行解析;
s)解析http的POST或GET的數(shù)據(jù);
t)將此http的解析的信息拷貝到http入口的參數(shù)中;
u)關(guān)閉http解碼對(duì)象;
v)檢查用戶hash表超時(shí);
w)結(jié)束。
所述的解析內(nèi)嵌郵件,凡出現(xiàn)特征字Content-Type:message/rfc822均認(rèn)為內(nèi)嵌郵件,步驟為:
a)由于內(nèi)嵌郵件可能大于一個(gè),所以此為一個(gè)循壞;
b)此郵件的主題作為附件名,正文作為附件內(nèi)容;
c)判斷此郵件是否mime格式,如果是,則使用此郵件的內(nèi)容分隔符作為分隔符,否則把外面大郵件的mime的內(nèi)容分隔符作為此郵件的分隔符;
d)優(yōu)先識(shí)別html格式的正文,如果沒有則把text/plain作為正文;
e)后識(shí)別此內(nèi)嵌郵件的其他附件,同大郵件的附件識(shí)別相同;
f)由于有些限制,目前只能支持一級(jí)嵌套郵件的處理;
g)把此內(nèi)嵌郵件清空,即在大郵件中清除此內(nèi)嵌郵件的所有內(nèi)容。
所述的根據(jù)附件id的個(gè)數(shù),逐個(gè)進(jìn)行判斷,具體為:如果為上傳附件行為,則把id和對(duì)應(yīng)的附件內(nèi)容及附件名稱添加到用戶緩存中;如果為刪除附件行為,則通過id刪除此附件在用戶空間中的存儲(chǔ);如果為發(fā)送郵件行為,則優(yōu)先識(shí)別id中是否“%2C”,有則把此id拆分為不同的id,沒有則把此id作為單獨(dú)id。
本發(fā)明與現(xiàn)有技術(shù)相比,可以有效的監(jiān)控企業(yè)所有的郵件內(nèi)容,本發(fā)明使用pf_ring,性能較傳統(tǒng)技術(shù)提高50%以上,效率較高;響應(yīng)時(shí)間較短,無需較高的服務(wù)器配置成本且能夠進(jìn)行標(biāo)準(zhǔn)與非標(biāo)準(zhǔn)的協(xié)議擴(kuò)展。
附圖說明
圖1是本發(fā)明實(shí)施例1的流程圖。
具體實(shí)施方式
以下是本發(fā)明的具體實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的描述,但是本發(fā)明的保護(hù)范圍并不限于這些實(shí)施例。凡是不背離本發(fā)明構(gòu)思的改變或等同替代均包括在本發(fā)明的保護(hù)范圍之內(nèi)。
實(shí)施例1
一種網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法,通過在出口交換機(jī)上設(shè)置網(wǎng)絡(luò)監(jiān)視服務(wù)器對(duì)通過出口交換機(jī)的郵件進(jìn)行監(jiān)視,并將郵件的發(fā)件人,收件人,主題,郵件正文及附件還原至鏡像服務(wù)器。
網(wǎng)絡(luò)郵件業(yè)務(wù)監(jiān)視方法包括步驟:鏡像數(shù)據(jù)、數(shù)據(jù)采集、過濾數(shù)據(jù)、TCP流重組、數(shù)據(jù)識(shí)別、郵件還原、數(shù)據(jù)儲(chǔ)存;如圖1所示。
鏡像數(shù)據(jù)具體為獲取通過出口交換機(jī)的數(shù)據(jù);
數(shù)據(jù)采集具體為使用PF_RING驅(qū)動(dòng)將數(shù)據(jù)采集至網(wǎng)絡(luò)監(jiān)視服務(wù)器。
過濾數(shù)據(jù)具體為將非郵件數(shù)據(jù)拋棄;
TCP流重組具體為處理TCP亂序重傳,對(duì)TCP數(shù)據(jù)進(jìn)行重新排序。
數(shù)據(jù)識(shí)別具體為對(duì)數(shù)據(jù)進(jìn)行分析,確定協(xié)議ID,為后續(xù)業(yè)務(wù)還原提供依據(jù);
郵件還原具體為根據(jù)協(xié)議ID,對(duì)郵件還原,提取郵件的發(fā)件人,收件人,主題,郵件正文及附件等重要信息;
數(shù)據(jù)儲(chǔ)存具體為把還原的郵件信息進(jìn)行存儲(chǔ)到鏡像服務(wù)器上。
根據(jù)協(xié)議ID,對(duì)郵件還原,提取郵件的發(fā)件人,收件人,主題,郵件正文及附件等重要信息,當(dāng)郵件端口為25時(shí),步驟為:
a)通過協(xié)議ID,加載smtp動(dòng)態(tài)庫;
b)初始化smtp數(shù)據(jù),主要上行數(shù)據(jù)和下行數(shù)據(jù);
c)判斷此數(shù)據(jù)是否compress壓縮,如果壓縮則解壓,并把解壓后的數(shù)據(jù)和前面未壓縮的數(shù)據(jù)合并,生成新的上行數(shù)據(jù),并刪除原有的上行數(shù)據(jù);
d)解析用戶名和密碼,當(dāng)上行數(shù)據(jù)出現(xiàn)AUTH LOGIN時(shí),后面即可認(rèn)為是用戶名和密碼,數(shù)據(jù)采用base64解碼,即可得到用戶名和密碼信息;
e)解析所有收件人,特征字RCPT TO:;
f)解析內(nèi)嵌郵件,凡出現(xiàn)特征字Content-Type:message/rfc822均認(rèn)為內(nèi)嵌郵件,具體流程:
g)解析郵件中所有特征字Content-Type:application/的附件,內(nèi)部判斷是否都含有附件名稱,有則處理,沒有則丟棄,此外還需判斷附件名稱和特征字是否在同一個(gè)mime片段內(nèi),如果不是則丟棄,可能含有附件名分段情況,需特殊處理;
h)解析郵件中所有特征字Content-Type:image/的附件,內(nèi)部判斷是否都含有附件名稱,有則處理,沒有則丟棄,此外還需判斷附件名稱和特征字是否在同一個(gè)mime片段內(nèi),如果不是則丟棄,可能含有附件名分段情況,需特殊處理;
i)解析郵件中所有特征字Content-Type:text/的附件,內(nèi)部判斷是否都含有附件名稱,有則處理,沒有則丟棄,此外還需判斷附件名稱和特征字是否在同一個(gè)mime片段內(nèi),如果不是則丟棄,可能含有附件名分段情況,需特殊處理;
j)解析郵件時(shí)間;
k)解析郵件發(fā)件人;
l)解析郵件收件人,可能含有多個(gè),根據(jù)客戶端不同,解析有細(xì)節(jié)變化;
m)解析郵件抄送人,可能含有多個(gè),根據(jù)客戶端不同,解析有細(xì)節(jié)變化;
n)解析郵件密送人;
o)解析郵件主題,可能含有主題分段情況,需特殊處理;
p)解析客戶端版本;
q)解析郵件正文,先識(shí)別html格式的正文,如果沒有則把text/plain作為正文;
r)如果發(fā)件人為空,則丟棄則郵件;
s)結(jié)束。
根據(jù)協(xié)議ID,對(duì)郵件還原,提取郵件的發(fā)件人,收件人,主題,郵件正文及附件等重要信息,當(dāng)郵件端口為80時(shí),步驟為:
a)通過協(xié)議ID,加載http動(dòng)態(tài)庫;
b)http識(shí)別后,進(jìn)行http協(xié)議解析,解析出http的主要信息,包括Mail-Upload-size等郵件上傳附件等關(guān)鍵信息,用于判斷此附件內(nèi)容是否完整,此種格式為“非mime格式”;
c)通過http具體應(yīng)用配置文件,識(shí)別出webmail的數(shù)據(jù),進(jìn)而調(diào)用webmail入口,進(jìn)行webmail的解析;
d)進(jìn)行用戶名和id的分析,對(duì)符合條件的加入到hash表中;
e)分析類mime格式附件是否完整,完整則繼續(xù);否則緩存該附件,退出;此時(shí)必須在模板中配置相應(yīng)的內(nèi)容,UPLOADSIZE;
f)判斷非mime格式附件是否完整,完整則繼續(xù);否則緩存該附件,退出;無需配置,自動(dòng)識(shí)別;
g)解析郵件的其他基本信息,如收件人,抄送人等;
h)識(shí)別附件id(包括上傳附件,和發(fā)送郵件),可以優(yōu)先配置id在較小區(qū)域內(nèi)查找,此處解析均得到附件id的數(shù)組(多個(gè));
i)根據(jù)附件id的個(gè)數(shù),逐個(gè)進(jìn)行判斷;
j)通過id查找用戶緩存,找到對(duì)應(yīng)的附件名稱和附件內(nèi)容,從而添加到webmail結(jié)構(gòu)中;
k)解析郵件正文,區(qū)分類mime格式和非mime格式,進(jìn)行不同的處理;
l)解析郵件附件內(nèi)容跟隨郵件正文一起發(fā)送的特殊格式,循環(huán)處理;
m)判斷如果行為為用戶上傳或者刪除時(shí),清空webmail對(duì)象內(nèi)存,退出;
n)判斷郵箱為163和126時(shí),則會(huì)把用戶空間緩存的所有附件一并輸出;
o)去掉to、cc、bcc最后的“;”號(hào);
p)使http的pGeneralInfo指向webmail對(duì)象,退出;
q)使http的m_nAppID置為webmail的協(xié)議ID;
r)如果在webmail識(shí)別過程中發(fā)現(xiàn)非webmail,則返回false,則會(huì)繼續(xù)對(duì)此http進(jìn)行解析;
s)解析http的POST或GET的數(shù)據(jù);
t)將此http的解析的信息拷貝到http入口的參數(shù)中;
u)關(guān)閉http解碼對(duì)象;
v)檢查用戶hash表超時(shí);
w)結(jié)束。
解析內(nèi)嵌郵件,凡出現(xiàn)特征字Content-Type:message/rfc822均認(rèn)為內(nèi)嵌郵件,步驟為:
a)由于內(nèi)嵌郵件可能大于一個(gè),所以此為一個(gè)循壞;
b)此郵件的主題作為附件名,正文作為附件內(nèi)容;
c)判斷此郵件是否mime格式,如果是,則使用此郵件的內(nèi)容分隔符作為分隔符,否則把外面大郵件的mime的內(nèi)容分隔符作為此郵件的分隔符;
d)優(yōu)先識(shí)別html格式的正文,如果沒有則把text/plain作為正文;
e)后識(shí)別此內(nèi)嵌郵件的其他附件,同大郵件的附件識(shí)別相同;
h)由于有些限制,目前只能支持一級(jí)嵌套郵件的處理;
i)把此內(nèi)嵌郵件清空,即在大郵件中清除此內(nèi)嵌郵件的所有內(nèi)容。
根據(jù)附件id的個(gè)數(shù),逐個(gè)進(jìn)行判斷,具體為:如果為上傳附件行為,則把id和對(duì)應(yīng)的附件內(nèi)容及附件名稱添加到用戶緩存中;如果為刪除附件行為,則通過id刪除此附件在用戶空間中的存儲(chǔ);如果為發(fā)送郵件行為,則優(yōu)先識(shí)別id中是否“%2C”,有則把此id拆分為不同的id,沒有則把此id作為單獨(dú)id。