Sun Java System Messaging Server 6.3 管理指南

14.8 使用 Milter

本節包含以下小節:14.8 使用 Milter

14.8.1 Milter 簡介

Milter 是 Sendmail Content Management API 的簡短名稱。也表示使用此 API 編寫的軟體。Milter 提供協力廠商軟體外掛程式介面,以在郵件通過 MTA 時加以驗證、修改或封鎖。Milter 可處理郵件的連線 (IP) 資訊、訊息封協定元素、郵件標頭和/或郵件內文內容,以及修改郵件的收件者、標頭與內文。篩選器可能的用途包含拒絕垃圾郵件、病毒篩選與內容控制。一般說來,Milter 會以可延伸的方式嘗試解決對整個網站進行篩選的問題。Milter 最初是為了 sendmail 所設計,為 sendmail 所編寫的 Milter 現在可以搭配 Messaging Server 使用,不過會有些限制 (請參閱下列說明)。如需 Milter 的更多資訊,請參閱網際網路。

14.8.2 Milter/Messaging Server 作業原理

Milter 控制要在郵件上執行的動作。Messaging Server 控制 Milter 使用14.2.2 指定要篩選的郵件中所述方法,進行要對郵件執行的動作。

在 sendmail 中,Milter 包含 sendmail 本身與個別 libmilter 程式庫中的支援碼。篩選器編寫人員會將其篩選器連結至 libmilter 以產生伺服器。接著 sendmail 會配置並連線至這些 Milter 伺服器。

Messaging Server 提供列舉 Milter 介面 sendmail 端的程式庫。這可讓為 sendmail 編寫的 Milter 能搭配 Messaging Server 使用。

以下是幾點注意事項:Milter 通訊協定是由文字與二進位元素混合組成,且並未妥善記載。此外,Milter 語義與 sendmail 處理郵件的方式息息相關。尤其是 Milter 通常可存取 sendmail 配置中所定義的巨集子集。Messaging Server 的 Milter 用戶端程式庫會嘗試提供一組合理的 sendmail 巨集,但您可以根據目前尚未實作的特定 sendmail 配置編寫 Milter。結果是從網路擷取的自訂 Milter 不一定能與此用戶端程式庫搭配使用。如果問題惡化,我們將嘗試解決,但不保證從該處取得的每個 Milter 皆會成功。

14.8.3 Milter 需求與用法注意事項

Milter 伺服器可以在其自身的獨立系統上執行,在與 Messaging Server 在單一系統部署中相同的系統上執行,或在與 MTA 在兩層式部署中相同的系統上執行。在 MTA 與郵件儲存之間使用 LMTP 時,必須從 MTA 呼叫篩選,不得從訊息儲存呼叫。如果在 MTA 與郵件儲存之間使用 SMTP,則可以從任一方呼叫篩選,並可以在任一系統或獨立的協力廠商系統上執行篩選。

Messaging Server 支援連線至多部 Milter 伺服器。如果您指定的網域名稱翻譯至多重 IP 位址,系統將依據從 DNS 接收的順序嘗試所有位址,直到其中一個位址有作用為止。某些 DNS 伺服器支援任意排列之傳回的位址順序,因而提供原始負載平衡/容錯移轉功能。

14.8.3.1 支援的 Milter 郵件修改動作

Milter 介面目前支援的功能包含增加標頭 (SMFIF_ADDHDRS)、變更或刪除標頭 (SMFIF_CHGHDRS) 及隔離郵件 (SMFIF_QUARANTINE)。目前不支援變更郵件內文 (SMFIF_CHGBODY)、增加收件者 (SMFIF_ADDRCPT) 及刪除收件者 (SMFIF_DELRCPT)。

14.8.3.2 Milter 介面提供的巨集

下列是 Milter 介面目前定義的巨集:

$j 置於 Received: 標頭欄位的 by 陳述式中之文字。在 Messaging Server 中,這受到 RECEIVED_DOMAIN MTA 選項所控制。如果未設定此選項,會改用 local 通道上的官方主機。

${client_addr} SMTP 用戶端的 IP 位址,以帶點四碼值表示。僅在透過 TCP 使用 SMTP 時設定。

$i 目前郵件的佇列 ID。Messaging Server 會為每個階段作業產生唯一的 ID;此 ID 會如同 $i 巨集中所顯示。

${mail_addr} 目前作業事件的 MAIL FROM 位址。

${mail_host} 目前作業事件 MAIL FROM 位址之主機部分。

${rcpt_addr} 目前作業事件的 RCPT TO 位址。

${rcpt_host} 目前 RCPT TO 位址的主機部分。

Procedure部署 Milter

執行以下步驟以部署 Milter。

  1. 取得和配置將執行所需動作的 Milter。

    如需取得和配置資訊,請參閱特定的 Milter 文件。

  2. 載入和配置 Milter 用戶端程式庫。(請參閱14.2.1 載入與配置垃圾郵件篩選軟體用戶端程式庫。)

    1. 指定用戶端程式庫 libmilter.so 的路徑。指定 Milter 配置檔案的路徑與名稱。

      範例:


      spamfilter1_library=/opt/SUNWmsgsr/lib/libmilter.so
      spamfilterX_config_file=/opt/SUNWmsgsr/lib/milter.opt
    2. 建立 Milter 配置檔案,以及需要的選項。

      Milter 選項檔案是由 option=value 格式的多行所組成。兩個必要選項為 HOSTPORTHOST 必須設定為 Milter 伺服器執行所在的系統名稱,而 PORT 必須設定為 Milter 伺服器配置偵聽所在的連接埠。請注意,僅支援 TCP/IP 連線;無法指定或使用 UNIX 網域通訊端。

      在此選項檔案中還可以使用其他幾個選項:

      DEBUG (整數,預設值 0) — 啟用或停用 Milter 用戶端程式庫的除錯輸出。值愈大,會產生愈多除錯輸出。0 不會產生輸出。1 會提供基本除錯。2 增加 TCP 通訊記錄。(來自 Milter 伺服器的除錯輸出,一般受到用以啟動伺服器的指令行上之設定所控制。請注意,大部分的 Milter 似乎僅會提供直接除錯輸出至 syslog 的功能。)

      TIMEOUT (整數,預設值 3600) — 指定 Milter 連線作業的逾時值 (以百分之一秒為單位)。適用於 6.3 和更新版本。

      SOCKS_HOST (字串,預設值 "") — 指定中間 SOCKS 伺服器的名稱。如果已指定此選項,則可透過指定的 SOCKS 伺服器間接地建立 Milter 連線。

      SOCKS_PORT (整數,預設值 1080) — 指定中間 SOCKS 伺服器執行所在的連接埠。

      SOCKS_PASSWORD (字串,預設值 "") — 指定透過 SOCKS 伺服器用於建立連線的密碼。是否需要使用者名稱密碼視 SOCKS 伺服器的配置而定。

      SOCKS_USERNAME (字串,預設值 "") — 指定透過 SOCKS 伺服器用於建立連線的使用者名稱。

  3. 指定要傳送至 Milter 的郵件。

    可以依使用者、網域或通道篩選郵件。請參閱14.2.2 指定要篩選的郵件

  4. 請設定 option.dat 檔案中的 spamfilterX_string_action 選項:

    spamfilterX_string_action=data:,$M

    此設定會無條件使用,但必須在 Milter 的 MTA 選項檔案中才能運作正常。