Sun Java logo     上一個      目錄      索引      下一個     

Sun logo
Sun Java System Messaging Server 6 2005Q1 管理指南 

第 9 章
MTA 位址轉換和路由

在 Messaging Server 6 2003Q4 之前的版本中,Messaging Server 通常從由儲存在 LDAP 伺服器中的資訊編譯而來的資料庫中存取所有使用者、網域和群組資料。LDAP 伺服器中的目錄資訊更新時,資料庫資訊會透過名為 dirsync 的程式同步更新。Messaging Server MTA 現在可直接存取 LDAP 目錄。本章描述在 MTA 中使用直接 LDAP 資料存取的資料流程。本章包含以下各節:


直接 LDAP 演算法與實作

以下各節描述直接 LDAP 處理作業。

確定網域位置

位址轉換和路由程序首先會從 user@domain 形式的位址開始檢查 domain 是否在本機。

重寫規則機制

MTA 重寫規則機制中新增了一項功能,可用於檢查給定字串是否為需要在本機進行處理的網域。這項新功能由 $V$Z 中介字元啟動。這些新的元字元在語法結構上類似於現有的 $N$M$Q 以及 $C 中介字元,也就是說,它們後面都跟有式樣字串。如果是 $N$M$Q 以及 $C,式樣要符合來源通道或目標通道。如果是 $V$Z,式樣要為一個網域,並且系統會檢查該網域是否在本機。$V 會導致用於非本機網域的規則失敗,而 $Z 會導致用於本機網域的規則失敗。

這些元字元的處理按照以下程序進行:

  1. Messaging Server 進行檢查以查看目前網域是否與目錄中有效的網域項目相符。如果不存在項目,則移至步驟 3。
  2. 如果網域在目錄中有項目,則將從網域項目中襭取 LDAP_DOMAIN_ATTR_ROUTING_HOSTS MTA 選項 (預設 mailRoutingHosts) 所指定的屬性。如果該屬性存在,便會列出能夠處理該網域中使用者的一組主機。此清單會與 local.hostname configutil 參數指定的主機以及 local.imta.hostnamealiases configutil 參數指定的主機清單進行比較。這些選項可以分別由 LDAP_LOCAL_HOSTLDAP_HOST_ALIAS_LIST MTA 選項置換。如果存在相符項目或網域中不存在該屬性,則該網域為本機。如果不存在相符項目,則該網域為非本機。
  3. 由於 mailRoutingHosts 屬性取決於 ROUTE_TO_ROUTING_HOST MTA 選項的設定,因此網域的處理被視為非本機。如果該選項設定為 0 (預設),則位址只會被作為非本機進行處理,而 MTA 重寫規則被用於確定路由。如果該選項設定為 1,則由 LDAP_DOMAIN_ATTR_ROUTING_HOSTS MTA 選項列出的第一個值組成的來源路徑會置於位址之前。

  4. 如果找不到網域項目,請移除網域左側的一個元件並移至步驟 1。如果沒有剩餘任何元件,請繼續執行步驟 4。
  5. 這種向上回溯網域樹的結果是,如果 domain.com 被識別為本機,則 domain.com 的任何子網域都將被識別為本機。您有時可能不希望發生這種情況,因此我們提供 MTA 選項 DOMAIN_UPLEVEL 來控制這種運作方式。具體來說,DOMAIN_UPLEVEL 的位元 0 (值 = 1) (如果清除) 可停用使用已移除網域元件進行重試。DOMAIN_UPLEVEL 的預設值為 0。

  6. 現在需要執行虛名網域檢查。虛名網域不包含網域項目,更確切地說,它們是透過附加特殊網域屬性到一個或多個使用者項目而指定的。虛名網域檢查的執行方法是,使用 DOMAIN_MATCH_URL MTA 選項指定的 LDAP URL 來執行 LDAP 搜尋。該選項的值應設定為:
  7. ldap:///$B?msgVanityDomain?sub?(msgVanityDomain=$D)

    $B 可替換 local.ugldapbasedn configutil 參數的值;這個值為目錄中使用者樹的基底目錄。LDAP_USER_ROOT MTA 選項可用於置換該 configutil 選項專用於 MTA 的值。

    由此搜尋傳回的實際值無關緊要,重要的是是否傳回值。如果傳回值,則該網域被視為本機;如果未傳回值,則該網域被視為非本機。

確定網域位置的網域對映

