我正在运行一个以 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 <[email protected]>: Unknown user
2020-04-05 05:37:52 H=mail.mydomain.com (IP) [IP] F=<[email protected]> A=dovecot_login:[email protected] rejected RCPT <[email protected]>: Sender verify failed
我尝试从[电子邮件保护]到[电子邮件保护]。但如果我从管理员向信息发送电子邮件,或者从开发人员向信息发送电子邮件,一切都会顺利进行:电子邮件被发送和接收,没有发生任何错误。
如果我发送电子邮件至[电子邮件保护]然后我收到返回的消息:
邮件投递失败:将消息返回给发件人
该消息是由邮件传递软件自动创建的。
您发送的邮件无法递送给一个或多个收件人。这是一个永久性错误。以下地址失败:
[电子邮件保护] 未知用户报告-MTA:dns;mail.mydomain.com
操作:失败
最终收件人:rfc822;[电子邮件保护]
状态:5.0.0
所有邮箱都是通过 VESTA CP 创建的并且确实存在,密码文件位于 /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-身份验证.conf文件包含以下条目:
disable_plaintext_auth = no
auth_verbose = yes
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext
Dovecot 的验证密码文件.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/用户/conf/mail/mydomain.com/
我可以使用所有这些邮件帐户成功登录 RoundCube 网络界面。
我花了 3 天时间在互联网上寻找答案,并尝试更改 exim/dovecot 配置文件,但都无济于事。我陷入困境。我猜想像 admin/info/dev 这样的电子邮件是一些值得信赖的标准,或者存在于以前的密码文件/配置文件的某个地方,但我在我的服务器上没有找到任何内容,而且无论如何,如果我在 /home/user/conf/mail/mydomain.com/passwd 中更改用户名或密码哈希,我甚至无法登录 RoundCubeMail 并发送电子邮件。我是邮件服务器的新手,所以我甚至不知道从哪里开始挖掘,我尽我所能尝试了我所知道的一切。
PS exim 和 dovecot 带有 VESTA CP,但是由于升级到最新版本的 mysql 依赖性,我手动删除并安装了它们。
答案1
您的 Dovecot 配置已配置为使用虚拟用户数据库,即您的电子邮件用户不是您服务器的系统用户。另一方面进出口仅配置为向本地系统用户递送邮件。
您需要对其进行配置以使用 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访问鸽舍的passwd
文件。这可能是一个安全风险,因为此文件包含真实密码。因此您可以:
注释掉该
local_parts
条件。无需passwd
文件访问权限,但你的服务器将接受任何会话期间用户名SMTP
,之后为不存在的用户名生成退回邮件。由于Return-Path
垃圾邮件中的大多数地址都是伪造的,因此这会将邮件发送到错误的地址。生成并维护第二个文件,该文件仅包含虚拟用户的用户名:
user1: user2: user3:
并将其作为参数传递给
lsearch
。
顺便说一句,您应该考虑更改 Dovecot 中的密码方案(参见Dovecot 文档)变成更现代的东西,SHA512-加密用于/etc/shadow
现代发行版的文件。