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