跳轉到內容

Ict-創新/LPI/108.3

來自華夏公益教科書,為開放世界提供開放書籍

108.3 郵件傳輸代理 (MTA) 基礎

[編輯 | 編輯原始碼]

考生應瞭解常用的 MTA 程式,並能夠在客戶端主機上執行基本的轉發和別名配置。其他配置檔案不在此範圍內。


關鍵知識領域

  • 建立電子郵件別名。
  • 配置電子郵件轉發。
  • 瞭解常用的 MTA 程式(postfix、sendmail、qmail、exim)(不含配置)

郵件系統架構

[編輯 | 編輯原始碼]

郵件系統由許多元件構成,如圖所示。

圖 108.3-1: 郵件系統架構

郵件使用者代理 (MUA) 是終端使用者直接與之互動以撰寫或閱讀電子郵件的程式。MUA 通常允許使用者將郵件組織到本地機器上的資料夾中。例如,Kmail、Evolution、pine、mutt、elm 等等。

郵件傳輸代理 (MTA) 是執行郵件傳遞“長途”的程式。它們將訊息傳遞到目標域的郵件伺服器。MTA 在埠 25 上監聽,並使用 SMTP(簡單郵件傳輸協議)來傳輸訊息。通常,MTA 被配置為接受發往一個或多個“本地”域的入站郵件,以及接受來自本地網路上的 MUA 的出站郵件。MTA 不應被配置為中繼郵件(即,將郵件從一個遠端 MTA 轉發到另一個),也不應接受來自遠端、未經身份驗證的 MUA 的郵件。這種“開放式中繼”為垃圾郵件傳送者提供了完美的掩護,並可能導致您的伺服器被列入黑名單。

歷史上,sendmail 一直是最受歡迎的郵件傳輸代理,並且仍然被廣泛使用。它的配置檔案以複雜著稱。其他 MTA 包括 postfix、exim 和 qmail。

郵件遞送代理 (MDA) 處理郵件的本地傳遞。訊息可以傳遞給個人、郵件列表、檔案,甚至傳遞給程式。有幾種 MDA 在使用中。例如,Postfix 可以充當 MDA,將郵件直接傳遞到使用者的郵箱。其他 MDA 包括 procmail 和 Dovecot 的“deliver”元件。

郵件訪問代理 (MAA) 將郵件伺服器上的郵箱中的訊息傳遞給使用者的 MUA。兩種協議在使用中比較普遍:POP3 和 IMAP。POP3 在網際網路服務提供商中很受歡迎;通常,訊息從郵件伺服器下載到使用者的本地機器。然後,這些訊息從伺服器中刪除,因此使用者負責長期儲存。IMAP 通常由企業郵件伺服器使用。使用 IMAP,郵件伺服器通常負責使用者郵件的長期儲存。MAA 的示例包括 imapd、qpopper 和 dovecot。

歷史上,sendmail 一直是最廣泛使用的 MTA。通常,用於停止或啟動 sendmail 守護程序的 sendmail 指令碼位於 /etc/rc.d/init.d/ 目錄中。

sendmail 的主要配置檔案是 /etc/mail/sendmail.cf (或 /etc/sendmail.cf)。 在這裡,您可以指定伺服器的名稱以及允許郵件中繼的來源和目標主機的名稱。該檔案包含一系列複雜的規則,這些規則控制郵件地址的重寫以及傳遞機制的選擇。一些關鍵選項包括

sendmail.cf 選項
Cw 郵件主機名。也可以包含郵件伺服器將假定的主機名或域名列表,但最好使用 Fw 來實現這一點
Fw 指向包含 sendmail 將接收郵件的域名的檔案的路徑
Ds '智慧主機' 的地址,這是一個將中繼我們的出站郵件的郵件伺服器

對於 LPI 認證,您不需要知道如何編寫 sendmail.cf 規則。事實上,這些規則通常是使用 sendmail.m4 或 sendmail.mc 宏檔案生成的,透過執行以下命令來生成 sendmail.cf 檔案

m4 sendmail.mc > sendmail.cf

此過程不屬於 LPI 目標。

Sendmail 使用檔案 /etc/mail/local-host-names 來確定它應該為哪些郵件域接收郵件。此檔案必須列出此伺服器將處理(傳入)郵件的所有機器和域名。如果您更改此檔案,則必須向 sendmail 傳送一個 HUP 訊號,以便它注意到更改。

Sendmail 通常作為守護程序執行,在埠 25 上監聽 SMTP 訊息。它也可以從命令列呼叫,以注入郵件訊息或檢查和管理郵件佇列。postfix 等備用 MTA 透過提供相容的命令列介面來模擬 sendmail 的行為。這包括命令 mailq、newaliases 和 sendmail 命令本身。

別名和郵件轉發

[編輯 | 編輯原始碼]

別名允許系統管理員或單個使用者重新路由郵件。別名允許您定義郵件列表,或允許使用者使用多個名稱進行引用。

檔案 /etc/aliases 定義系統範圍的別名。(實際上,此檔案的路徑名由 sendmail.cf 中的“AliasFile”引數指定,因此它在您的系統上可能有所不同。/etc/mail/aliases 是一個常見的備用位置。)此檔案中的每一行都包含兩個欄位,如下所示

