iT邦幫忙

DAY 15
2

Postfix 三十天就上手系列 第 15

Postfix 三十天就上手-Day 15 利用 LDAP 改寫郵件地址

利用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

如果回傳多個值,那您就要看看您邏輯或是資料哪裡錯囉!


上一篇
Postfix 三十天就上手-Day 14 改寫郵件地址
下一篇
Postfix 三十天就上手-Day 16 利用 MySQL 改寫郵件地址
系列文
Postfix 三十天就上手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
krarm
iT邦好手 1 級 ‧ 2011-10-14 11:13:45

funkent提到:
當然如果您如果完全不想使用local file ,只使用LDAP 來當lookup table,您可以改寫如下:

我們公司改用LDAPs,so之前我寫的ap不能用了。

我要留言

立即登入留言