postfix 中只開 localhost 網路介面或跑 Virtual Host 時, 碰到 loops back to myself 錯誤要如何解決?

[服務架設][系統] postfix 中只開 localhost 網路介面或跑 Virtual Host 時, 碰到 loops back to myself 錯誤要如何解決?

在某些需求下,系統管理者可能只想跑起 postfix mail server (SMTP server) 去服務 localhost 網路介面來的要求,以幫本機系統上的一些服務代送信件(Relay Mail) (註一);又或著在跑 Virtual Host 時,當碰到『loops back to myself』錯誤訊息要如何解決?請看以下說明。

環境說明:以下的範例是以在 Linux 作業系統中的相關環境與命令作為說明基礎。

Mail 服務出問題(例如:信件收不到或寄不出去)時,大體上都能在 /var/log/maillog 檔案中看相關個錯誤訊息記載,在上述所指的情況下可以看到 maillog Log 檔中出現類似以下錯誤訊息:

…..
Mar 4 22:42:26 rental postfix/cleanup[12326]: D909F435B5: message-id=<20070304144226.D909F435B5@localhost>
Mar 4 22:42:26 rental postfix/qmgr[2237]: D909F435B5: from=<>, size=2355, nrcpt=1 (queue active)
Mar 4 22:42:26 rental postfix/qmgr[2237]: C979E4362F: removed
Mar 4 22:42:26 rental postfix/smtp[12327]: D909F435B5: to=, relay=none, delay=0, status=bounced (mail for rental.zhupiter.com loops back to myself)
Mar 4 22:42:26 rental postfix/qmgr[2237]: D909F435B5: removed
…..

上面的 Log 訊息中特別注意到『mail for rental.zhupiter.com loops back to myself』即是信件寄不成功的問題所在。

第一步:
解決方法是,在 /etc/postfix/main.cf 中的 mydestination 欄位中增設 host name 或 domain name。

上述範例訊息指出『給 rental.zhupiter.com 的信件』的 rental.zhupiter.com (註二)即是所要增設的 host name 或 domain name。

意即,原本在 /etc/postfix/main.cf 中的 mydestination 欄位由:

…..
mydestination = $myhostname, localhost.$mydomain, localhost
…..

增設成:

…..
mydestination = $myhostname, localhost.$mydomain, localhost, rental.zhupiter.com
…..

在跑 Virtual Host 時則是:

1. 確定 /etc/postfix/main.cf 檔案中有這行設定:

…..
virtual_alias_maps = hash:/etc/postfix/virtual
…..

2. 在 /etc/postfix/virtual 檔案中(註三),假設 djlibphp.zhupiter.com 是 Virtual Host,則增設:

…..
djlibphp.zhupiter.com DjLibPhp
…..

第二步:

Step2.1. 有更動到 /etc/postfix/virtual 檔案時,要在命令列先執行『postmap /etc/postfix/virtual』。

Step2.2. 重跑 postfix:命令列執行『postfix stop; postfix start』或『service postfix stop; service postfix start』。


註一:postfix 中只開 localhost 網路介面時,在 /etc/postfix/main.cf 檔案中相關設定可能會如以下設定:

…..
myhostname = localhost
…..
inet_interfaces = localhost
…..
mydestination = $myhostname, localhost.$mydomain, localhost
…..

要是 myhostname 填寫成執行『hostname』命令所得到的值時,因為 『mydestination = $myhostname,…』,所以不會碰到這篇文章所敘述到的問題;如果不是這樣填寫,則會碰到。直接把 myhostname 寫成 執行『hostname』命令所得到的值也是個解法。

註二:在第一種情況下(postfix 中只開 localhost 網路介面),要增設的 host name 或 domain name 一般是執行『hostname』命令所得到的值。

註三:/etc/postfix/virtual 檔案中的格式是:
virtual-alias.domain anything (right-hand content does not matter)
postmaster@virtual-alias.domain postmaster
user1@virtual-alias.domain address1
user2@virtual-alias.domain address2, address3

意即,設定 Virtual Host/Domain 時,一行的第一欄是 Virtual Host/Domain;第二欄則可是任何字串。

註四:Virtual Host/Domain 的設定,詳情請看 manual page virtual(5)

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.