電子郵件系統(tǒng)已成為現(xiàn)代企業(yè)必不成少的收集根本舉措措施,開(kāi)源電子郵件系統(tǒng)也逐步成為企業(yè)構(gòu)建利用時(shí)的首選。但是,若何確保電子郵件系統(tǒng)安然、抵抗垃圾郵件、郵件病毒等安然威脅是企業(yè)在利用構(gòu)建過(guò)程中需要側(cè)重解決的標(biāo)題問(wèn)題。作為本系列的第一部門(mén),本文將具體介紹企業(yè)開(kāi)源電子郵件系統(tǒng)的安然道理及 Sendmail、Qmail 郵件辦事的安然防護(hù)實(shí)戰(zhàn)。
企業(yè)開(kāi)源電子郵件系統(tǒng)簡(jiǎn)介
企業(yè)開(kāi)源電子郵件系統(tǒng)模型根基可分為郵件傳遞代辦署理 MTA、郵件存儲(chǔ)和獲得代辦署理 MSA 和郵件客戶代辦署理 MUA 三大年夜模塊,下面就郵件系統(tǒng)的構(gòu)成作介紹。
郵件傳遞代辦署理(MTA)
企業(yè) Linux 開(kāi)源系統(tǒng)下的郵件傳遞代辦署理(Mail Transfer Agent)凡是利用 Sendmail,該系統(tǒng)幾近在任何 UNIX 平臺(tái)上都有響應(yīng)的版本。別的,還有 D.J. Bernstein 的 Qmail 和 Wietse Venema 的 Postfix 系統(tǒng)。它們負(fù)責(zé)領(lǐng)受并轉(zhuǎn)遞郵件。這當(dāng)然看起來(lái)很簡(jiǎn)單,實(shí)際上設(shè)置可能相當(dāng)復(fù)雜。在郵件策略治理時(shí)需要設(shè)置一系列的路由和假裝選項(xiàng),而良多功能是由說(shuō)話編程實(shí)現(xiàn)的,用以過(guò)濾或點(diǎn)竄中繼動(dòng)靜的頭信息。別的郵件路由和尋址郵件存儲(chǔ)信箱的過(guò)程包含了復(fù)雜的與各類(lèi)目次辦事交互把持,這些目次辦事可能包含 DNS、暗碼文件、NIS、LDAP 別號(hào) / 數(shù)據(jù)庫(kù)治理文件,和各類(lèi)的通用數(shù)據(jù)庫(kù)系統(tǒng)。
此刻的 MTA 還要實(shí)現(xiàn)反垃圾郵件功能,節(jié)制郵件頭的 to 和 from 地址格局,達(dá)到承諾或限制特定域名或地址范圍目標(biāo),以上主如果經(jīng)由過(guò)程點(diǎn)竄存取節(jié)制表和法則實(shí)現(xiàn)的。這一過(guò)程凡是包含查詢數(shù)據(jù)表或目次辦事,例如 Paul Vixie 的及時(shí)黑洞列表法度 RBL,郵件濫用預(yù)防系統(tǒng) MAPS,和同類(lèi)的 Dorkslayer/ORBS 系統(tǒng)。MTA 一向在不竭加強(qiáng)當(dāng)中,以實(shí)現(xiàn)加強(qiáng)的策略節(jié)制和反病毒和反蠕蟲(chóng)等功能。
在大年夜大都環(huán)境下,安裝和設(shè)置 MTA 系統(tǒng)比較等閑,不外強(qiáng)大年夜功能的實(shí)現(xiàn)是以高度復(fù)雜性為代價(jià)的。假定用戶地點(diǎn)的機(jī)構(gòu)選擇定制的 MTA 來(lái)知足特定的路由、系統(tǒng)、安然性和反垃圾郵件等要求,就需要加倍復(fù)雜的設(shè)置選項(xiàng),建設(shè)包含設(shè)計(jì)并措置 MTA 和各類(lèi)子系統(tǒng)如 LDAP、DNS 辦事器之間的復(fù)雜關(guān)系。
浩繁的 MTA 軟件中,最為有影響的應(yīng)當(dāng)是 Sendmail、Qmail 和 Postfix。Sendmail 是最古老的 MTA 之一,也具有一批固定的利用者;Qmail 是新生一代的 MTA 代表,其特點(diǎn)是速度快、體積小,并且等閑建設(shè)安裝。Postfix 發(fā)源于 1996 年,它采取模塊化設(shè)計(jì),利用了大年夜量?jī)?yōu)良的手藝,以達(dá)到安然高效的目標(biāo)。Postfix 成長(zhǎng)到此刻已成為功能很是豐碩、擴(kuò)大性和安然性很是強(qiáng)的優(yōu)良 MTA 軟件。
起首談?wù)?Sendmail。MTA 軟件的良多進(jìn)步前輩功能都是在 Sendmail 上最早實(shí)現(xiàn)的。但 Sendmail 也有典型的汗青標(biāo)題問(wèn)題,主如果全部法度的沒(méi)有實(shí)現(xiàn)杰出的模塊化,運(yùn)行時(shí)需要 SID 權(quán)限,和建設(shè)文件復(fù)雜難懂。這些是阻礙 Sendmail 更好普及利用的一些客不雅標(biāo)題問(wèn)題。
接著是 Qmail。Qmail 是新生一代的 MTA 代表,實(shí)現(xiàn)了模塊化設(shè)計(jì),避免了 SID 標(biāo)題問(wèn)題,根基功能齊備,建設(shè)較 Sendmail 簡(jiǎn)單,并且用戶也很遍及。但 Qmail 比來(lái)幾年的開(kāi)辟工作根基遏制,補(bǔ)丁法度也相對(duì)零亂,這些都是持久利用 Qmail 的用戶或郵件辦事供給商不克不及不當(dāng)真考慮的標(biāo)題問(wèn)題。別的,Qmail 的擴(kuò)大性其實(shí)不是很好,常常需要補(bǔ)丁來(lái)完成功能的擴(kuò)大。
最后介紹 Postfix。Postfix 是新生一代的 MTA 代表,它以速度快、體積小、易建設(shè)安裝等特點(diǎn)而著稱。Postfix 在設(shè)計(jì)上可以說(shuō)是最為美好的,其實(shí)現(xiàn)了杰出的模塊化,郵件的措置流程是經(jīng)由過(guò)程調(diào)用各個(gè)功能模塊來(lái)完成,在效力、功能、可用性、擴(kuò)大及安然等方面都考慮得比較充分。Postfix 以替代 Sendmail 為目標(biāo),并供給了一個(gè)更安然、更高機(jī)能的矯捷的系統(tǒng)。它一樣也采取模塊化設(shè)計(jì),利用了大年夜量?jī)?yōu)良的手藝,以達(dá)到安然的目標(biāo)。因?yàn)樽髡叩脑O(shè)計(jì)理念獨(dú)到,顛末 7、8 年時(shí)候,Postfix 當(dāng)今已成長(zhǎng)成為功能很是豐碩,擴(kuò)大性和安然性強(qiáng)的優(yōu)良 MTA。
郵件存儲(chǔ)和獲得代辦署理(MSA)
一旦安裝并設(shè)置完成了 MTA,還要對(duì) MSA 系統(tǒng)進(jìn)行一樣的建設(shè)過(guò)程。如本大年夜大都機(jī)構(gòu)其實(shí)不直接將郵件傳送到桌面客戶系統(tǒng),而是將郵件存儲(chǔ)到辦事器,讓用戶經(jīng)由過(guò)程 POP 或 IMAP 來(lái)讀取各自的郵件。
郵件存儲(chǔ)的治理有良多種和談,但此刻最常常利用的是 POP3 和 IMAP4。對(duì) MTA 來(lái)講,由一些法度,或稱之為 Daemon(守護(hù)過(guò)程)來(lái)實(shí)現(xiàn)響應(yīng)和談的辦事。大年夜大都 MSA(Mail Submission Agent)可以與通用的 MTA 交互,別的這些系統(tǒng)還包含加鎖或其他安然機(jī)制,使良多個(gè) MSA 可以并行工作而不產(chǎn)生沖突。
這意味著一些用戶可以經(jīng)由過(guò)程 POP 和談獲得郵件、同時(shí)其余一些用戶可利用 IMAP 和談,而別的一些用戶可以登錄系統(tǒng),利用本地郵件客戶代辦署理例如 Pine、Mutt 或 Elm 措置郵件。伶仃用戶也能夠從一種存取和談切換到另外一種,而其實(shí)不需要系統(tǒng)治理員的干涉干與。在一個(gè)已安裝了 Linux 系統(tǒng)機(jī)械上設(shè)置 POP 辦事相當(dāng)?shù)乳e,乃至不需要甚么把持。凡是 POP Daemon 在最初的 Linux 把持系統(tǒng)安裝時(shí)已設(shè)立,IMAP 也是如斯。POP 將郵件轉(zhuǎn)遞到客戶端并從辦事器上移除,而 IMAP 承諾用戶將郵件存貯在辦事器端的文件夾中,而客戶端的拷貝是緩存或工作副本,如許做需要更多的辦事器存儲(chǔ)空間,卻可讓 IT 部門(mén)集中在辦事器端進(jìn)行備份和恢復(fù),并讓客戶端保持相當(dāng)?shù)某C捷性和安然性。IMAP 也能夠設(shè)置成像 POP 那樣在客戶端讀取后就刪除辦事器端的郵件,從把持上講,二者并沒(méi)有甚么不合。
郵件客戶代辦署理(MUA)
郵件客戶代辦署理 MUA(Mail User Agent)種類(lèi)繁多,并且層見(jiàn)疊出。這些代辦署理大年夜都合適 POP 和 IMAP 和談。這也包含微軟的 Outlook 系列、Foxmail 等。在 Linux 下,良多人利用 Fetchmail 抓取郵件并保留在本地郵箱。然后利用任何一種郵件客戶代辦署理 MUA,好比 Elm、Pine、Mutt、MH/exmh、EMACS 的 Rmail,Vmail、Mh-e、Gnus 和大年夜量的帶有 GUI 界面的如 Balsa、Mahogany 等來(lái)措置郵件。也有浩繁 Linux 用戶選擇利用 Netscape Communicator 內(nèi)置的郵件客戶端。
電子郵件傳輸和談道理
SMTP(Simple Mail Transfer Protocol)和談是為了包管電子郵件的靠得住和高效傳送。TCP/IP 和談的利用層中包含有 SMTP 和談,但事實(shí)上其與傳輸系統(tǒng)和機(jī)制無(wú)關(guān),僅要求一個(gè)靠得住的數(shù)據(jù)暢通道。該和談可以工作在 TCP 上,也能夠工作在 NCP、NITS 等和談上。在 TCP 上,其利用端口 25 進(jìn)行傳輸。SMTP 的一個(gè)首要特點(diǎn)是可以在可交互的通信系統(tǒng)中轉(zhuǎn)發(fā)郵件。
SMTP 供給了一種郵件傳輸?shù)臋C(jī)制,當(dāng)領(lǐng)受方和發(fā)送方都在一個(gè)收集上時(shí),可以把郵件直傳給對(duì)方;當(dāng)兩邊不在統(tǒng)一個(gè)收集上時(shí),需要經(jīng)由過(guò)程一個(gè)或幾個(gè)中間辦事器轉(zhuǎn)發(fā)。SMTP 起首由發(fā)送方提出申請(qǐng),要求與領(lǐng)受方 SMTP 成立雙向的通信渠道,領(lǐng)受方可所以最終收件人也能夠是中間轉(zhuǎn)發(fā)的辦事器。領(lǐng)受方辦事器確承認(rèn)以成立連接后,雙發(fā)便可以開(kāi)端通信。
發(fā)送方 SMTP 向領(lǐng)受方發(fā)出 MAIL 號(hào)令,奉告發(fā)送方的身份;假定領(lǐng)受方接管,就會(huì)答復(fù) OK。發(fā)送方再發(fā)出 RCPT 號(hào)令,奉告收件人的身份,領(lǐng)受方 SMTP 確認(rèn)是不是領(lǐng)受或轉(zhuǎn)發(fā),假定同意就答復(fù) OK;接下來(lái)便可以進(jìn)行數(shù)據(jù)傳輸了。通信過(guò)程中,發(fā)送方 SMTP 與領(lǐng)受方 SMTP 采取對(duì)話式的交互編制,發(fā)送方提出要求,領(lǐng)受方進(jìn)行確認(rèn),確認(rèn)后才進(jìn)行下一步的動(dòng)作。全部過(guò)程由發(fā)送方節(jié)制,有時(shí)需要確認(rèn)幾回才可以(如圖 1 所示)。

