Exim+Dovecot 发送或接收邮件出现错误:未知用户

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 <[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现代发行版的文件。

相关内容