alias: address_1,address_2,address_3, ...

第一個欄位是別名名稱。別名地址可以是

本地使用者名稱(例如:benjamin)

本地檔名(例如:/tmp/maildrop)

命令(例如:| someprogram)

別名的一個簡單用法是為使用者定義一個備用郵件名稱。例如,如果使用者 Fred Flintstone 有一個名為 fred 的 Linux 帳戶,則 /etc/aliases 中的一行,例如

flintstone: fred

將允許 fred 以 flintstone 的名稱接收郵件。

您甚至可以使用別名將郵件重定向到遠端域,例如

flintstone: fred@somewhere.else.com

(但請注意,如果存在名為 flintstone 的本地帳戶,此行將阻止他接收任何電子郵件!)

您也可以使用別名來定義郵件列表,例如

authors: tom, dick, harry@somewhere.else.com

有關其他選項,請參閱聯機幫助頁 aliases(5)。

對 /etc/aliases 檔案進行更改時,必須執行 newaliases 命令來重建別名資料庫 /etc/aliases.db。這是 sendmail 在執行時查詢的檔案。

單個使用者可以透過將條目放入檔案 ~/.forward 來建立郵件別名。

此檔案包含一行上用逗號分隔的地址列表,或多行上單獨的條目。例如,使用者可以選擇將他的電子郵件轉發到其他站點,並將其儲存到本地檔案,在 ~/.forward 中使用以下條目

"/home/james/archive", james@example.com


郵件佇列

當郵件被郵件伺服器接受時,它將被放置到訊息儲存中(在上面的圖中顯示為“郵箱”)。訊息儲存使用兩種格式。最古老(也是最簡單)的格式是 mbox 格式。使用此格式,每個使用者的郵件都儲存在一個檔案中(通常是 /var/spool/mail/fred,用於使用者 fred)。這是一個純文字檔案;訊息在到達時被簡單地追加到檔案中。每條訊息的開頭由一個“From”行標記。

訊息儲存的另一種格式是 maildir 格式。maildir 訊息儲存有三個目錄,名為 tmp、new 和 cur。這些目錄通常位於使用者主目錄中的 mail 子目錄中。maildir 訊息格式將每條訊息儲存在單獨的檔案中。

根據使用的郵件使用者代理(mutt、pine、elm…),使用者可以將這些訊息儲存在他自己的主目錄中,或者將它們下載到另一臺機器上。

所有出站郵件都快取在 /var/spool/mqueue 中。如果網路中斷或速度很慢,或者正在傳送許多訊息,那麼郵件會在郵件快取佇列中積累。 您可以使用 mailq 實用程式或 sendmail –bp 查詢佇列。

管理員可以使用 sendmail –q 清空伺服器的佇列。


備用 MTA

Sendmail 目前是 RedHat、Fedora 和許多其他 Linux 發行版的預設 MTA。但是,可以使用許多 MTA 作為替代。這些包括

Qmail 是由 Dan Bernstein 編寫的 MTA,作為“安全、可靠、高效、簡單的郵件傳輸代理”。雖然最初 qmail 沒有開放許可,但現在它是開源的,可以自由地重新分發。與大多數 MTA 一樣,qmail 遵守 /etc/aliases 檔案,並提供 newaliases 命令來處理它。用於管理 qmail 訊息佇列的相關工具包括 qmail-read、qmail-stat 和 qmhandle。

Exim 是在劍橋大學開發的 MTA。它執行在 UNIX 和 Linux 上,並在 GPL 許可下提供。

Postfix 是由 Wietse Venema 編寫的 MTA,它是在 IBM 公共許可證 vsn 1.0 下發布的。Postfix 模組化程度很高。每個操作都由一個獨立的可執行檔案執行,該檔案僅以執行工作所需的最低許可權執行。各個元件由主守護程序啟動;這由檔案 /etc/postfix/master.cf 配置。Postfix 的所有配置都在 /etc/postfix 中完成;主要配置檔案是 main.cf。postconf 命令用於檢查和修改此檔案中定義的引數。Postfix 以其安全性著稱,配置起來也相對簡單。在 sendmail 之後,它可能是最受歡迎的 MTA,並且在 Ubuntu 中預設使用。


郵件傳遞和 DNS

MTA 需要找到要向其傳遞郵件的域的郵件伺服器。它們透過查詢 DNS 以獲取要到達的域的 MX(郵件交換器)記錄來做到這一點。例如,如果 MTA 將郵件傳遞到 fred@example.com,它將查詢 DNS 以獲取 example.com 域的 MX 記錄。此記錄指示域郵件伺服器的名稱。如果您正在配置郵件伺服器,則需要新增(或要求您的 ISP 新增)您的域的 DNS MX 記錄以指向您的機器。

最後,為了使用域名作為有效的電子郵件地址,需要在您的域的權威名稱伺服器(通常是您的 ISP)上新增 MX 記錄。

您還需要將域名新增到 /etc/mail/local-host-names



以下是使用檔案、術語和實用程式的部分列表:* ~/.forward

  • sendmail 模擬層命令
  • newaliases
  • mail
  • mailq
  • postfix
  • sendmail
  • exim
  • qmail


上一章 | 下一章

華夏公益教科書