我已经设置了一个 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 中对不同域名中使用相同用户名的用户进行身份验证。