让 sendmail 根据 dovecot (或 passwd 样式的文件) 验证用户身份

让 sendmail 根据 dovecot (或 passwd 样式的文件) 验证用户身份

我已经设置了一个 Debian 10 邮件服务器,其中装有 sendmail 和 dovecot+virtual users,准备进行迁移(旧服务器也运行 sendmail+dovecot,但版本较旧,并且有“真实”用户)。

在 dovecot 方面,一切都很顺利。我设置了一个密码文件身份验证进行测试,我可以登录、保存草稿,并在 IMAP 客户端中查看本地传送的邮件。

然而,在发送时,sendmail 设置为需要身份验证,并且我正在寻找一种方法让 sendmail 使用与 dovecot 相同的身份验证数据库,理想情况下甚至可以针对 dovecot 进行身份验证(通过 SASL?)。

搜索网络没有得到任何有用的结果,显然 sendmail + dovecot 组合相对较少见。虽然我并不打算永远停留在这个状态,但现在我正在寻找一个快速解决方案,为我迁移到新堆栈赢得时间。

答案1

尝试使用dovecot-msa在端口 msa(587) 上使用“类似本地 sendmail”中继到127.0.0.1:25
在我看来,这是使用 dovecot 维护的 IMAP、POP3 和 SMTP 密码的简单方法。

在 sendmail.mc 中使用来FEATURE(no_default_msa)禁用 sendmail 在端口 587 上的监听。

警告:让 sendmail 知道 dovecot 处理的有效虚拟电子邮件地址列表是一个单独的问题 [反向散射预防]。

答案2

您可以配置 cyrus-sasl 以使用远程 imap 功能对 dovecot 进行身份验证。

例如在 CentOS 中(针对本地 IMAP/Dovecot 进行身份验证):

/etc/sysconfig/saslauthd
MECH=rimap
FLAGS=" -O 127.0.0.1"

但是,这可能会有问题,因为您将与 IMAP 服务器建立更多连接,并且在日志中,您将看到来自本地主机的登录尝试,因此请记住这一点。

答案3

在 Debian 上,你可以编辑/etc/default/saslauthd并更改以下行:

# Example: MECHANISMS="pam"
MECHANISMS="rimap"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS="-O 127.0.0.1"

并且,可选地(在同一个文件中),如果您使用带有 %u(用户@域用户名)的 dovecot 的 userdb,则需要将 -r 选项添加到选项中,以便 saslauthd 将 @domain 传递给 rimap:

OPTIONS="-r -c -m /var/run/saslauthd"

如果您没有在选项中添加 -r,那么在 dovecot 方面,您将需要使用 %l 而不是 %u,并且您的 dovecot 用户文件将包含“用户名”行而不是“用户名@域”行。

例如:

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%l /etc/dovecot/users
}

userdb {
  driver = passwd-file
  args = username_format=%l /etc/dovecot/users

  # Default fields that can be overridden by passwd-file
  default_fields = uid=dovecot-virtual gid=dovecot-virtual home=/home/dovecot-virtual/%l
}

我个人选择在 saslauthd 中添加 -r,因为这样我就可以在 sendmail 和 dovecot 中对不同域名中使用相同用户名的用户进行身份验证。

相关内容