Exim + Dovecot 發送或接收電子郵件出現錯誤:未知使用者
我正在使用 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