圖 1. SMTP 和談工作流程
為了包管答復(fù)號(hào)令的有效,SMTP 要求發(fā)送方必需供給領(lǐng)受方的辦事器及郵箱。郵件的號(hào)令和答復(fù)有嚴(yán)格的語(yǔ)法定義,并且答復(fù)具有響應(yīng)的數(shù)字代碼。所有的號(hào)令由 ASCII 碼構(gòu)成。號(hào)令代碼是大年夜小寫(xiě)無(wú)關(guān)的,如 MAIL 和 mail、mAIL 都是等效的。
今朝利用的 SMTP 和談是存儲(chǔ)轉(zhuǎn)發(fā)和談,意味著其承諾郵件經(jīng)由過(guò)程一系列的辦事器發(fā)送到最終目標(biāo)地。辦事器在一個(gè)隊(duì)列中存儲(chǔ)達(dá)到的郵件,等候發(fā)送到下一個(gè)目標(biāo)地。下一個(gè)目標(biāo)地可所以本地用戶,或是另外一個(gè)郵件辦事器,如圖 2 所示。假定下流的辦事器臨時(shí)不成用,MTA 就臨時(shí)在隊(duì)列中保留信件,并在今后測(cè)驗(yàn)測(cè)驗(yàn)發(fā)送。

