金京犬
(安徽郵電職業(yè)技術(shù)學(xué)院 計算機(jī)系,安徽 合肥230031)
隨著互聯(lián)網(wǎng)的發(fā)展,電子郵件大大方便了人們生活和工作,但是也產(chǎn)生了一系列新的問題,如垃圾郵件。垃圾郵件中夾帶的非法信息、病毒造成的商業(yè)機(jī)密泄密、個人財產(chǎn)丟失等問題,給人們的生活和工作帶來許多困擾。因此,尋求一種安全穩(wěn)定的垃圾郵件過濾系統(tǒng)是很有必要的。目前常用的方法主要是服務(wù)器和客戶端的郵件過濾,包括郵件的內(nèi)容過濾、關(guān)鍵字過濾以及身份驗證。
postfix是一款郵件代理傳輸軟件,相對于sendmail軟件來講,它更安全、更快、更靈活。它設(shè)計出來的主要目的就是解決sendmail存在的不安全和效率低的問題[1]。postfix安全原則特點如下:
1)能夠讓互聯(lián)網(wǎng)用戶訪問的外部程序的權(quán)限比較低;
2)為已分離的形式不同的進(jìn)程提供不同的功能;
3)外部進(jìn)程是單進(jìn)程方式運行的,不允許進(jìn)程以SUID權(quán)限形式訪問;
4)采用動態(tài)內(nèi)存分配,解決緩沖區(qū)溢出的問題。
在Linux系統(tǒng)下,postfix應(yīng)用程序有1個主進(jìn)程master和21個子進(jìn)程。下面將從接收郵件和投遞郵件兩個任務(wù)的角度來分析這些進(jìn)程的工作。
(1)接收郵件
接收郵件的方法有兩種:一是直接交給25號端口的smtpd進(jìn)程接收郵件;二是通過sendmail把郵件放到mail drop的郵件投遞代理隊列中,再由pickup進(jìn)程接收郵件。這兩種方法都會先把郵件交給cleanup子進(jìn)程,cleanup將會對收到的郵件進(jìn)行基本檢查、內(nèi)容過濾(包括郵件頭部檢查),然后把郵件放入剛來的郵件隊列中(incomingqueue),最終通過隊列管理器(qmgr)管理[1-2]。
(2)投遞郵件
郵件投遞也有兩種方法:一是本地投遞程序投遞到本地的郵箱中,二是smtp程序發(fā)送和轉(zhuǎn)發(fā)到其他郵件服務(wù)器上。在進(jìn)行郵件投遞時,隊列管理器qmgr會在incoming隊列中查找活躍隊列(active queue),郵件一旦被放入活躍隊列,就會被投遞出去。如果郵件臨時不能被投遞,那么它就會被放入延時隊列(deferred queue)。如果郵件已經(jīng)損壞不能被投遞,那么郵件就會被放入到腐敗隊列(corrupt queue)。
郵件過濾系統(tǒng)主要是檢查郵件的頭部、附件和內(nèi)容等幾個關(guān)鍵點[3-4],如果其中有符合特征信息的,則過濾該郵件。具體的郵件過濾框圖如圖1所示。
圖1 郵件過濾框圖
Linux系統(tǒng)完成postfix應(yīng)用軟件的安裝后,會產(chǎn)生兩個重要文件:一個是/etc/postfix/main.cf主配置文件,另一個是/etc/postfix/master.cf進(jìn)程管理文件。實現(xiàn)垃圾郵件過濾,主要就是對主配置文件進(jìn)行修改配置。
procmail和spamassassin兩款軟件都支持垃圾郵件過濾,其中procmail是postfix的一個默認(rèn)程序,是一個郵件投遞單。本文使用procmail軟件進(jìn)行郵件過濾。具體的配置清單如表1所示。
表1 配置清單
在表1中,當(dāng)body_checks文件內(nèi)容為/Make Money Fast/REJECT"NO,I do not believe",表示出現(xiàn)“Make Money Fast”關(guān)鍵字,就拒絕投遞郵件,并提示“NO,Ido not believe”信息。 當(dāng) header_checks文件內(nèi)容為/^Subject:*ILOVEYOU*/REJECT GO Died your love,表示以“ILOVEYOU”為主題的郵件都拒絕,并提示“GO Died your love”信息。當(dāng) mime_header_checks文件內(nèi)容為/.exe|.bat$/REJECT ’virus file’, 表示拒絕附件為exe或者bat格式的文件并提示“virus file”信息。
本次實驗是在 centos Linux7.2,postfix-2.10.1,郵件服務(wù)器主機(jī)名為controller.example.com,測試主機(jī)名為compute.example.com的環(huán)境下進(jìn)行的。沒有配置郵件過濾時可以正常收發(fā)郵件,如圖2顯示的是發(fā)郵件信息,圖3是顯示收郵件信息。配置過濾郵件信息后,符合特征信息的郵件就被拒絕投遞。圖4所示是在命令窗口輸入命令echo"jgjagjgla"|mail-v-s"ILOVEYOU"u1@controller.example.com進(jìn)行測試("jgjagjgla"是任意郵件信息,-s指定主題)時所顯示的郵件內(nèi)容過濾。圖5顯示的是在命令窗口輸入命令mutt u1@controller.example.com-a aa.exe-s"test"(-a表示添加附件,-s表示指定主題)進(jìn)行測試時的郵件主題過濾信息。圖6顯示的是附件過濾信息。從實驗結(jié)果可以看出procmail能夠根據(jù)用戶定制的規(guī)則過濾出垃圾郵件。
圖2 無過濾機(jī)制發(fā)郵件
圖3 無過濾機(jī)制收郵件
圖4 郵件內(nèi)容過濾
圖5 郵件主題過濾
圖6 郵件附件過濾
僅利用postfix軟件過濾郵件,功能是非常有限的,從上面的實驗可以看出,客戶端郵件發(fā)送者的身份沒有進(jìn)行驗證,很容易導(dǎo)致郵件服務(wù)器被當(dāng)成一個垃圾郵件中轉(zhuǎn)站[5]。本文中設(shè)計的smtps機(jī)制需要驗證客戶端郵件發(fā)送者的身份,以有效防止服務(wù)器變成垃圾中轉(zhuǎn)站的情況。具體的配置內(nèi)容如表2和表3所示。該配置的具體步驟如下:
Step1:為postfix服務(wù)器生成私鑰和證書。主要是利用opnssl genrsa命令生成私鑰,openssl req命令生成證書請求文件,利用openssl ca命令為證書請求文件文件做簽名。
Step2:修改主配置文件,啟動smtps功能,具體的配置如表2所示。此步的作用除啟動smtps功能實現(xiàn)加密通信外,主要是指定三個文件的位置,即服務(wù)器證書的文件、CA證書的文件和服務(wù)器私鑰文件。
Step3:配置sasl驗證,具體的配置如表3所示。其作用是客戶端必須通過驗證,才能通過本郵件服務(wù)器relay郵件。
Step4:測試驗證。正確配置smtp+ssl(見表2和表3)后,在發(fā)送郵件的時候會啟用sasl機(jī)制驗證客戶身份,如圖7所示。驗證的機(jī)制有四種,即CRAM-MD5、DIGEST-MD5、LOGIN和PLAIN。實驗中采用LOGIN驗證機(jī)制。用戶名”dTE=”是通過perl命令中的函數(shù)encode_base64 ("u1")’所得,密碼“cmVkaGF0”是通過perl命令中的函數(shù)encode_base64("redhat")所得。圖7中顯示:當(dāng)用戶名和密碼輸入正確后,才能通過驗證,進(jìn)行下一步的郵件投遞工作。
圖7 smtp+ssl驗證客戶身份
表2 smtps配置選項
表3 sasl配置選項
垃圾郵件占用網(wǎng)絡(luò)資源,影響人們的生活、工作及財產(chǎn)安全等,研發(fā)一種反垃圾郵件系統(tǒng)勢在必行。本文基于DNSBL反垃圾郵件研究的基礎(chǔ)上對Linux系統(tǒng)下postfix垃圾郵件過濾方法進(jìn)行深入研究,在此基礎(chǔ)上設(shè)計了結(jié)合smtp和ssl機(jī)制驗證客戶端發(fā)送郵件人的身份。下一步研究工作的重點是基于企業(yè)級的郵件系統(tǒng)extmail,用以實現(xiàn)垃圾郵件和病毒郵件的過濾功能。