Centos

Exim + Dovecot 發送或接收電子郵件出現錯誤:未知使用者

  • April 5, 2020

我正在使用 CentOS 7 + Exim 4.92 + Dovecot 2.2.36 和 RoundCubeMail 作為 Web 界面執行郵件伺服器,並且遇到以下問題:當我發送或接收不是 admin@ 或 info@ 或 dev@ 等的電子郵件時.我有以下錯誤:

2020-04-05 05:37:52 H=mail.mydomain.com (IP) [IP] sender verify fail for <bender@mydomain.com>: Unknown user
2020-04-05 05:37:52 H=mail.mydomain.com (IP) [IP] F=<bender@mydomain.com> A=dovecot_login:bender@mydomain.com rejected RCPT <admin@mydomain.com>: Sender verify failed

在這裡,我嘗試從bender@mydomain.com 向admin@mydomain.com 發送電子郵件。但是,如果我從管理員向 info 發送電子郵件,或者從 dev 向 info 發送電子郵件,一切順利:發送和接收電子郵件,不會發生錯誤。

如果我向bender@mydomain.ru 發送電子郵件,那麼我會收到返回的消息:

郵件傳遞失敗:將郵件返回給發件人

此消息是由郵件傳遞軟體自動創建的。

您發送的郵件無法傳遞給一個或多個收件人。這是一個永久性錯誤。以下地址失敗:

bender@mydomain.com 未知使用者報告-MTA:dns;mail.mydomain.com

行動:失敗

最終收件人:rfc822;bender@mydomain.com

狀態:5.0.0

所有郵箱都是通過 VESTA CP 創建的並且確實存在,passwd文件位於 /home/user/conf/mail/mydomain.com/ 並包含以下條目:

bender:{MD5}$1$XXX:user:mail::/home/user:0

郵件伺服器主機:mail.mydomain.com

MX 條目:mail.mydomain.com

exim 配置文件中通過 dovecot 進行身份驗證:

dovecot_login:
 driver = dovecot
 public_name = LOGIN
 server_socket = /var/run/dovecot/auth-client
 server_set_id = $auth1

dovecot_plain:
 driver = dovecot
 public_name = PLAIN
 server_socket = /var/run/dovecot/auth-client
 server_set_id = $auth1

Dovecot 的10-auth.conf文件包含以下條目:

disable_plaintext_auth = no
auth_verbose = yes
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext

Dovecot 的auth-passwdfile.conf.ext

passdb {
 driver = passwd-file
 args = scheme=MD5-CRYPT username_format=%n /etc/exim/domains/%d/passwd
}

userdb {
 driver = passwd-file
 args = username_format=%n /etc/exim/domains/%d/passwd
}

/etc/exim/domains/mydomain.com - 符號連結到**/home/user/conf/mail/mydomain.com/**

我可以使用所有這些郵件帳戶成功登錄 RoundCube Web 界面。

我花了 3 天時間試圖在網際網路上找到答案並嘗試更改 exim/dovecot 配置文件,但沒有任何幫助。我被困住了。我猜像 admin/info/dev 這樣的電子郵件是一些受信任的標準,或者存在於以前的 passwd 文件/配置文件中的某個地方,但我在我的伺服器上沒有找到任何東西,無論如何,如果我在 /home 中更改使用者名或密碼雜湊/user/conf/mail/mydomain.com/passwd 我什至無法登錄 RoundCubeMail 並發送電子郵件。我是郵件伺服器的新手,所以我什至不知道在哪裡探勘,我盡我所能嘗試了我的知識。

PS exim 和 dovecot 帶有 VESTA CP,但由於升級到最新版本的 mysql 依賴性,我手動刪除並安裝了它們。

您的 dovecot 配置配置為使用虛擬使用者數據庫,即您的電子郵件使用者不是伺服器的系統使用者。另一方面,Exim僅配置為將郵件傳遞給本地系統使用者。

您需要將其配置為使用 Dovecot 使用者數據庫(參見Dovecot 文件)。所以:

  • 註釋掉你的localuser路由器,
  • 在路由器之後添加一個路由器以檢查 Dovecot 使用者localuser
dovecot_local_users:
   driver = accept
   domains = +local_domains
   # Requires fixing permission, so that Exim can read it
   local_parts = lsearch;/etc/exim/domains/${domain}/passwd
   transport = dovecot_delivery
  • 在傳輸部分的任何地方添加一個transport(如上述連結中所述):
dovecot_delivery:
   driver = pipe
   # The path to the dovecot-lda binary may differ on your system
   command = /usr/local/libexec/dovecot/dovecot-lda -d $local_part@$domain -f $sender_address
   message_prefix =
   message_suffix =
   log_output
   delivery_date_add
   envelope_to_add
   return_path_add
   # Set the appropriate user and group, which your mailboxes use.
   #user =
   #group = mail
   #mode = 0660
   temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
  • 使用以下命令測試路由配置:
/usr/sbin/exim4 -bt address_to_test

編輯lsearch;/etc/exim/domains/${domain}/passwd要求您授予Exim4訪問dovecot文件的權限passwd。這可能存在安全風險,因為此文件包含真實密碼。這樣你就可以:

  • 註釋掉local_parts條件。不需要passwd文件訪問,您的伺服器將在會話期間接受任何使用者名,SMTP並在之後為不存在的使用者名生成退回消息。由於垃圾郵件中的大多數Return-Path地址都是偽造的,這會將郵件發送到錯誤的地址。
  • 生成並維護第二個文件,其中僅包含虛擬使用者的使用者名:
user1:
user2:
user3:

並將其作為lsearch.

順便說一句,您應該考慮將 Dovecot 中的密碼方案(參見Dovecot 文件)更改為更現代的方式,即現代發行版文件中使用的SHA512-CRYPT行。/etc/shadow

引用自:https://serverfault.com/questions/1010962