另請注意,為尋找目錄中有效的網域項目執行了哪些步驟。這些步驟是模式級別特定的。如果是 Sun LDAP Schema 1,則步驟為:

  1. 將網域轉換成網域樹中的基底 DN。執行方法是,將網域轉換成一系列 dc 元件,然後加入網域根字尾。預設字尾取自 service.dcroot configutil 參數。預設字尾為 o=internet。因此,a.b.c.d 形式的網域通常會被轉換成 dc=a,dc=b,dc=c,dc=d,o=internet。透過設定 LDAP_DOMAIN_ROOT MTA 選項,可以置換 service.dcroot configutil 參數。
  2. 查找包含步驟 1 中的基底 DN 以及物件類別 inetDomaininetDomainAlias 的項目。透過設定 LDAP_DOMAIN_FILTER_SCHEMA1 MTA 選項 (預設為 (|(objectclass=inetDomain)(objectclass=inetdomainalias)),可以置換用於此目的的搜尋篩選器。
  3. 如果找不到任何項目,則以失敗告終。
  4. 如果找到的項目之物件類別為 inetDomain,請檢查以確認該項目具有與網域項目關聯的 inetDomainBaseDn 屬性。如果它存在,則其被儲存以用於以後的使用者項目搜尋,並且處理作業將終止。如果它不存在,則假定該項目為網域別名,並且處理作業將繼續進行步驟 5。MTA 選項 LDAP_DOMAIN_ATTR_BASEDN 可用於置換 inetDomainBaseDN的使用。
  5. 該項目一定為網域別名;請查詢由 aliasedObjectName 屬性參考的新項目並返回至步驟 4。如果存在非 aliasedObjectName 屬性,則處理作業會終止並顯示失敗。替代 aliasedObjectName 屬性的使用可由 MTA 選項 LDAP_DOMAIN_ATTR_ALIAS 來指定。
  6. 請注意,處理作業最多只能返回步驟 4 一次;不允許網域別名指向網域別名。

在 Sun LDAP Schema 2 中,所採取的動作更為簡單:在目錄中搜尋包含物件類別 sunManagedOrganization 的項目,其中網域顯示為 sunPreferredDomainassociatedDomain 屬性的值。如果需要,可分別使用 MTA 選項 LDAP_ATTR_DOMAIN1_SCHEMA2LDAP_ATTR_DOMAIN2_SCHEMA2 置換用於此目的的 sunPreferredDomainassociatedDomain 屬性的使用。此搜尋在 service.dcroot configutil 參數所指定的根下進行。透過設定 LDAP_DOMAIN_ROOT MTA 選項,可以置換 service.dcroot configutil 參數。此外,Schema 2 中的網域項目無須具有 inetDomainBaseDn 屬性﹔如果它們不具有該屬性,則假定使用者樹的基底目錄為網域項目本身。

網域位置資訊的快取

由於網域重寫作業執行的頻率和目錄查詢 (尤其是虛名網域檢查) 的耗用,有關網域的消極指示和積極指示都需要快取。這項作業透過記憶體中開放式鏈接的動態延伸雜湊表來實作。快取記憶體的最大容量由 DOMAIN_MATCH_CACHE_SIZE MTA 選項設定 (預設 100000),快取記憶體中項目的逾時由 DOMAIN_MATCH_CACHE_TIMEOUT MTA 選項設定 (預設 600 秒)。

錯誤處理

必須仔細處理此程序期間發生的暫時性伺服器故障,因為當這些故障發生時,我們不可能知曉給定的網域是否為本機。在這種情況下,基本上可能有兩種結果:

  1. 傳回一個暫時性 (4xx) 錯誤至用戶端,告知用戶端稍後再試該位址。
  2. 接受該位址,但使其在重新處理通道中形成佇列以便稍後可以在本機重試該位址。

任何一個選項都不能適用於所有情況。例如,在與遠端 SMTP 轉送器對話時結果 1 適用。但在處理來自本機使用者的 SMTP 提交作業時結果 2 適用。

雖然在理論上可以使用具有同一式樣的多個規則來處理暫時性故障,但重複此類查詢所耗用的時間 (即使使用適當的快取記憶體) 實在難以接受。由於這些原因,網域重寫作業的這種簡單的成功/失敗至下一規則匹配模型是不夠的。在網域查詢發生故障的情況下,應使用由 MTA 選項 DOMAIN_FAILURE 指定的特殊範本。當 $V 作業失敗時,該範本會取代正在處理的目前重寫規則範本的剩餘項目。

網域檢查重寫規則的式樣

需要在其他重寫規則有機會運作之前執行此網域檢查。在規則的左側使用特殊的 $* 可確保這種排序。$* 式樣在任何其他規則之前接受檢查。

綜合全部

如果要考量目前為止所述的全部機制,在 imta.cnf 中我們需要新的重寫規則,即:

$*        $E$F$U%$H$V$H@localhost

並且在 option.dat 檔案中 DOMAIN_FAILURE MTA 選項的值需為:

reprocess-daemon$Mtcp_local$1M$1~-error$4000000?Temporary lookup failure

在此重寫規則中,localhost 為與本機通道相關的主機名稱。此處所示的 DOMAIN_FAILURE 選項的值為預設值,因此,在一般情況下不必顯示在 option.dat 中。

此處的排序尤其微妙。MTA 會在重建位址之後新增路由之前檢查 $V。這可讓 MTA 在發生暫時性查詢故障的情況下變更路由。每當插入點發生變更時會套用擱置通道匹配檢查,因此第二個 $H 之後的 @ 會呼叫該檢查。如果檢查成功,則套用範本的剩餘項目並結束重寫處理。如果檢查失敗,則重寫失敗且重寫作業繼續執行下一個可套用的重寫規則。如果因暫時性故障而不能執行檢查,範本處理會繼續執行由 DOMAIN_FAILURE MTA 選項指定的值。此範本的值首先將路由主機設定為 reprocess-daemon。然後,此範本檢查 MTA 是否正在處理某種重新處理通道或 tcp_local。如果 MTA 正在處理此類通道,則該規則繼續,使路由主機變為非法並指定一個暫時性故障作為結果。如果 MTA 未在處理此類通道,該規則會被截斷並成功終止,因此將位址重寫至重新處理通道。

本機位址的別名延伸

當某個位址被確定為與本機通道關聯後,系統將自動對其進行別名延伸。別名延伸程序會檢查大量資訊來源,包括:

  1. Alias 檔案 (已編譯配置的一部分)。
  2. Alias 資料庫。
  3. Alias URL。

所檢查的確切別名來源以及檢查的次序取決於 option.dat 檔案中 ALIAS_MAGIC MTA 選項的設定。對於直接 LDAP,請將此選項設定為 8764。這意味著首先檢查由 ALIAS_URL0 MTA 選項指定的 URL,然後檢查由 ALIAS_URL1 MTA 選項指定的 URL,再檢查由 ALIAS_URL2 MTA 選項指定的 URL,最後檢查 Alias 檔案。此設定在使用中時,不檢查 Alias 資料庫。

使用 LDAP URL 檢查別名

對 LDAP 中別名的檢查透過指定兩個特殊的 LDAP URL 作為 Alias URL 來實作。第一個 Alias URL 處理一般使用者和群組,隨後的 Alias URL 處理虛名網域。指定第一個 URL 為 ALIAS_URL0

ALIAS_URL0=ldap:///$V?*?sub?$R

$V 中介字元

元字元延伸發生在 URL 查詢之前。ALIAS_URL0 的值中使用的兩個元字元分別為 $V$R

$V 中介字元可將位址的網域部分轉換成基底 DN。這類似於 $V 重寫規則元字元所執行的初始步驟 (先前已在「重寫規則機制」一節中描述)。$V 處理作業包括以下步驟:

  1. 取得目前網域中使用者項目的基底 DN。
  2. 取得目前網域的關聯標準網域。在 Sun LDAP Schema 1 中,如果網域項目具有 inetCanonicalDomainName 屬性,則標準網域名稱由該屬性提供。如果沒有該屬性,標準名稱則以簡易方式從實際網域項目的 DN 建構而成。當目前網域為別名時,標準名稱與目前網域會有所不同。用於儲存標準名稱的名稱屬性可由 option.dat 檔案中的 LDAP_DOMAIN_ATTR_CANONICAL MTA 選項來置換。
  3. 在 Sun LDAP Schema 2 中,標準名稱即為 SunPreferredDomain 屬性的值。

  4. 如果基底 DN 存在,將其替換為代替 $V 的 URL。
  5. 現在確定適用於此項目的所有託管網域。執行方法是,比較標準網域 (如果清除 DOMAIN_UPLEVEL 的位元 2 [值 = 4]) 或目前網域 (如果設定 DOMAIN_UPLEVEL 的位元 2 [值 = 4]) 與 service.defaultdomain configutil 參數。如果不相符,則該項目為託管網域的成員。透過設定 option.dat 檔案中的 LDAP_DEFAULT_DOMAIN MTA 選項,可以置換 service.defaultdomain configutil 參數。
  6. 如果基底 DN 確定失敗,請移除網域左側的一個元件並移至步驟 1。如果沒有剩餘任何元件,則替換失敗。

$V 還接受可選的數值引數。如果該引數設定為 1 (例如,$1V),則忽略解析網域樹中的網域時發生的故障,並傳回 local.ugldapbasedn configutil 選項所指定的使用者樹的基底目錄。

如果嘗試擷取網域基底 DN 成功,MTA 還會擷取數個日後將會需要的有用的網域屬性。所擷取的屬性名稱由 option.dat 檔案中的以下 MTA 選項設定:

從 URL 呼叫對映

在有些特殊情況下,需要以其他方式執行從網域至基底 DN 的對映。為適應此類設定,URL 解析程序提供了呼叫 MTA 對映的功能。該功能透過一個元字元序列來執行,其一般形式為:

$|/mapping-name/mapping-argument|

雙引號 (") 可啟動和終止呼叫。緊接 $ 之後的字元為對映名稱與引數之間的分隔符號;所選擇的字元應與對映名稱或引數中使用的預期字元值不發生衝突。

$R 中介字元

$R 中介字元可為 URL 提供適當的篩選器。其目的是產生一個篩選器,用於搜尋可能包含特定使用者或群組之電子郵件位址的所有屬性。要搜尋的屬性清單來自 configutil 參數 local.imta.mailaliases。如果未設定此參數,則會檢查 local.imta.schematag configutil 參數,並根據其值選擇一組適當的預設屬性,如下所示:

sims401mail, rfc822mailalias

nms41mail,mailAlternateAddress

ims50mail,mailAlternateAddress,mailEquivalentAddress

local.imta.schematag 的值可以是一個以逗號分隔的清單。如果支援多個模式,則可使用屬性的組合清單 (重複屬性要排除)。LDAP_SCHEMATAG MTA 選項可用於置換 local.imta.schematag 專用於 MTA 的設定。

此外,篩選器不僅搜尋最初提供的位址,還搜尋具有同一本機部分但網域實際在網域樹中找到的位址 (在「$V 中介字元」一節的步驟 2 中儲存)。網域樹查詢的反覆性意味著這兩個位址可以不同。這項額外的檢查由 option.dat 檔案中 DOMAIN_UPLEVEL MTA 選項的位元 1 (值 = 2) 來控制。設定此位元會啟用額外的位址檢查。DOMAIN_UPLEVEL 的預設值為 0。

例如,假定網域 siroe.com 顯示在網域樹中。假設強制使用 Sun LDAP Schema 1,查詢位址

u@host1.siroe.com

$R 的延伸和 ims50 schematag 所產生的篩選器如下所示:

(|(mail=u@siroe.com)
     (mail=u@host1.siroe.com)
     (mailAlternateAddress=u@siroe.com)
     (mailAlternateAddress=u@host1.siroe.com)
     (mailEquivalentAddress=u@siroe.com)
     (mailEquivalentAddress=u@host1.siroe.com))

另一方面,如果 DOMAIN_UPLEVEL 設定為 1 而非 3,則篩選器如下所示:

(|(mail=u@host1.siroe.com)
     (mailAlternateAddress=u@host1.siroe.com)
     (mailEquivalentAddress=u@host1.siroe.com))

確定要取回的屬性

如果 URL 為要傳回的屬性清單指定 *,則可使用 MTA 能夠使用的屬性清單來取代星號。此清單由指定 MTA 所使用的選項之各種 MTA 選項設定自動產生。

處理 LDAP 錯誤

在此處,結果 URL 可用於執行 LDAP 搜尋。如果發生某種 LDAP 錯誤,處理作業會終止,並顯示暫時性故障的指示 (SMTP 中的 4xx 錯誤)。如果 LDAP 作業成功但無法產生結果,系統會檢查從 LDAP_DOMAIN_ATTR_CATCHALL_ADDRESS MTA 選項擷取的網域之 catchall 位址屬性。如果已設定該屬性,其值會取代目前位址。

如果沒有設定 catchall 位址屬性,系統會檢查從 LDAP_DOMAIN_ATTR_SMARTHOST MTA 選項擷取的網域之 smarthost 屬性。如果已設定該屬性,則建立

@smarthost:user@domain

形式的位址,而別名處理作業會成功終止並顯示此結果。此外,取自 LDAP_DOMAIN_ATTR_CONVERSION_TAG MTA 選項的網域之轉換標記 (如果有) 將會附加至該位址,以在轉寄給智慧主機之前完成轉換。如果該網域沒有 catchall 位址或智慧主機,此 Alias URL 的處理作業將以失敗告終。

對 LDAP 結果的正常性檢查

LDAP 搜尋傳回結果後,系統將檢查該結果,以驗證其中是否只有一個項目。如果有多個項目,系統會檢查每個項目是否具有用於使用者或群組的正確物件類別、非刪除狀態以及用於使用者的 UID。未通過該檢查的項目會被忽略。如果多個項目的清單透過此檢查縮減為一個項目,處理作業將繼續。如果沒有,則傳回錯誤,指明目錄重複或模糊。

支援虛名網域

ALIAS_URL0 檢查適用於普通使用者或託管網域中的使用者。如果檢查失敗,還會執行虛名網域檢查。此檢查透過以下 Alias URL 完成:

ALIAS_URL1=ldap:///$B?*?sub?(&(msgVanityDomain=$D)$R)

支援 Catchall 位址

最後,需要在 mailAlternateAddress 屬性中對 @host 形式的 catchall 位址執行檢查。在託管網域和虛名網域中均允許使用這種萬用字元形式,因此其正確的 Alias URL 為:

ALIAS_URL2=ldap:///$1V?*?sub?(mailAlternateAddress=@$D)


注意

在直接 LDAP 模式中,+* 子位址替換機制始終與 catch-all 位址配合運作,但替換的字串僅是子位址,而非整個本機部分。這種情況已經變更,因此當使用此建構時,原始位址的整個本機部分將被作為子位址插入 catch-all 位址中。

例如,給定形式為 foo+bar@domain.com 的位址,在 domain.com 網域中無本機使用者 foo,而且 domain.com 的 catch-all 位址形式為 bletch+*@example.com,則現在的結果位址將是 bletch+foo+bar@example.com。以前則是 bletch+bar@example.com


處理 LDAP 結果

LDAP 別名結果處理作業依次序分成許多階段完成。以下各節會描述這些階段。

物件類別檢查

如果別名搜尋成功,系統將檢查項目的物件類別,以確定它包含用於使用者或群組的一組適當的物件類別。用於使用者和群組的所需物件類別之可能的集合通常由使用中的 schematag 來確定。即由 local.imta.schematag 設定來確定。

表 9-1 顯示由各種 schematag 值所確定的使用者和群組物件類別。

表 9-1  各種 schematag 值所確定的物件類別

schematag

使用者物件類別

群組物件類別

sims40

inetMailRouting+inetmailuser

inetMailRouting+inetmailgroup

nms41

mailRecipient + nsMessagingServerUser

mailGroup

ims50

inetLocalMailRecipient+inetmailuser

inetLocalMailRecipient+inetmailgroup

如同其餘模式標記處理一樣,本表中的資訊是程序內定的。但是,在 option.dat 檔案中還有兩個 MTA 選項,即 LDAP_USER_OBJECT_CLASSESLDAP_GROUP_OBJECT_CLASSES,設定這兩個選項可分別為使用者和群組指定不同的物件類別集合。

例如,模式標記設定 ims50,nms41 等效於以下選項設定:

LDAP_USER_OBJECT_CLASSES=inetLocalMailRecipient+inetmailuser, mailRecipient+nsMessagingServerUser

LDAP_GROUP_OBJECT_CLASSES=inetLocalMailRecipient+inetmailgroup,mailGroup

如果 LDAP 結果不具有適用於使用者或群組的一組正確的物件類別,則會被忽略。MTA 還會確定它是否正在處理使用者或群組,並儲存該資訊。以後會多次用到這項儲存的資訊。

請注意,此處所述的物件類別設定還可用於建構實際 LDAP 搜尋篩選器,以用於檢查項目是否具有用於使用者或群組的正確物件類別。此篩選器可透過 $K 中介字元來存取。它還被內部儲存在 MTA 的配置中,以供通道程式使用,並會在使用指令 imsimta cnbuild -option 時作為 LDAP_UG_FILTER 選項寫入 MTA 選項檔案 option.dat 中。該選項僅被寫入此檔案。MTA 永遠不會從此選項檔案中讀取它。

項目狀態檢查

接著會檢查項目的狀態。狀態屬性有兩個,一個用於一般項目,另一個專用於郵件服務。

表 9-2 顯示 schematag 項目中根據生效的 schematag 要進行檢查的一般與郵件特定的使用者或群組屬性。

表 9-2  要檢查的屬性

schematag

類型

一般

郵件特定

sims40

使用者

inetsubscriberstatus

mailuserstatus

sims40

群組

inetmailgroupstatus

nms41

使用者

mailuserstatus

nms41

群組

Messaging Server 5.0

使用者

inetuserstatus

mailuserstatus

Messaging Server 5.0

群組

inetmailgroupstatus

如有必要,可使用 option.dat 檔案中的 LDAP_USER_STATUSLDAP_GROUP_STATUS MTA 選項分別為使用者和群組選取替代一般狀態屬性。郵件特定的使用者和群組狀態屬性由 LDAP_USER_MAIL_STATUSLDAP_GROUP_MAIL_STATUS MTA 選項來控制。

此處起作用的另一個因素是網域自身的狀態 (LDAP_DOMAIN_ATTR_STATUSLDAP_DOMAIN_ATTR_MAIL_STATUS)。總的來說有四個狀態屬性。它們按以下次序進行組合:

  1. 網域狀態
  2. 網域郵件狀態
  3. 使用者或群組狀態
  4. 郵件使用者或群組狀態

第一項指定「active」以外的其他狀態,它的優先度最高。其他允許的狀態值為「inactive」、「deleted」、「removed」、「disabled」、「hold」以及「overquota」。「Hold」、「disabled」以及「removed」狀態僅可指定給郵件網域、郵件使用者或郵件群組。「Overquota」狀態僅可作為郵件網域狀態或郵件使用者狀態指定。

如果特定的狀態屬性不存在,所有狀態都預設為「active」。未知狀態值被解譯為「inactive」。

當這四個狀態組合時,使用者或群組可能有以下狀態:「active」、「inactive」、「deleted」、「removed」、「disabled」、「hold」以及「overquota」。使用中狀態會使別名處理作業繼續。非使用中或超配額狀態會導致位址立即被拒絕,並產生 4xx (暫時性) 錯誤。已刪除、已移除以及已停用狀態會導致位址立即被拒絕,並產生 5xx (永久性) 錯誤。就狀態處理而言,暫停狀態會被視為使用中,但它設定內部旗標,因此以後考量遞送選項時,其中的所有選項都會由包含單一「hold」項目的選項清單來置換。

UID 檢查

下一個步驟為考量項目的 UID。UID 用於多種用途,它必須為所有使用者項目的一部分,並且可以包括在群組項目中。沒有 UID 的使用者項目會被忽略,並且此 Alias URL 的處理會以失敗告終。託管網域中項目的 UID 可由真實 UID、分隔字元以及網域組成。MTA 只需要真實 UID,因此,如果使用取自 option.dat 檔案中的 LDAP_DOMAIN_ATTR_UID_SEPARATOR MTA 選項的網域分隔字元的剩餘部分存在,則會被移除。

在使用 uid 之外的屬性儲存 UID 這種不太可能發生的情況下,可使用 LDAP_UID MTA 選項強制使用其他屬性。

郵件擷取

接著,檢查用於指定一個或多個郵件擷取位址的 LDAP 屬性。用於此目的的屬性必須透過 LDAP_CAPTURE MTA 選項來指定。此選項沒有預設。此屬性的值會被作為位址來處理,特殊的「擷取」通知會產生並被作為附件傳送至這些包含目前郵件的位址。此外,在擷取位址隨後將顯示為訊息封 from: 位址這種可能發生的情況下,該位址可用於植入位址反向快取記憶體位址。

植入反向快取記憶體

接著考量主要位址和附加至使用者項目的所有別名。此資訊用於植入位址反向快取記憶體。它在目前位址轉譯程序中不起作用。首先,考量主要位址、個人名稱、收件者限制、收件者截止以及來源區塊限制。主要位址通常儲存在「mail」屬性中,其他屬性可以透過適當設定 LDAP_PRIMARY_ADDRESS MTA 選項來指定。(當然,主要位址反向成其自身。)所有其他屬性都沒有預設屬性。如果您要使用它們,必須透過 LDAP_PERSONAL_NAME (請參閱「休假自動回覆屬性」)、LDAP_RECIPIENTLIMITLDAP_RECIPIENTCUTOFF (請參閱「限制郵件收件者」) 和 LDAP_SOURCEBLOCKLIMIT (請參閱「指定絕對郵件大小限制」) MTA 選項進行指定。此處還考量相應的網域級收件者限制、收件者截止以及來源區塊限制屬性。使用者級設定可完全置換任何網域級設定。

接著,考量所有次要位址並為每個次要位址產生快取記憶體項目。次要位址有兩種:即接受位址反向的次要位址和不接受位址反向的次要位址。兩者均需要加以考量,以便正確植入位址反向快取記憶體,因為需要檢查各種情況下的郵件擷取請求。

接受反向的次要位址通常儲存在 mailAlternateAddress 屬性中。透過設定 LDAP_ALIAS_ADDRESSES MTA 選項,可以指定其他屬性。不接受反向的次要位址通常儲存在 mailEquivalentAddress 屬性中。透過設定 LDAP_EQUIVALENCE_ADDRESSES MTA 選項,可以指定其他屬性。

郵件主機和路由位址

現在要考量 mailhostmailRoutingAddress 屬性。考量的實際屬性可分別由 LDAP_MAILHOSTLDAP_ROUTING_ADDRESS MTA 選項來置換。這些屬性協同工作,以確定此時是執行該位址還是將其轉寄至另一系統。

第一個步驟為確定 mailhost 對於此項目是否有意義。對作用於項目的遞送選項執行預先檢查,以查看該項目是否為郵件主機特定的。如果不是,則省略 mailhost 檢查。請參閱遞送選項處理的描述,尤其是 # 旗標,以瞭解如何執行本檢查。

對於使用者項目,mailhost 屬性必須標識本機系統,以便於執行。mailhost 屬性會與 local.hostname configutil 參數的值進行比較,並與 local.imta.hostnamealiases configutil 參數所指定的值清單進行對照。如果其中任何一個相符,即認為 mailhost 屬性標識本地主機。

相符成功意味著可以在本機執行別名,並且別名處理會繼續。相符不成功則意味著需要將郵件轉寄至郵件主機以執行。新位址形式

@mailhost:user@domain

會建構出來,並成為別名延伸作業的結果。

遺漏的 mailhost 屬性的處理會依該項目是使用者還是群組而有所不同。對於使用者,郵件主機十分重要。因此,如果 mailhost 屬性不存在,則新的位址形式

@smarthost:user@domain

會使用 LDAP_DOMAIN_ATTR_SMARTHOST MTA 選項所確定的網域之智慧主機建構出來。如果該網域不存在智慧主機,則報告錯誤。

另一方面,群組不需要郵件主機。因此遺漏的郵件主機會被解譯為該群組可在任何位置延伸。因此,別名處理會繼續。

mailRoutingAddress 屬性增加了一個最終的難題。如果它存在,別名處理會終止,結果為 mailRoutingAddress。但是,如果郵件主機存在,它會作為來源路徑加入 mailRoutingAddress 中。

其他屬性支援

接著,考量 mailMsgMaxBlocks 屬性。首先它會透過 LDAP_DOMAIN_ATTR_BLOCKLIMIT MTA 選項傳回的網域區塊限制進行最小化。如果已知目前郵件大小超過限制,別名處理會終止,並顯示表明超出大小的錯誤。如果大小未知或未超過限制,該限制仍然儲存,稍後檢查郵件本身時,將重新檢查該限制。mailMsgMaxBlocks 的使用可由 LDAP_BLOCKLIMIT MTA 選項來置換。

接著會存取並儲存大量屬性。最終這些屬性將被寫入佇列檔案項目中,供 ims_master 通道程式使用,然後該程式將使用它們來更新儲存的使用者資訊快取記憶體。如果找不到個別使用者的這些屬性,可使用網域級屬性設定預設。

如果 LDAP 項目適用於群組而非使用者,或 LDAP 項目來自別名快取記憶體而非 LDAP 目錄,則跳過本步驟。後一準則的邏輯是,沒有必要頻繁更新該資訊,使用別名快取記憶體可為何時應進行更新提供合理的準則。擷取的這些屬性的名稱都可以透過各種 MTA 選項來設定。

表 9-3 顯示可設定擷取的磁碟配額與郵件配額屬性的 MTA 選項。

表 9-3  可設定擷取的磁碟配額與郵件配額屬性的 MTA 選項

MTA 選項

屬性

LDAP_DISK_QUOTA

mailQuota

LDAP_MESSAGE_QUOTA

mailMsgQuota

接著,儲存大量屬性,以供日後與元字元替換一併使用。

表 9-4 顯示 MTA 選項、預設屬性以及元字元。

表 9-4  MTA 選項、預設屬性以及元字元

MTA 選項

預設屬性

元字元

LDAP_PROGRAM_INFO

mailProgramDeliveryInfo

$P

LDAP_DELIVERY_FILE

mailDeliveryFileURL

$F

LDAP_SPARE_1

無預設

$1E $1G $E

LDAP_SPARE_2

無預設

$2E $2G $G

LDAP_SPARE_3

無預設

$3E $3G

LDAP_SPARE_4

無預設

$4E $4G

LDAP_SPARE_5

無預設

$5E $5G

其中包括了其他屬性的備用位置,以便您使用它們來建立自訂位址延伸工具。

接著,所有與 mailconversiontag 屬性相關的值會增加至目前的轉換標記集合中。該屬性的名稱可使用 LDAP_CONVERSION_TAG MTA 選項來變更。如果有任何值與網域的 mailDomainConversionTag 屬性相關,也會被附加。

遞送選項處理

接著,檢查 mailDeliveryOption 屬性。該屬性的名稱可使用 LDAP_DELIVERY_OPTION MTA 選項來變更。這是一個多值選項,其值可確定別名轉譯程序所產生的位址。此外,允許的值對於使用者和群組不同。共用的允許值為 programforwardhold。僅針對使用者的值為 mailboxnativeunixautoreply。僅針對群組的值為 membersmembers_offlinefile

mailDeliveryOption 屬性至適當位址的轉換由 DELIVERY_OPTIONS MTA 選項來控制。該選項不僅指定每個允許的 mailDeliveryOption 值會產生哪些位址,還指定允許的 mailDeliveryOption 值有哪些,以及每個值是否適用於使用者、群組或兩者。

該選項的值由 deliveryoption=template 對清單組成,各對之間以逗號分隔,每對都具有一個或多個可選的單一字元字首。

DELIVERY_OPTIONS 選項的預設值為:

DELIVERY_OPTIONS=*mailbox=$M%$\\$2I$_+$2S@ims-ms-daemon,  \
     &members=*,                                          \
     *native=$M@native-daemon,                            \
     /hold=@hold-daemon:$A,                               \
     *unix=$M@native-daemon,                              \
     &file=+$F@native-daemon,                             \
     &@members_offline=*,                                 \
     program=$M%$P@pipe-daemon,                           \
     #forward=**,                                         \
     *^!autoreply=$M+$D@bitbucket

每個遞送選項都對應於可能的 mailDeliveryOption 屬性值,相應的範本可使用 URL 處理所使用的同一元字元替換綱目指定結果位址。

表 9-5 顯示用於 DELIVERY_OPTIONS 選項的單一字元字首。

表 9-5  用於 DELIVERY_OPTIONS MTA 選項中各選項的單一字元字首 

字元字首

描述

@

設定旗標,表示需要將該郵件重新導向至重新處理通道。已捨棄目前使用者/群組的處理作業。對源自重新處理通道的郵件忽略旗標。

*

遞送選項適用於使用者。

&

遞送選項適用於群組。

$

設定旗標,表示該使用者或群組的延伸將延遲。

^

設定旗標,表示應檢查休假開始和結束時間,以查看此遞送選項是否真正生效。

#

設定旗標,表示此遞送選項的延伸無需發生在項目的指定郵件主機上,即以下項目獨立於郵件主機。這會讓 MTA 檢查是否給定使用者或給定群組的所有遞送選項均不受郵件主機所支配。如果滿足此條件,MTA 可立即處理此項目,而不必將郵件轉寄給郵件主機。

/

設定旗標,可使此遞送選項產生的所有位址得以保留。包含這些收件者位址的郵件檔案將具有 .HELD 副檔名。

!

設定旗標,表示應該由 MTA 在內部處理自動回覆作業。僅對自動回覆遞送選項使用此字首時有意義。此選項的值應將郵件導向至 bitbucket 通道。

如果 *& 均不存在,則遞送選項既適用於使用者,又適用於群組。

在遞送選項中使用的其他元字元

已新增數個其他元字元以支援 MTA 之 URL 範本工具的新用法。這些圖元字元包括:

表 9-6 顯示在遞送選項中使用的其他元字元及其描述。

表 9-6  在遞送選項中使用的其他元字元 

元字元

描述

$\

強制後續文字採用小寫。

$^

強制後續文字採用大寫。

$_

不對後續文字執行大小寫轉換。

$nA

插入位址的第 n 個字元。第一個字元為字元 0。如果省略 n,則將替換整個位址。這是為了用於建構自動回覆目錄路徑。

$D

插入位址的網域部分。

$nE

插入第 n 個備用屬性的值。如果省略 n,則使用第一個屬性。

$F

插入遞送檔案的名稱 (mailDeliveryFileURL 屬性)。

$nG

插入第 n 個備用屬性的值。如果省略 n,則使用第二個屬性。

$nH

從 0 數起,插入原始位址網域的第 n 個元件。如果省略 n,預設為 0。

$nI

插入與別名相關的託管網域。此元字元接受整數參數 n,其語義在表 9-7 中描述。

$nJ

從 0 數起,插入託管網域的第 n 個部分。n 預設為 0。

$nO

插入於目前位址關聯的來源路由。此元字元接受整數參數 n,其語義在表 9-7 中描述。

$K

插入與使用者或群組的物件類別相符的 LDAP 篩選器。請參閱 LDAP_UG_FILTER MTA 僅輸出選項的描述。

$L

插入位址的本機部分。

$nM

插入 UID 的第 n 個字元。第一個字元為字元 0。如果省略 n,則將替換整個 UID。

$P

插入程式名稱 (mailProgramDeliveryInfo 屬性)。

$nS

插入與目前位址相關的子位址。此元字元接受整數參數 n,其語義在表 9-7 中描述。

$nU

插入目前位址中未加引號形式的電子信箱部分中的第 n 個字元。第一個字元為字元 0。如果省略 n,則將替換整個未加引號的電子信箱。

$nX

插入郵件主機的第 n 個元件。如果省略 n,則插入整個郵件主機。

表 9-7 顯示整數參數如何修改 $nI 和 $nS 中介字元的運作方式。

表 9-7  控制 $nI 和 $nS 中介字元運作方式修改的整數

整數

運作方式描述

0

如果無可用值,則失敗 (預設)。

1

如果有一個值可用,則插入該值。否則不插入任何內容。

2

如果有一個值可用,則插入該值。否則不插入任何內容,並刪除前面的字元 (ims-ms 通道需要這種特殊的運作方式)。

3

如果有一個值可用,則插入該值。否則不插入任何字元並忽略後續字元。

除了元字元以外,表 9-8 還顯示兩個特殊範本字串。

表 9-8  特殊範本字串

特殊範本字串

描述

*

執行群組延伸。此值對於使用者項目無效。

**

延伸由 LDAP_FORWARDING_ADDRESS MTA 選項指定的屬性。預設為 mailForwardingAddress

例如,如果使用者的 mailDeliveryOption 的值設定為 mailbox,透過群組延伸,我們可以產生一個新的位址,該位址由被刪除的 UID、百分號後接託管網域 (如果適用)、加號後接子位址 (如果已指定) 以及 @ims-ms-daemon 組成。

遞送選項預設

如果此處使用中的遞送選項清單為空,則為使用者啟動清單上的第一個選項 (通常為電子信箱),為群組啟動清單上的第二個選項 (通常為成員)。

開始和結束日期檢查

在讀取遞送選項清單之後檢查開始和結束日期。有兩個屬性,其名稱分別由 LDAP_START_DATE (預設 vacationStartDate) 和 LDAP_END_DATE (預設 vacationEndDate) MTA 選項控制。如果一個或多個使用中的遞送選項指定了 ^ 字首字元,則對照目前日期檢查這些選項的值。如果目前日期超出了這些選項指定的範圍,則從使用中的集合中移除具有 ^ 字首的遞送選項。如需更多資訊,請參閱「休假自動回覆屬性」。

選擇 optin 屬性和 Presence 屬性

LDAP_OPTIN MTA 選項可用於指定包含垃圾郵件篩選器選擇加入值清單的 LDAP 屬性。如果此選項已指定並且該屬性存在,則會附加至目前垃圾郵件篩選器選擇加入清單。LDAP_DOMAIN_ATTR_OPTIN MTA 選項所設定的網域級屬性設定的所有值也會附加至該清單。

LDAP_PRESENCE MTA 選項可用於指定能夠被解析以傳回使用者存在性資訊的 URL。如果此選項已指定並且該屬性存在,其值會被儲存,以與篩選存在性測試一併使用。如果使用者項目不存在值,則使用 LDAP_DOMAIN_ATTR_PRESENCE MTA 選項設定的網域級屬性作為此 URL 來源。

篩選器處理

接著,檢查套用於此項目的篩選器的 mailSieveRuleSource 屬性。如果該屬性存在,此時會被剖析並儲存。此屬性的值有兩種可能的形式,即包含完整篩選程序檔的單一值和每個值都包含一段篩選程序檔的多個值。後一種形式由 Web 篩選器建構介面產生。可以使用特殊程式碼排序這些值,並將它們正確地綁定在一起。

mailSieveRuleSource 屬性的使用更可以使用 LDAP_FILTER MTA 選項來置換。

延遲處理控制

接著,檢查 mailDeferProcessing 屬性。該屬性可透過 LDAP_REPROCESS MTA 選項來變更。如果該屬性存在且被設定為 no,處理作業通常會繼續。但如果該屬性設定為 yes 且目前來源通道並非重新處理通道,此項目的延伸就會中斷,而原始 user@domain 位址只會在重新處理通道中形成佇列。如果該屬性不存在,系統會檢查與遞送選項處理作業相關的延遲處理字元字首的設定。(請參閱「遞送選項處理」一節,以取得範例。)如果設定該屬性,處理作業會延遲。如果未設定該屬性,針對使用者的預設為 no。針對群組的預設由 MTA 選項 DEFER_GROUP_PROCESSING 控制,預設為 1 (yes)。使用者項目的別名處理作業到此結束。

群組延伸屬性

有大量附加屬性與群組延伸相關,並且必須在此處進行處理。這些屬性的名稱都可以透過各種 MTA 選項來配置。

表 9-9 列出預設屬性名稱、可設定屬性名稱的 MTA 選項以及 MTA 處理屬性的方式。本表中元素的排序顯示處理各種群組屬性的次序。本排序對於正確運作十分重要。

表 9-9  群組延伸預設屬性以及要設定的 MTA 選項 

預設屬性

(可設定屬性名稱的 MTA 選項) 屬性處理方式

mgrpMsgRejectAction

(LDAP_REJECT_ACTION) 單一值屬性,可控制任何後續存取檢查失敗後所發生的動作。僅定義一個值:TOMODERATOR,如果設定,則指示 MTA 將所有存取故障重新導向至 mgrpModerator 屬性所指定的仲裁者。預設 (以及該屬性的任何其他值) 會導致錯誤被報告且郵件被拒絕。

mailRejectText

(LDAP_REJECT_TEXT) 儲存該屬性第一個值中所儲存的文字之第一行。如果以下任何認證屬性導致郵件被拒絕,則傳回此文字。這意味著此文字可顯示在 SMTP 回應中,因此必須將值限制為 US-ASCII,以符合目前的郵件傳送標準。

mgrpBroadcasterPolicy

(LDAP_AUTH_POLICY) 指定傳送至群組所需的驗證層次。可能的記號為 SMTP_AUTH_REQUIREDAUTH_REQ (兩者均意味著必須使用 SMTP AUTH 指令來識別寄件者以傳送至群組);PASSWORD_REQUIREDPASSWD_REQUIREDPASSWD_REQ
(這些均意味著由 mgrpAuthPassword 屬性指定的清單密碼必須顯示在郵件的 Approved: 標頭欄位中);OR (將此清單中的 OR_CLAUSES MTA 選項設定變更為 1);AND (將此清單中的 OR_CLAUSES MTA 選項設定變更為 0);以及 NO_REQUIREMENTS
(無作業)。允許多個值,每個值可由以逗號分隔的記號清單組成。

如果為此呼叫 SMTP AUTH,還表示所有後續授權檢查將根據由 SASL 層提供的電子郵件位址而非 MAIL FROM 位址來執行。

mgrpAllowedDomain

(LDAP_AUTH_DOMAIN) 允許提交郵件至此群組的網域。OR_CLAUSES MTA 選項設定為 0 (預設值) 的匹配失敗,表示存取檢查失敗並且略過了所有的後續測試。OR_CLAUSES MTA 選項設定為 1 的匹配失敗設定了一個「失敗擱置」旗標﹔其他一些存取檢查必須成功,以使存取檢查成功。如果提交的郵件已經與 LDAP_AUTH_URL 相匹配,則將略過該檢查。可以有多個值並且允許全域樣式的萬用字元。

mgrpDisallowedDomain

((LDAP_CANT_DOMAIN) 不允許提交郵件至此群組的網域。相符意味著存取檢查失敗且略過了所有的後續檢查。如果提交的郵件已經與 LDAP_AUTH_URL 匹配,則略過該檢查。可以允許有多個值和全域樣式的萬用字元。

mgrpAllowedBroadcaster

(LDAP_AUTH_URL) 標識允許傳送郵件至此群組的郵件位址的 URL。可以為多個值。每個 URL 會延伸成位址清單,而且每個位址會對照目前訊息封 from: 位址來進行檢查。無法與設定為 0 (預設) 的 OR_CLAUSES MTA 選項相符,意味著存取檢查失敗並且略過所有的後續測試。無法與設定為 1 的 OR_CLAUSES MTA 選項匹配設定了「失敗擱置」旗標﹔其他一些允許的存取檢查必須成功以使存取檢查成功。相符還會停用後續網域存取檢查。執行的延伸與停用所有存取控制檢查的 SMTP EXPN 類似。

mgrpDisallowedBroad-
caster

((LDAP_CANT_URL) 標識不允許傳送郵件至此群組的郵件位址的 URL。可以為多個值。每個 URL 會延伸成位址清單,而且每個位址會對照目前訊息封 from: 位址來進行檢查。位址。相符意味著存取檢查失敗且略過所有的後續檢查。執行的延伸與停用所有存取控制檢查的 SMTP EXPN 類似。

mgrpMsgMaxSize

(LDAP_ATTR_MAXIMUM_MESSAGE_SIZE) 可被傳送至群組的最大郵件大小 (以位元組為單位)。該屬性已被淘汰,但仍受支援,以確保向下相容性;應使用新的 mailMsgMaxBlocks 屬性。

mgrpAuthPassword

(LDAP_AUTH_PASSWORD) 指定需要寄送至清單的密碼。mgrpAuthPassword 屬性的存在會強制執行重新處理傳送。郵件在重新處理通道上形成佇列時,密碼取自標頭,並置於訊息封中。而在重新處理時,密碼取自訊息封,並對照該屬性進行檢查。此外,僅實際使用的密碼會從標頭欄位中移除。

OR_CLAUSES MTA 選項處理該屬性的方式與處理其他存取檢查屬性的方式相同。

mgrpModerator

(LDAP_MODERATOR_URL) 由該屬性給出的 URL 將被延伸成一系列位址。此位址清單的解譯取決於 LDAP_REJECT_ACTION MTA 選項的設定。如果 LDAP_REJECT_ACTION 設定為 TOMODERATOR,該屬性會指定在任何存取檢查失敗時郵件將被傳送至的仲裁者位址。如果 LDAP_REJECT_ACTION 遺漏或有其他值,則位址清單會與位址的訊息封進行比較。如果存在相符項目,則繼續處理。如果不存在相符項目,郵件會再次傳送至該屬性指定的所有位址。該屬性延伸的實作方法是使該屬性的值成為群組的 URL 清單。任何 RFC822 位址清單或與群組相關的 DN 清單都會被清除,群組的遞送選項會設定為 members。最後,本表中列出的後續群組屬性會被忽略。

mgrpDeliverTo

(LDAP_GROUP_URL1) URL 清單,在延伸時會提供郵件收件人清單成員位址的清單。

memberURL

(LDAP_GROUP_URL2) 另一個 URL 清單,在延伸時會提供郵件收件人清單成員位址的另一個清單。

uniqueMember

(LDAP_GROUP_DN) 群組成員 DN 的清單。DN 可以指定整個子樹。唯一成員 DN 透過內嵌在 LDAP URL 中來延伸。要使用的確切 URL 由 GROUP_DN_TEMPLATE MTA 選項指定。此選項的預設值為:ldap:///$A?mail?sub?(mail=*)

$A 指定 uniqueMember DN 的插入點。

mgrpRFC822MailMember

(LDAP_GROUP_RFC822) 此清單成員的郵件位址。

rfc822MailMember

(LDAP_GROUP_RFC822) rfc822MailMember 被支援,以確保向後相容性。在給定的任何群組中都可使用 rfc822MailMember, mgrpRFC822MailMember,但不可同時使用。

mgrpErrorsTo

(LDAP_ERRORS_TO) 設定訊息封創建者 (MAIL FROM) 位址為該屬性指定的任何內容。

mgrpAddHeader

(LDAP_ADD_HEADER) 調整在屬性中指定的標頭為修整 ADD 選項的標頭。

mgrpRemoveHeader

(LDAP_REMOVE_HEADER) 調整指定的標頭為修整 MAXLINES=-1 選項的標頭。

mgrpMsgPrefixText

(LDAP_PREFIX_TEXT) 如果有指定的文字,將其加至郵件文字的開頭。

mgrpMsgSuffixText

((LDAP_SUFFIX_TEXT) 如果有指定的文字,將其加至郵件文字的結尾處。

No Default

(LDAP_ADD_TAG) 檢查主旨是否存在指定的文字﹔如果不存在,則將文字加入至主旨欄位的開頭。

在群組延伸作為 SMTP EXPN 指令的一部分這種特殊情況下,會檢查最後一個屬性:mgmanMemberVisibility 或可延伸屬性。LDAP_EXPANDABLE MTA 選項可用於選取要檢查的不同屬性。可能的值為:anyone (表示任何人都可以延伸該群組)、alltrue (表示在允許延伸之前使用者需要透過 SASL 成功認證) 以及 none (表示不允許延伸)。無法識別的值會被解譯為 none。如果該屬性不存在,EXPANDABLE_DEFAULT MTA 選項控制是否允許延伸。

別名項目的快取方式與網域項目類似。控制別名快取記憶體的 MTA 選項為 ALIAS_ENTRY_CACHE_SIZE (預設為 1000 個項目) 和 ALIAS_ENTRY_CACHE_TIMEOUT (預設為 600 秒)。給定別名的整個 LDAP 傳回值會保留在快取記憶體中。

別名項目的負數快取由 ALIAS_ENTRY_CACHE_NEGATIVE MTA 選項來控制。非零值會啟用遇到故障的別名快取。零值則會停用它。依預設,停用別名項目的負數快取。其原理是,無效位址的重複規格在實際中不太可能經常發生。此外,負數快取可能會干擾新增至目錄的新使用者的及時識別。但是,站點應該考量在大量使用虛名網域的情況下重新啟用別名的負數快取。在 ALIAS_URL0 中指定的 URL 所執行的搜尋不大可能會成功。


位址反向

使用直接 LDAP 的位址反向從 USE_REVERSE_DATABASE 的值為 4 (停用任何反向資料庫) 開始。然後,在先前論述的路由工具上建立。尤其是在舊版中,它用以下形式的反向 URL 規格開頭:

REVERSE_URL=ldap:///$V?mail?sub?$Q

$V 中介字元已在 Alias URL 環境中描述。但 $Q 中介字元,雖然在功能上與 Alias URL 中使用的 $R 中介字元十分類似,但它專門用在位址反向中。與 $R 不同,$Q 會產生一個篩選器,用於搜尋包含位址反向備選位址的屬性。要搜尋的屬性清單來自 MTA 選項 LDAP_MAIL_REVERSES。如果未設定此選項,則會檢查 local.imta.schematag configutil 參數,並根據其值選擇一組適當的預設屬性。

表 9-10 顯示 local.imta.schematag 的值和選擇的預設屬性。

表 9-10  local.imta.schematag 的值和屬性

綱目標記值

屬性

sims40

mail,rfc822mailalias

nms41

mail,mailAlternateAddress

ims50

mail,mailAlternateAddress

但是,不再適合使用 $Q。為使郵件擷取和其他工具正常運作,已增強位址反向功能,除了關注存在相符項目這個事實之外,還關注相符的屬性。這意味著應使用 $R 而非 $Q 來指定篩選器。此外,已新增 $N 中介字元,它會傳回與位址反向相關的屬性清單。選項值結果為:

REVERSE_URL=ldap:///$V?$N?sub?$R

local.imta.schematag 通常可以是一個以逗號分隔的清單。如果支援多個綱目,則可使用屬性的組合清單 (重複屬性要排除)。

此外,篩選器不僅搜尋最初提供的位址,還搜尋具有同一本機部分但網域實際在網域樹中找到的位址 (在步驟 2 中儲存)。網域樹查詢的反覆性意味著這兩個位址可以不同。

例如,假定網域 siroe.com 顯示在網域樹中,並且 MTA 查看位址:

u@host1.siroe.com

$R 的延伸和 ims50 schematag 所產生的篩選器將如下所示:

    (|(mail=u@siroe.com)
    (mail=u@host1.siroe.com)
    (mailAlternateAddress=u@siroe.com)
    (mailAlternateAddress=u@host1.siroe.com)
    (mailEquivalentAddress=u@siroe.com)
    (mailEquivalentAddress=u@host1.siroe.com))

請注意,反向 URL 明確地指定包含標準化位址的屬性。通常為 mail 屬性。

建構 URL 之後,會執行 LDAP 搜尋。如果搜尋成功,則傳回的第一個屬性值會取代原始位址。如果搜尋失敗或發生錯誤,則保留原始位址不變。

由於執行位址反向作業的頻率,尤其是可以顯示在郵件標頭中的給定位址數量以及相關目錄查詢的耗用,正面結果和負面結果均需要快取。這項作業透過記憶體中開放式鏈接的動態延伸雜湊表來實作。快取記憶體的最大容量由 REVERSE_ADDRESS_CACHE_SIZE MTA 選項來設定 (預設 100000),而快取記憶體中項目的逾時由 REVERSE_ADDRESS_CACHE_TIMEOUT MTA 選項來設定 (預設 600 秒)。快取記憶體實際上儲存位址本身,而非 LDAP URL 和 LDAP 結果。


非同步 LDAP 作業

非同步查詢無需在記憶體中儲存整個大型 LDAP 結果,從而避免在某些情況下導致效能問題。MTA 能夠執行由 MTA 非同步完成的各類查詢。

非同步 LDAP 查詢的使用由 MTA 選項 LDAP_USE_ASYNC 來控制。該選項是位元編碼的值。每個位元 (如果設定) 都會啟用非同步 LDAP 查詢以及 MTA 中 LDAP 的特定用法。

表 9-11 顯示 option.dat 檔案中 LDAP_USE_ASYNC MTA 選項的位元和值設定。

表 9-11  LDAP_USE_ASYNC MTA 選項的設定  

位元

LDAP 的特定用法

0

1

LDAP_GROUP_URL1 (mgrpDeliverTo) URL

1

2

LDAP_GROUP_URL2 (memberURL) URL

2

4

LDAP_GROUP_DN (UniqueMember) DN

3

8

auth_listmoderator_listsasl_auth_list 以及 sasl_moderator_list 非定位清單參數 URL

4

16

cant_listsasl_cant_list 非定位清單參數 URL

5

32

originator_reply 非定位清單參數 URL

6

64

deferred_listdirect_listhold_listnohold_list 非定位清單參數 URL

7

128

username_auth_listusername_moderator_listusername_cant_list 非定位清單參數 URL

8

256

Alias 檔案清單 URL

9

512

Alias 資料庫清單 URL

10

1024

LDAP_CANT_URL (mgrpDisallowedBroadcaster) 外層 URL

11

2048

LDAP_CANT_URL 內層 URL

12

4096

LDAP_AUTH_URL (mgrpAllowedBroadcaster) 外層 URL

13

8192

LDAP_AUTH_URL 內層 URL

14

16384

LDAP_MODERATOR_URL (mgrpModerator) URL

LDAP_USE_ASYNC MTA 選項的預設值為 0,這意味著依預設停用非同步 LDAP 查詢。


設定摘要

為啟用直接 LDAP,需要設定以下 MTA 選項:

ALIAS_MAGIC=8764
ALIAS_URL0=ldap:///$V?*?sub?$R
USE_REVERSE_DATABASE=4
USE_DOMAIN_DATABASE=0
REVERSE_URL=ldap:///$V?mail?sub?$Q

如果要支援虛名網域,必須設定以下附加選項:

DOMAIN_MATCH_URL=ldap:///$B?msgVanityDomain?sub?(msgVanityDomain=$D)
ALIAS_URL1=ldap:///$B?*?sub?(&(msgVanityDomain=$D)$R)
ALIAS_URL2=ldap:///$1V?*?sub?(mailAlternateAddress=@$D)

請注意,最後一個選項還會處理託管網域以及虛名網域中萬用字元形式的本機部分之大小寫。如果需要支援萬用字元形式的本機部分,但不需要支援虛名網域,則應使用以下選項:

ALIAS_URL1=ldap:///$V?*?sub?&(mailAlternateAddress=@$D)

需要從 MTA 配置檔案 (imta.cnf) 內的 ims-ms 通道定義中移除 filter ssrd:$A 陳述。



上一個      目錄      索引      下一個     


Copyright 2005 Sun Microsystems, Inc. 版權所有。