利用LDAP 當成你的postfix 的lookup table。
昨天已經跟大家介紹如何改寫郵件地址。如果您有讀過前幾天的文章,您也許會想說是否一樣可以利用LDAP作為Canonical address mapping 的lookup table,這樣就算您有一千個以上的帳號,也不會造成檔案很難維護,又如果說你要有多台postfix 那檔案不會不一致。
為了要讓您的Postfix 使用LDAP 來當作查看的對照表(MAPS),您需要先在main.cf先定義LDAP 的source,您需要編輯main.cf並定義canonical_maps如下範例:
canonical_maps = hash:/etc/postfix/canonical,ldap:/etc/postfix/ldap-canonical.cf
當然如果您如果完全不想使用local file ,只使用LDAP 來當lookup table,您可以改寫如下:
canonical_maps = ldap:/etc/postfix/ldap-canonical.cf
另外您的/etc/postfix/ldap-canonical.cf 範例如下:
server_host = ldap.ithome.com.tw
search_base = dc=ithome, dc=com, dc=tw
query_filter = (&(mailacceptinggeneralid=%s)
result_attribute= mail
另外LDAP 的 Data假設內容節錄如下:
mail: Steve.Jobs@ithome.com.tw
uid: m91001
cn: ITHome Steve Joes
maildrop: m91001@ithome.com.tw
mailacceptinggeneralid:Steve@ithome.com.tw
完成以上設定後,假設您的Postfix收到一封寄給Steve@ithome.com.tw的郵件,就會連線到ldap.ithome.com.tw,然後搜尋dc=ithome, dc=com, dc=tw這棵樹,找出mailacceptinggeneralid 這個屬性(attribute)為 "Steve.Jos"的項目(entry ),然後回傳此項目的mail,取得回傳的mail值之後,回拿這個回傳值來改寫郵件地址。
PS:如果你的LDAP Query 結果回傳超過一筆資料,會讓你的郵件地址改寫機制失敗,您會在maillog看到如下列的錯誤訊息:
Oct 11 07:51:42 mailsrv postfix/cleanup[25578]: warning: D6652F8D11: multi-valued canonical_maps entry for Steve@ithome.com.tw
為了避免發生邏輯上的設定錯誤,您可以個過Postfix 三十天就上手-Day 06 常用指令說明中的postmap來檢查對照表中傳回的項目是否與您預期的一樣。
範例如下:
postmap -q Steve@ithome.com.tw ldap:/etc/postfix/ldap-canonical.cf
正確的話就會得到下列結果:
Steve.Jobs@ithome.com.tw
如果回傳多個值,那您就要看看您邏輯或是資料哪裡錯囉!
funkent提到:
當然如果您如果完全不想使用local file ,只使用LDAP 來當lookup table,您可以改寫如下:
我們公司改用LDAPs,so之前我寫的ap不能用了。