二、家庭辦公環境的Postfix安裝技巧和提示

概述
把家庭辦公環境的postfix應用技巧和提示整合到這篇文檔的目的是便於查找。這篇文檔僅描述了郵件的發送。如果你的postfix服務器不直接接收郵件(比如:它沒有公網的域名和固定的IP),那麼你將需要一個類似於“fetchmail”的解決方法--這超出了postfix的文檔範圍
從STANDARD_CONFIGURATION_README文檔中選擇相關主題:
 ·基於internet主機的postfix安裝
 ·基於Intranet主機的postfix安裝
從SASL_README文檔中選擇相關主題:
 ·在postfix的smtp客戶端啓用SASL認證
 ·配置郵件發送者的SASL認證
關於這些主題的更詳細的信息查看SASL_README 和 STANDARD_CONFIGURATION_README文檔
基於Internet主機的postfix安裝
postfix幾乎在沒有改變獨立主機的設置的前提下就能被安裝好。至少,當你下載postfix源碼後知道如何安裝postfix。
你可以用“postconf -n”命令查看main.cf中的哪些設置變更過。除了一些路徑的設置和“基本配置”文檔中的參數設置外,幾乎沒有什麼申述需要在獨立主機上設置:
/etc/postfix/main.cf
 myhostname=ceshi.linux.com   (其中ceshi.linux.com是機器的FQDN)
 mydomain=linux.com
 myorigin=$mydomain
 mydestination=$myhostname  localhost.$mydomain  localhost
  mail.$mydomain
 inet_interfaces=all
 mynetworks=127.0.0.1/8  192.168.1.0/24
 proxy_interfaces=1.2.3.4 
 relayhost = [mail.$mydomain]
/etc/aliases:
   postmaster: [email protected]
    root: [email protected] 
也可以參見“沒有公網主機名的postfix安裝”部分,如果它們對你的配置有幫助的話。
沒有公網主機名的postfix安裝
這部分是適用於那些沒有internet主機名(即公網固定IP)的postfix主機。一般是那些通過DHCP或者撥號獲取公網動態IP地址的主機。postfix可以用一個不存在(fantasy)的名稱爲linux系統用戶提供發送/接收郵件的功能。但是當你在給internet用戶發郵件時,不能在郵件地址中使用這個名稱,因爲internet用戶將無法給你回覆郵件。實際上,越來越多的站點將拒絕域名不存在的郵件。
注意:下面的內容將隨postfix版本不同而有所不同。查看postfix的版本,使用"postconf mail_version"命令
解決方法1:postfix2.2及以後的版本
postfix 2.2 使用通用的地址映射方法把本地郵件地址映射爲internet上的有效地址。這個映射僅在郵件發送出postfix主機時才發生;當郵件在同一臺機器的不同用戶間傳遞郵件時,將不會使用地址映射功能。
下面的例子展現了一些附加的配置。你需要把這些附加的配置與該文檔前半部分介紹的基本配置結合起來。
1 /etc/postfix/main.cf:
2     smtp_generic_maps = hash:/etc/postfix/generic
3
4 /etc/postfix/generic:
5     [email protected]             [email protected]
6     [email protected]             [email protected]
7     @localdomain.local                [email protected]
當郵件通過SMTP發送給公網的郵件服務器時:
第5,6行    左邊是內部的郵件地址,右邊的部分是公網的郵件地址
如果你的系統使用dbm文件來代替db文件的話,那麼用dbm來代替hash。查看你的postfix支持哪些查詢表,用"postconf -m"命令。
當你改變了通用查詢表的內容時,需要執行一下"postmap /etc/postfix/generic"命令來重新生成該配置文件。
解決方法2: postfix 2.1及以前版本
老版本的postfix系統是使用有效地internet地址,並且讓postfix把有效的internet地址映射爲本地的地址。這樣,你能發送郵件給internet用戶和本地用戶。
下面的例子展現了一些附加的配置。你需要把這些附加的配置與該文檔前半部分介紹的基本配置結合起來。
 1 /etc/postfix/main.cf:
 2     myhostname = hostname.localdomain
 3     mydomain = localdomain
 4
 5     canonical_maps = hash:/etc/postfix/canonical
 6
 7     virtual_alias_maps = hash:/etc/postfix/virtual
 8
 9 /etc/postfix/canonical:
10     your-login-name    [email protected]
11
12 /etc/postfix/virtual:
13     [email protected]       your-login-name
如果你的系統使用dbm文件來代替db文件的話,那麼用dbm來代替hash。查看你的postfix支持哪些查詢表,用"postconf -m"命令。
當你改變了canonical表的內容時,需要執行一下"postmap /etc/postfix/canonical"命令
當你改變了virtual表的內容時,需要執行一下"postmap /etc/postfix/virtual"命令
在postfix的smtp/lmtp客戶端啓用sasl驗證
這個部分向你展示了一個典型的方案:postfix的smtp客戶端經過郵件網關sasl驗證後發送郵件。
問題解決提示:
如果你的sasl登陸失敗,並在maillog日誌文件裏提示:sasl驗證失敗:沒發現可用的驗證機制。這個錯誤參見“postfix SMTP/LMTP客戶端策略--SASL機制屬性”。
對於一些模糊的sasl驗證失敗,參見“postfix SMTP/LMTP客戶端策略--SASL機制名稱”
爲了是這個例子更可讀,我們把它分成兩個部分介紹。第一個部分關注基本的配置,第二個部分主要是設置用戶名/密碼信息。
/etc/postfix/main.cf:
    smtp_sasl_auth_enable = yes
    relayhost = [mail.isp.example]
    # Alternative form:
    # relayhost = [mail.isp.example]:submission
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
 
smtp_sasl_auth_enable設置決定是否啓用客戶端的驗證。我們將在第二部分配置客戶端的用戶名和密碼信息。
relayhost參數設置將強制postfix的SMTP把所有發往公網的郵件傳遞到指定的郵件網關,而不是直接把郵件發送到目的郵箱。
在relayhost參數設置中,中括號"[]"阻止postfix的smtp到mx記錄中查找中括號中的名稱。
relayhost的目的地可以指定一個非默認的tcp端口。例如:[mail.isp.example]:submission告訴postfix連接tcp的587端口--這是爲email客戶應用保留的端口。
postfix的smtp客戶端要與smtp服務器使用一樣的驗證方法"AUTH=method...."以迴應ehlo命令;這要求沒有額外的postfix客戶端配置。
postfix的smtp客戶端不支持過期的"wrappermode"協議--在smtp服務器使用465端口。使用隧道,請參見TLS_README文檔
使用smtp_sasl_password_maps參數,我們能配置postfix的smtp客戶端發送用戶名和密碼信息給郵件網關服務器。正如接下來要討論的部分,postfix的smtp客戶端支持多isp帳戶。由於這個原因,用戶名和密碼存儲在一個郵件網關服務器可以訪問的表中
/etc/postfix/sasl_passwd:
    # destination                   credentials
    [mail.isp.example]              username:password
    # Alternative form:
    # [mail.isp.example]:submission username:password
重要提示:
把sasl客戶端的密碼文件放在/etc/postfix目錄中,確保只有root用戶對該文件可讀寫。postfix的smtp客戶端可以讀取sasl客戶端的密碼。它在降低特權和使用chroot前,以root用戶的身份打開該文件
當改變/etc/postfix/sasl_passwd之後,一定要使用postmap命令
如果在relayhost destination中指定了相關的值,必須在smtp_sasl_password_maps文件中使用相同的值
如果你在relayhost destination中指定了非默認的tcp端口(比如:":submission" or ":587"),你必須在smtp_sasl_password_maps使用相同的端口
配置基於發送者的sasl驗證機制
postfix爲不同的發送地址提供不同的isp帳戶(postfix 2.3版本之後)。當一個人使用同一臺機器用於工作和生活時,或者當同一臺postfix服務器使用不同的isp帳戶時,這個設置將非常有用。
爲了實現這個功能,postfix支持per-sender的sasl密碼和per-sender中繼主機。在下面的例子中,postfix的smtp客戶端將先通過發送者地址查找sasl密碼文件,然後通過目的地址查找sasl密碼文件。同樣的,postfix的trivial-rewrite(8)守護進程將查找per-sender的中繼主機文件,並使用默認的中繼設置作爲最後的辦法。
/etc/postfix/main.cf:
    smtp_sender_dependent_authentication = yes
    sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    relayhost = [mail.isp.example]
    # Alternative form:
    # relayhost = [mail.isp.example]:submission
/etc/postfix/sasl_passwd:
    # Per-sender authentication; see also /etc/postfix/sender_relay.
    [email protected]               username2:password2
    [email protected]               username2:password2
    # Login information for the default relayhost.
    [mail.isp.example]              username:password
    # Alternative form:
    # [mail.isp.example]:submission username:password
/etc/postfix/sender_relay:
    # Per-sender provider; see also /etc/postfix/sasl_passwd.
    [email protected]               [mail.example.com]:submission
    [email protected]               [mail.example.net]
如果你富有創造性,你能把兩個表整合到mysql數據庫中,並配置不同的postfix查詢條件
如果你的系統使用dbm文件來代替db文件的話,那麼用dbm來代替hash。查看你的postfix支持哪些查詢表,用"postconf -m"命令。
當改變了sasl_passwd表時,執行"postmap /etc/postfix/sasl_passwd"命令
當改變了sender_relay表時,執行"postmap /etc/postfix/sender_relay"命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章