圖 2. SMTP 存儲(chǔ) - 轉(zhuǎn)發(fā)工作流程
SMTP 定義了 15 個(gè)號(hào)令,別離是:HELO、MAIL FROM、RCPT TO、DATA、RSET、SEND FROM、SOML FROM、SAML FROM、VRFY、EXPN、HELP、NOOP、QUIT、TURN。此中 SMTP 工作的根基的號(hào)令有 7 個(gè):HELO、MAIL FROM、RCPT TO、DATA、REST、NOOP 和 QUIT。
下面別離對(duì)這些號(hào)令進(jìn)行介紹。
HELO:發(fā)送方問(wèn)候領(lǐng)受方,后面是發(fā)件人的辦事器地址或標(biāo)識(shí)。領(lǐng)受方答復(fù) OK 時(shí)標(biāo)識(shí)本身的身份。問(wèn)候和確認(rèn)過(guò)程表白兩臺(tái)機(jī)械可以進(jìn)行通信,同時(shí)狀況參量被復(fù)位,緩沖區(qū)被清空。
MAIL FROM:這個(gè)號(hào)令用來(lái)開(kāi)端傳送郵件,厥后面跟從發(fā)送方郵件地址(返回郵件地址)。也用來(lái)當(dāng)郵件沒(méi)法送達(dá)時(shí),發(fā)送掉敗通知。為包管郵件的成功發(fā)送,發(fā)送方的地址應(yīng)是被對(duì)方或中間轉(zhuǎn)發(fā)方同意接管的。這個(gè)號(hào)令會(huì)清空有關(guān)的緩沖區(qū),為新的郵件做預(yù)備。
RCPT TO:這個(gè)號(hào)令奉告領(lǐng)受方收件人的郵箱。當(dāng)有多個(gè)收件人時(shí),需要多次利用該號(hào)令,每次只能指明一小我。假定領(lǐng)受方辦事器不合意轉(zhuǎn)發(fā)這個(gè)地址的郵件,其必需報(bào) 550 弊端代碼通知發(fā)送方。假定辦事器同意轉(zhuǎn)發(fā),其要更改郵件發(fā)送路徑,把最開(kāi)端的目標(biāo)地(該辦事器)換成下一個(gè)辦事器。
DATA:領(lǐng)受方把該號(hào)令以后的數(shù)據(jù)作為發(fā)送的數(shù)據(jù)。數(shù)據(jù)被加進(jìn)數(shù)據(jù)緩沖區(qū)中,以單獨(dú)一行是“.”的行結(jié)束數(shù)據(jù)。結(jié)束行對(duì)領(lǐng)受方同時(shí)意味當(dāng)即開(kāi)端緩沖區(qū)內(nèi)的數(shù)據(jù)傳送,傳送結(jié)束后清空緩沖區(qū)。假定傳送接管,領(lǐng)受方答復(fù) OK。
REST:這個(gè)號(hào)令用來(lái)通知領(lǐng)受方復(fù)位,所有已存進(jìn)緩沖區(qū)的收件人數(shù)據(jù),發(fā)件人數(shù)據(jù)和待傳送的數(shù)據(jù)都必需斷根,領(lǐng)受方必需答復(fù) OK。
NOOP:這個(gè)號(hào)令不影響任何參數(shù),只是要求領(lǐng)受放答復(fù) OK,不會(huì)影響緩沖區(qū)的數(shù)據(jù)。
QUIT:SMTP 要求領(lǐng)受方必需答復(fù) OK,然后間斷傳輸;在收到這個(gè)號(hào)令并答復(fù) OK 前,領(lǐng)受方不得間斷連接,即便傳輸呈現(xiàn)弊端。發(fā)送方在發(fā)出這個(gè)號(hào)令并收到 OK 答復(fù)前,也不得間斷連接。
VERY:用于確認(rèn)領(lǐng)受用戶。
SEND:使領(lǐng)受主機(jī)知道動(dòng)靜必需送到另外一個(gè)終端,當(dāng)前傳輸被打消。
HELP:查詢辦事器撐持的號(hào)令調(diào)集。
EXPN:驗(yàn)證給定的郵箱列表是不是存在,并擴(kuò)充郵箱列表。
TURN:要求領(lǐng)受主機(jī)向發(fā)送主機(jī)返回動(dòng)靜。
SAML:發(fā)送并郵寄。通知領(lǐng)受主機(jī)動(dòng)靜必需發(fā)送到其他終端和郵箱。
企業(yè)開(kāi)源電子郵件系統(tǒng)面對(duì)的安然威脅
一般說(shuō)來(lái),電子郵件系統(tǒng)面對(duì)以下三種安然威脅:
電子郵件系統(tǒng)本身的安然標(biāo)題問(wèn)題:電子郵件系統(tǒng)本身作為一個(gè)收集辦事器,存在著建設(shè)和誤把持上的安然威脅和隱患,如沒(méi)有合理建設(shè)辦事器的相干建設(shè)文件中的首要選項(xiàng)等,極有可能造成暗藏的安然隱患。別的,電子郵件系統(tǒng)版本的及時(shí)更新與否也影響到其安然;
垃圾郵件標(biāo)題問(wèn)題:垃圾郵件標(biāo)題問(wèn)題是當(dāng)今最讓收集用戶頭疼的惡疾之一。良多不請(qǐng)自來(lái)的垃圾郵件不單據(jù)有收集帶寬,也極大年夜地耗損了郵件辦事器的存儲(chǔ)資本,給用戶帶來(lái)很是大年夜的不便。若何應(yīng)對(duì)該標(biāo)題問(wèn)題,是電子郵件系統(tǒng)面對(duì)的最大年夜的挑戰(zhàn);
開(kāi)放性中繼的安然標(biāo)題問(wèn)題:正如本文前臉部門(mén)所談到的 open relay 的道理,假定設(shè)置不合理,將直接引發(fā)電子郵件系統(tǒng)的濫用,乃至?xí)蔀槔]件的溫床,它可以說(shuō)是電子郵件系統(tǒng)中的“按時(shí)炸彈”。
實(shí)戰(zhàn)安然建設(shè) Sendmail 電子郵件辦事器
sendmail.cf 是 Sendmail 的建設(shè)文件。一般來(lái)講在安裝了 Linux 系統(tǒng)以后,將主動(dòng)生成一個(gè)合適本系統(tǒng)利用的 sendmail.cf 文件,并且在 sendmail.8.9.3/cf 目次下還有良多適應(yīng)各類(lèi)系統(tǒng)的 sendmail.cf 的文件樣本,按照文件名也能夠鑒定出它們所合用的場(chǎng)合。可以選擇它們替代原本的 sendmail.cf 文件,也就是說(shuō),將它們復(fù)制到 /etc 目次中往,籠蓋掉落本來(lái)的 sendmail.cf 文件。并且 Sendmail 還供給了一個(gè) sendmail.cf 的生成器 m4,其經(jīng)由過(guò)程一系列的人機(jī)對(duì)話來(lái)生成一個(gè)用戶定制的 sendmail.cf 文件。具體的用法可以瀏覽 m4 的幫忙文檔,在此就不再臚陳。
建設(shè)文件 sendmail.cf 中的信息仍然是以行動(dòng)單位。假定行首的第一個(gè)字符為“#”,則暗示該行動(dòng)注釋?zhuān)俣ǖ谝粋€(gè)字符為空格則暗示該行動(dòng)上一行的延續(xù)。別的,行首的第一個(gè)字符均為號(hào)令,可是號(hào)令同變量或值之間沒(méi)有距離。這類(lèi)格局便于 Sendmail 進(jìn)行闡發(fā),但很難瀏覽。下面介紹 sendmail.cf 建設(shè)文件中的號(hào)令。
D(定義宏)
號(hào)令 D 定義宏并為其賦值。當(dāng)宏被定義以后,其就負(fù)責(zé)供給供給其存儲(chǔ)的值給 sendmail.cf 文件中其他的號(hào)令利用或直接供給給 Sendmail 利用。宏的名字可所以任何單字符,小寫(xiě)的用于 Sendmail 內(nèi)部宏,用戶成立的宏只能利用大年夜寫(xiě)字母作為名字。一些 Sendmail 的內(nèi)部宏也在 sendmail.cf 文件里定義。例以下面兩行定義了宏 D 和內(nèi)部宏 n:
DDcs.mit.edu
DnMAILER-DEAMON
則宏 D 的值為 cs.mit.edu,宏 n 的值為 MAILER-DEAMON。要利用宏的值時(shí),必需在宏的名字前面加上符號(hào)“$”,以這類(lèi)情勢(shì)來(lái)援引其值。例如:
#my official host name
Dj$w.$D
假定宏 w 的值為主機(jī)名 moon,此時(shí)宏 j 的值就為 moon.cs.mit.edu,這便是本主機(jī)的全稱名(FQDN)。
C 與 F(定義類(lèi))
號(hào)令 C 與 F 都是用來(lái)定義 Sendmail 的類(lèi)。所謂類(lèi),實(shí)際上就是由措置編制不異的多個(gè)變量構(gòu)成的數(shù)組。與宏一樣,類(lèi)也利用單字符名字,大年夜小寫(xiě)法則也一樣。類(lèi)可以定義在一行當(dāng)中,也能夠分多行定義,例如,下面的示范為內(nèi)部類(lèi) w 賦值為系統(tǒng)的主機(jī)名,而系統(tǒng)可以有多個(gè)名字:
Cwmoon sun
Cwearth
Cwlocalhost
號(hào)令 F 是從文件中獲得類(lèi)的值,例如,可以把 moon、sun、earth 保留在 sendmail.cw 當(dāng)中,然后用 F 號(hào)令便可以實(shí)現(xiàn)同上述號(hào)令完全不異的成果:
Fw/etc/sendmail.cw
對(duì)類(lèi)的援引與宏的援引完全一樣,事實(shí)上宏就是一種類(lèi)。二者獨(dú)一的辨別在于:宏只能有一個(gè)獨(dú)一的值,而類(lèi)可以有多個(gè)值,當(dāng)然也能夠只有一個(gè)值。
O(設(shè)置選項(xiàng))
號(hào)令 O 是為 Sendmail 的選項(xiàng)賦值,賦給選項(xiàng)的值可所以字符串、整數(shù)或布爾值,所有的選項(xiàng)值都是直接由 Sendmail 來(lái)利用。寄望:這里所說(shuō)的選項(xiàng)與 Sendmail 利用的號(hào)令行參數(shù)不一樣。凡是環(huán)境下,不需要點(diǎn)竄這些選項(xiàng)。
T(定義可托任的用戶)
號(hào)令 T 用來(lái)定義一組用戶列表,這組用戶可利用 Sendmail 號(hào)令帶 -f 參數(shù)來(lái)點(diǎn)竄用戶發(fā)出的郵件地址。一般環(huán)境下,包含 root、daemon 和 uucp。治理員最好不要隨便添加其他的用戶,不然這類(lèi)權(quán)限在某些用戶手中可能會(huì)對(duì)系統(tǒng)安然構(gòu)成威脅。可托任的用戶可以在一行或多行中定義,可是被定義的用戶必需是 /etc/passwd 中的合法用戶。默許是:
Troot
Tdaemon
Tuucp
P(設(shè)置優(yōu)先級(jí))
Sendmail 利用號(hào)令 P 定義不合的優(yōu)先級(jí)來(lái)措置進(jìn)進(jìn)出局緩沖區(qū)的電子郵件。號(hào)令 P 定義的值越高,則優(yōu)先級(jí)也越高,缺省的優(yōu)先級(jí)為 0。負(fù)優(yōu)先級(jí)的電子郵件是不產(chǎn)生弊端信息的,是以在批量發(fā)送郵件是應(yīng)當(dāng)定義較底的優(yōu)先級(jí)。常常利用的優(yōu)先級(jí)為:
Pfirst-class=0
Pspecial-delivery=100
Plist=30
Pbulk=-60
Pjunk=-100
假定用戶在發(fā)送郵件是要指定優(yōu)先級(jí),則需要在郵件的首部中添加 Precedence,例如:
Precedence:bulk
K(關(guān)頭文件聲明)
特別的映照可以定義成:Kmapname mapclass arguments。此中,mapname 是可重寫(xiě)法則中利用這個(gè)映照的句柄,mapclass 是映照類(lèi)型的名字,arguments 的詮釋依托與映照類(lèi)型,凡是是包含映照的文件名。
V(建設(shè)版本級(jí)別)
供給與老版本建設(shè)文件的兼容機(jī)能。
M(定義郵件傳輸法度)
號(hào)令 M 定義郵件傳輸法度(mailer)的規(guī)格 / 具體參數(shù),其情勢(shì)為:Mname,[field=value]。
Sendmail 其實(shí)不是直接發(fā)送各類(lèi)各樣的電子郵件,它起首將要發(fā)送的郵件分類(lèi),然后交給響應(yīng)的 mailer 來(lái)發(fā)送,本身只發(fā)送基于 SMTP/TCP/IP 的郵件。此中,[IPC] 暗示利用 Sendmail 經(jīng)由過(guò)程 SMTP 來(lái)傳送郵件。關(guān)于 IPC mailer,在 Sendmail 的文檔里有一段特別的詮釋?zhuān)寒?dāng)法則集 0 解析到 IPC mailer 時(shí)會(huì)措置一些特別的過(guò)程。好比直接用 IP 地址發(fā)送郵件可以用 [128.32.149.78] 的情勢(shì),若用 [ucbvax.berkeley.edu] 將會(huì)被作為字符串傳遞,用如許的編制用戶可以機(jī)關(guān)一個(gè)特別的郵件地址,使本身的郵件按指定的線路發(fā)送,而凡是常利用戶是不關(guān)心也不知道本身郵件的發(fā)送線路的。
H(定義郵件的首部格局)
號(hào)令 H 定義 Sendmail 號(hào)令插進(jìn)電子郵件首部的行的格局。
R(定義重寫(xiě)法則)
重寫(xiě)法則是 Sendmail 建設(shè)文件的核心內(nèi)容,每個(gè)重寫(xiě)法則由號(hào)令 R 定義,其情勢(shì)以下:
Rpattern transformation comment
號(hào)令 R 中的字段由制表符進(jìn)行分隔,系統(tǒng)措置時(shí)忽視注釋字段(comment),模式字段(pattern)與改寫(xiě)字段(transformation)為該號(hào)令的核心。重寫(xiě)法則將輸進(jìn)地址與模式進(jìn)行匹配,假定匹配,則將該地址用法則中改寫(xiě)字段的法則重寫(xiě)為新的格局。每個(gè)法則都可以多次措置統(tǒng)一地址,這是因?yàn)榈刂吩谥貙?xiě)以后,仍要再次同該模式進(jìn)行匹配,假定仍然匹配則再次改寫(xiě),直到不再匹配為止(利用“$:”可以避免無(wú)限輪回)。
S(設(shè)置重寫(xiě)法則集)
法則集是一組可以用數(shù)字來(lái)援引的相干重寫(xiě)法則。號(hào)令 S 是法則集的開(kāi)端并付與其一個(gè)數(shù)字以便由郵件傳輸法度來(lái)調(diào)用。法則集可以被看感化來(lái)措置電子郵件地址的子法度或函數(shù)。具有特別功能并可由 sendmail 直接調(diào)用的法則集有 5 個(gè):
法則集 3:為最大年夜最復(fù)雜的法則集,也是用于地址的第一個(gè)法則集。它將地址轉(zhuǎn)化為正規(guī)情勢(shì),如:[email protected]。
法則集 0:利用于傳輸郵件的地址。必需在法則集 3 以后利用,并僅用于實(shí)際郵件傳輸中領(lǐng)受者的地址。其可以將地址解析成(mailer,host,user)的情勢(shì),由郵件傳輸者、領(lǐng)受方主機(jī)和領(lǐng)受用戶的名字構(gòu)成。
法則集 1:利用于動(dòng)靜中所有發(fā)送者地址。
法則集 2:利用于動(dòng)靜中所有領(lǐng)受者地址。
法則集 4:利用于動(dòng)靜中所有地址并將內(nèi)部地址格局轉(zhuǎn)化為外部地址格局。
安然建設(shè) sendmail.mc 文件
Sendmail 的建設(shè)十分復(fù)雜,其建設(shè)文件是 sendmail.cf,位于 /etc/mail 目次下。因?yàn)?sendmail.cf 的語(yǔ)法艱深難懂,很少有人會(huì)直接往點(diǎn)竄該文件來(lái)對(duì) Sendmail 辦事器進(jìn)行建設(shè)。我們一般經(jīng)由過(guò)程 m4 宏措置法度來(lái)生成所需的 sendmail.cf 文件。成立的過(guò)程中還需要一個(gè)模板文件,系統(tǒng)默許在 /etc/mail 目次下有一個(gè) sendmail.mc 模板文件。
用 m4 宏編譯東西成立 sendmail.cf 文件比較便利,并且不等閑犯錯(cuò),更可以避免某些帶有安然縫隙或過(guò)時(shí)的宏所釀成的粉碎。一個(gè) sendmail.mc 模板的大年夜致內(nèi)容以下:
pert(-1)dnl
……
include('/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID('setup for Red Hat)dnl
OSTYPE('Linux')dnl
……
dnl #
dnl define('SMART_HOST','smtp.your.provider')
dnl #
define('confDEF_USER_ID',''8:12'')dnl
define('confTRUSTED_USER', 'smmsp')dnl
dnl define( ′ confAUTO_REBUILD ′ )dnl
……
下面介紹 ndmail.mc 模板的語(yǔ)法構(gòu)成:
dnl:用來(lái)注釋各項(xiàng),同時(shí) dnl 號(hào)令還用來(lái)標(biāo)識(shí)一個(gè)號(hào)令的結(jié)束。
pert(-1):位于 mc 模板文件的頂部,目標(biāo)是讓 m4 法度輸出時(shí)加倍精簡(jiǎn)一些。
OSTYPE ('OperationSystemType'):定義利用的把持系統(tǒng)類(lèi)型,明顯這里應(yīng)當(dāng)用 Linux 代替 OperationSystemType,寄望要用一個(gè)反引號(hào)和一個(gè)正引號(hào)把對(duì)應(yīng)的把持系統(tǒng)類(lèi)型括起來(lái)。
define:定義一些全局設(shè)置,對(duì) Linux 系統(tǒng),設(shè)置了 OSTYPE 以后,可以定義下面的一些全局參數(shù),假定不定義,就利用默許值。下面給出例子:define('ALIAS_FILE','/etc/aliases'):定義別號(hào)文件 (alia file) 的保留路徑,默許是 /etc/aliases。Define('STATUS_FILE', '/etc/mail/statistics'):定義 sendmail 的狀況信息文件。
是以,用戶可以按照簡(jiǎn)單、直不雅的 sendmail.mc 模板來(lái)生成 sendmail.cf 文件,而不必直接編纂 sendmail.cf 文件??梢灾苯咏?jīng)由過(guò)程點(diǎn)竄 sendmail.mc 模板來(lái)達(dá)到定制 sendmail.cf 文件的目標(biāo)。這里介紹成立 sendmail.cf 文件的步調(diào):
(1)備份原有 sendmail.cf 文件:
#cp /etc/mial/sendmail.cf /etc/mail/sendmail.cf.BAK
(2)生成 sendmail.cf 文件,按照 sendmail.mc 模板文件產(chǎn)生 sendmail.cf 建設(shè)文件,并導(dǎo)出到 /etc/mail/ 目次下:
#m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
(3)重啟 Sendmail 辦事:
#service sendmail restart
在該文件中,有 6 個(gè)很是首要的參數(shù)需要進(jìn)行細(xì)心的設(shè)置,因?yàn)樗鼈儗?duì) Sendmail 辦事器的機(jī)能和應(yīng)對(duì)拒盡辦事報(bào)復(fù)打擊方面具有很大年夜的影響:
ConfCONNECTION_RATE_THROTTLE:該參數(shù)暗示辦事器可以或許接管的最大年夜連接數(shù)量。一般環(huán)境下 Sendmail 不會(huì)對(duì)其進(jìn)行限制。可是假定不設(shè)置,將會(huì)可能使得辦事器的機(jī)能“透支”,建議設(shè)置為:Define(’ confCONNECTION_RATE_THROTTLE ’ , 5);
ConfMAX_MESSAGE_SIZE:該參數(shù)暗示單個(gè)動(dòng)靜可接管數(shù)據(jù)的最大年夜限度(以字節(jié)為單位),此參數(shù)設(shè)置可以過(guò)濾一些異常的攜帶大年夜附件的郵件,從而減輕辦事器的傳輸壓力和存儲(chǔ)空間壓力,建議設(shè)置為:Define(’ ConfMAX_MESSAGE_SIZE ’ , 10000000);
ConfMIN_FREE_BLOCKS:此參數(shù)定義辦事器保留的用于領(lǐng)受郵件的余暇塊的最小數(shù)量,一般定義為 100 便可,即:Define(’ ConfMIN_FREE_BLOCKS ’ , 100);
ConfMAX_DAEMON_CHILDREN:此參數(shù)定義辦事器主過(guò)程可以或許派生的子過(guò)程的最大年夜數(shù)量,一般不宜過(guò)大年夜,設(shè)定為 10 便可,即:Define(’ ConfMAX_DAEMON_CHILDREN ’ , 10);
ConfMAX_HEADER_LENGTH:該參數(shù)定義動(dòng)靜頭的最大年夜限度(以字節(jié)為單位),定義該參數(shù)可以過(guò)濾部門(mén)黑客報(bào)復(fù)打擊,建議設(shè)置為:Define(’ ConfMAX_HEADER_LENGTH ’ , 16000);
ConfMAX_RCPTS_PER_MESSAGE:設(shè)定郵件最大年夜領(lǐng)受者的數(shù)量,對(duì)該參數(shù)進(jìn)行限制可以過(guò)濾大年夜量的垃圾郵件,因?yàn)槔]件一般都具有巨大年夜數(shù)量標(biāo)領(lǐng)受者。建議設(shè)置為:Define(’ ConfMAX_RCPTS_PER_MESSAGE ’ , 100)。
實(shí)戰(zhàn)安然建設(shè)利用 Qmail 郵件辦事器
Qmail 的建設(shè)文件是由多個(gè)文件構(gòu)成的,不是集中在一個(gè)文件中。每個(gè)文件節(jié)制響應(yīng)部門(mén)的功能和屬性,一個(gè)可履行法度可能有多個(gè)建設(shè)文件節(jié)制,所有的建設(shè)文件共同決定了 Qmail 運(yùn)行的實(shí)現(xiàn)和模式。這些建設(shè)文件都在 Qmail 的 control 目次中,即位于 /var/qmail/control 目次中。合理設(shè)定以下選項(xiàng),可以有效地加強(qiáng) Qmail 辦事器的安然機(jī)能。
(1)badmailfrom
這個(gè)建設(shè)文件是節(jié)制郵件系統(tǒng)拒盡領(lǐng)受的郵件地址和郵件域,主如果為了不垃圾郵件。假定一個(gè)郵件地址或郵件域被列進(jìn)到這個(gè)文件中,系統(tǒng)就會(huì)拒盡領(lǐng)受這個(gè)郵件地址發(fā)來(lái)的郵件,或拒盡郵件域下所有郵件地址發(fā)來(lái)的郵件。不外這個(gè)建設(shè)文件只是一般的垃圾郵件防備手段,對(duì)比較周全的垃圾郵件過(guò)濾手藝還要靠第三方軟件來(lái)實(shí)現(xiàn)。該文件的格局以下:
[email protected] // 拒盡這個(gè)地址發(fā)來(lái)的郵件
@deny.com // 拒盡這個(gè)郵件域下的所有帳號(hào)發(fā)來(lái)的郵件
(2)concurrencylocal
這個(gè)文件定義了 Qmail 可以同時(shí)送達(dá)的本地郵件的個(gè)數(shù)。這個(gè)參數(shù)的缺省值是 10,也就是說(shuō)系統(tǒng)承諾同時(shí)有 10 個(gè)郵件在本地送達(dá)。 concurrencylocal 這個(gè)參數(shù)的最大年夜值是由編譯時(shí)的 conf-spawn 參數(shù)來(lái)決定的,缺省值是 120,最大年夜值是 255。該值應(yīng)當(dāng)設(shè)置得當(dāng),設(shè)得過(guò)大年夜或太小會(huì)華侈或損掉 Qmail 辦事器的機(jī)能。
(3)concurrencyremote
這個(gè)參數(shù)定義了 Qmail 可以同時(shí)送達(dá)的遠(yuǎn)端郵件的個(gè)數(shù),這個(gè)參數(shù)的缺省值是 20。這個(gè)參數(shù)的最大年夜值也是由 conf-spawn 來(lái)決定的。設(shè)置的首要性猶如選項(xiàng)(2)所示。
(4)databyes
它定義了 qmail-smtpd 所承諾領(lǐng)受的郵件的最大年夜字節(jié)數(shù)。
這個(gè)參數(shù)的缺省值為 0,暗示對(duì)領(lǐng)受郵件的字節(jié)數(shù)沒(méi)有限制。假定要限制最大年夜的領(lǐng)受為 10M,把持以下:
echo 10485760 > /var/qmail/control/databytes
這是任何大年夜于 10M 的郵件城市被拒盡。這個(gè)參數(shù)最好合理設(shè)置,以避免歹意的對(duì)你辦事器發(fā)送大年夜量的超大年夜郵件,產(chǎn)生郵件辦事器負(fù)荷過(guò)大年夜,乃至系統(tǒng)解體的危險(xiǎn)。
(5)me
這個(gè)建設(shè)文件是 Qmail 系統(tǒng)十分首要的一個(gè)文件,假定這個(gè)文件不存在,Qmail 系統(tǒng)將沒(méi)法運(yùn)行。 me 是用來(lái)定義本地郵件辦事器的主機(jī)名的。有多個(gè)建設(shè)文件是和 me 有聯(lián)系關(guān)系的。假定那些建設(shè)文件不存在,系統(tǒng)默許會(huì)從 me 中讀取參數(shù)值的。me 這個(gè)建設(shè)文件一般都是在 Qmail 系統(tǒng)安裝時(shí)利用 configure-fast 來(lái)成立的。
(6)queuelifetime
這個(gè)建設(shè)文件是定義一個(gè)郵件在郵件隊(duì)列中存活的時(shí)候。
缺省值為 7 天(604800s),這個(gè)刻日掉落了今后 qmail-send 將會(huì)進(jìn)行最后一次的送達(dá)測(cè)驗(yàn)測(cè)驗(yàn),假定送達(dá)掉敗,該郵件將會(huì)從郵件隊(duì)列中刪除。
(7)rcphosts
這個(gè)建設(shè)文件也是 Qmail 一個(gè)十分首要的文件,這個(gè)文件是定義系統(tǒng)承諾轉(zhuǎn)發(fā)郵件的郵件域。 假定這個(gè)文件不存在或?yàn)榭?,你的系統(tǒng)將會(huì)領(lǐng)受 Internet 上所有的域的郵件轉(zhuǎn)發(fā),即你的系統(tǒng)是 Open relay(存在被歹意用戶作為垃圾郵件發(fā)送辦事器的危險(xiǎn)!!!)。建設(shè)文件 rcpthosts 最多可以撐持 50 個(gè)主機(jī)名和域名。假定超個(gè)這個(gè)數(shù)字,就需要保留到他的擴(kuò)充建設(shè)文件 morercphosts 中,然后利用 Qmail 的號(hào)令法度 qmail-newmrh (該文件一般在 /var/qmail/bin 目次下)來(lái)生成二進(jìn)制的 morercpthosts.cdb 文件,如許 qmail-smtpd 才可以從這個(gè)二進(jìn)制文件中讀守信息。
(8)virtualdomains
這也是 Qmail 的一個(gè)很是首要的建設(shè)文件,它定義了 Qmail 的虛擬郵件域,Qmail 連絡(luò) vpopmail 的虛擬域治理功能可以定義多個(gè)虛擬郵件域。
總結(jié)
本文作為本系列的第一部門(mén),具體介紹了企業(yè)開(kāi)源電子郵件系統(tǒng)的安然道理及 Sendmail、Qmail 安然防護(hù)實(shí)戰(zhàn)。第二部門(mén)將具體介紹 Postfix 的安然防護(hù)實(shí)戰(zhàn),和若何進(jìn)行企業(yè)垃圾郵件防備。