Postfix DNS相濡以沫
寄出郵件時,postfix使用系統(tǒng)的resolver(即DNS client,能向DNS server查詢網(wǎng)域信息的函數(shù)庫)來取得DNS信息。收信時,你的網(wǎng)域的DNS必須能提供遞送信息(MX或A記錄)給外界查詢,讓其他MTA能夠找到你的postfix server。
DNS對于寄信程序的影響
postfix的smtp MDA必須要能夠取得MX與A記錄,才能決定收信主機的名稱與ip地址。也就是說,在寄信程序中,postfix至少要進行兩次DNS查詢,第一次是為了取得MX主機名稱,另一次是取得該主機名稱的ip地址。由于postfix使用操作系統(tǒng)的resolver來訪問DNS server,因此,運行postfix的系統(tǒng)至少要能夠訪問一臺DNS server。雖然大部分運行postfix的系統(tǒng)通常也會運行DNS server,但是這并非必要條件。
如果你懷疑自己的系統(tǒng)不能夠正確的查詢DNS信息,有三個命令行工具可以幫你找出問題:nslookup、dig以及host。絕大部分unix系統(tǒng)都應該安裝這三個工具。你可以利用這些工具查出特定網(wǎng)域的所有類型的資料記錄,包括讓postfix能將郵件送到正確主機的MX記錄。
DNS問題可能源自于postfix所在系統(tǒng)本身的設定錯誤,也可能是目標網(wǎng)域的DNS server沒有設定好。當你尋找問題原因時,有非常重要的一點必須謹記在心:postfix總是先查mx記錄,然后再查A記錄。即使你可以順利查出網(wǎng)域名稱的ip地址,但是如果該網(wǎng)域沒有提供mx信息,postfix不一定能夠在第一次就順利寄出郵件。
配置文件選項
投遞郵件時,postfix從DNS系統(tǒng)查出目標網(wǎng)域的所有MX資源記錄,然后依據(jù)優(yōu)先值來排序。在postfix順利連接到收信方的smtp server之后,對方會以狀態(tài)碼來回答smtp MDA的要求。介于2xx范圍之間的狀態(tài)碼代表答應要求;若是返回4xx范圍內(nèi)的狀態(tài)碼,表示對方遇到呢暫時性的錯誤;如果是狀態(tài)碼在5xx范圍內(nèi),表示發(fā)生永久性問題。
PTR記錄
為了防治垃圾郵件,現(xiàn)在有許多SMTP server要求客戶端的ip地址必須要能夠查出有效的PTR資源記錄。因此,你的postfix系統(tǒng)的ip地址必須在DNS系統(tǒng)里有一個指向postfix主機規(guī)范名稱的PTR記錄,這樣才能確保所有SMTP SERVER都原意收下你寄出的郵件
DNS對于收信程序的影響
要讓postfix收下特定網(wǎng)域的郵件,運行postfix的主機本身名稱必須被列在該網(wǎng)域的MX記錄里,而且postfix也必須被設定成可以收下該網(wǎng)域的郵件。postfix能收下三種網(wǎng)域的郵件:系統(tǒng)本身所處的本地網(wǎng)域(local domain)、轉(zhuǎn)發(fā)網(wǎng)域(relay domains)、虛擬網(wǎng)域(virtual domains)。其中虛擬網(wǎng)域可能是使用虛擬別名(virtual aliases)或虛擬郵箱(virtual mailboxes)。每一種網(wǎng)域都必須被列在特定的postfix參數(shù)才有效。
網(wǎng)域類型 參數(shù)
本地 mydestination
轉(zhuǎn)發(fā) relay_domains
虛擬郵箱 virtual_mailbox_domains
虛擬別名 virtual_alias_domains
同一個網(wǎng)域不可同時列于不同參數(shù)中。如果postfix在兩個參數(shù)找到同一個網(wǎng)域,它會發(fā)出警告。如果你在日志文件看到“mail for example.com loops back to myself“這樣的錯誤信息,通常是因為你的postfix server被列在某網(wǎng)域的MX列表里,但是postfix卻沒被設定成可以收下該網(wǎng)域的郵件。
常見問題
DNS設定不當所造成的問題,通常沒有立刻可見的效果,只能從日志文件里的錯誤信息來分析。
”mail for domain loops back to myself“ (某網(wǎng)域的郵件繞回我自己)
所有關于DNS的錯誤中,這可能是最常見的。問題原因是你的postfix server被列在某網(wǎng)域的MX列表里,但是你沒讓postfix知道,它自己就是該網(wǎng)域的郵件終點站。所以,解法就是將該網(wǎng)域列在mydestination參數(shù),或是設定為虛擬網(wǎng)域或轉(zhuǎn)發(fā)網(wǎng)域。倘若你的postfix server是列在porxy或NAT設備之后,它可能無法察覺自己是某網(wǎng)域的MX主機,在這種情況下,你得將proxy系統(tǒng)得ip地址加到proxy_interfaces參數(shù)
“host found but no data record of requested type“(能找到主機,但是沒有指定數(shù)據(jù)類型得記錄)
網(wǎng)域得DNS數(shù)據(jù)庫里找不到MX記錄,而且網(wǎng)域名稱自己也沒有A記錄。你得要聯(lián)絡該網(wǎng)域得DNS管理員才能解決這問題。如果你自己就是DNS域名數(shù)據(jù)庫得管理員,請確定你的郵件服務器的主機名稱確實列在該網(wǎng)域的MX記錄里。
”no mx host for domain has a valid A record“
網(wǎng)域的DNS數(shù)據(jù)庫有MX記錄,但是查不出mx主機名稱所對應的ip地址。你得要聯(lián)絡該網(wǎng)域DNS管理員才能解決這問題。對于你自己得網(wǎng)域,請確定mx記錄所列得每一個主機名稱,都有一個有效而且正確得A記錄。
”host not found, try again“
從DNS系統(tǒng)中查詢不出任何有意義得結(jié)果。有可能是DNS serer斷線或拒絕服務,甚至故障。如果能確定該網(wǎng)域得DNS SERVER正常運作無誤,問題可能是網(wǎng)絡,或是postfix server系統(tǒng)本身得resolver沒有設定妥當。對于最后一種可能,你應該檢查系統(tǒng)的/etc/nsswitch.conf與/etc/resolv.conf配置文件。
通過上文介紹,我們知道了DNS對Postfix的寄信和收信程序的影響。希望對大家有所幫助!
【編輯推薦】
- 深入了解 Linux下安裝DNS+Sendmail服務
- 服務器集群高可用性注意事項:DNS與故障轉(zhuǎn)移
- 大多企業(yè)仍然容易受到DNS緩存中毒攻擊
- 對于企業(yè)來說 免費的DNS合適嗎?
- 教你如何設置Postfixadmin的自動回復
- 如何對Postfix進行資源控制
- Postfix中的地址操作大全