为什么 Postfix 不通过 lmtp 仅将用户名中继到 Dovecot?在 FreeBSD 上如何实现这一点?

为什么 Postfix 不通过 lmtp 仅将用户名中继到 Dovecot?在 FreeBSD 上如何实现这一点?

我无法理解 Postfix 如何将数据中继到 Dovecot,并寻找一个最小的(与发行版配置文件的偏差尽可能小的)但完整的示例来完成以下任务:

我有几个想要接收邮件的域。我希望虚拟用户拥有有关他们的所有信息,包括存储在纯文本文件中的密码。

所以,按照 Postfix 的例子,我会

virtual_mailbox_domains = mydomain1.com, mydomain2.com, ... (or a hash)
virtual_mailbox_maps = hash:/path/to/vmailboxes
virtual_transport = lmtp:unix:private/dovecot-lmtp

在虚拟邮箱中我会

[email protected] someuser

在鸽舍我会

passdb {
  driver = passwd-file
  args = scheme=plain-md5 username_format=%n /usr/local/etc/dovecot/users
}
userdb {
  driver = passwd-file
  args = username_format=%n /usr/local/etc/dovecot/users
  default_fields = uid=dovecot gid=dovecot home=/home/dovecot/%u
}

所以我认为我应该让 Postfix 接受邮件[电子邮件受保护],了解它的目的地是名为的用户某个用户并将其准确地转发给 Dovecot。然而 Postfix 总是中继[电子邮件受保护]到 Dovecot 这绝对不是我想要的,因为我可能有其他电子邮件地址指向同一用户,例如

[email protected] someuser
[email protected] someuser

我希望 Dovecot 查阅其密码/用户数据库并将邮件填充到适当的目录中某个用户。我还同样希望它查询相同的数据库以进行 IMAP 身份验证。

最后,我想要 SMTP 授权,以便某个用户可以连接到 Postfix 并将其用作中继。我将如何使用我拥有的配置来做到这一点?我是否应该为此在 Postfix 中设置单独的密码表,或者 Postfix 会以某种方式咨询 Dovecot 并允许所述用户发送邮件?

答案1

所以本质上有两个错误。

首先,virtual_mailbox_maps 不是适合我的场景的正确选项。相反,我必须使用 virtual_alias_maps。

其次,我们需要在虚拟邮箱的左侧和右侧提供电子邮件地址,否则 Postfix 将尝试发送到 $myhostname,它只是无法通过 LMTP 提供简单的用户名。所以如果是

[email protected] [email protected]
[email protected] [email protected]
[email protected] anotheruser

前两行可以正常工作,转发发往两者的邮件[电子邮件受保护][电子邮件受保护]给名为“的用户[电子邮件受保护]“ 在 Dovecot 中。唯一的区别是,现在在进行身份验证时,我们必须使用 “ 登录[电子邮件受保护]” 而不仅仅是没有“@...”的用户名。

然而,第三行将转发邮件[电子邮件受保护][电子邮件受保护],并且邮箱写入将由 Postfix 处理,在这种情况下不会调用 LMTP。

最后,最好使用relay_而不是virtual_,因为按照Postfix的术语,将邮件中继到Dovecot的LMTP服务,即使它在同一台机器上运行,也与在其他地方中继它是一样的,因此使用relay_选项是“更明智的”。

main.cf 的工作配置将是

relay_transport = lmtp:unix:private/dovecot-lmtp
relay_domains = mydomain1.com, mydomain2.com
virtual_alias_maps = hash:/usr/local/etc/postfix/virtualmailboxes

smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_auth_enable = yes

smtpd_tls_cert_file = /etc/ssl/servercertificate.pem
smtpd_tls_key_file = /etc/ssl/serverkey.pem
smtpd_tls_security_level = may
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

所有其他选项都根据您的需要而定,但我没有触碰 Postfix 附带的示例 main.cf 中的任何其他内容来使其正常工作。

虚拟邮箱:

[email protected] [email protected]
[email protected] [email protected]
[email protected] [email protected]

Dovecot中配置的授权部分:

auth_debug = yes
auth_verbose = yes
auth_mechanisms = plain
passdb {
  driver = passwd-file
  args = scheme=plain-md5 username_format=%u /usr/local/etc/dovecot/users
}
userdb {
  driver = passwd-file
  args = username_format=%u /usr/local/etc/dovecot/users
  default_fields = uid=dovemail gid=dovemail home=/var/mail/%u
}

/usr/local/etc/dovecot/users:

[email protected]:{PLAIN}yourpassword::::::
[email protected]:{PLAIN}yourpassword::::::

/usr/local/etc/dovecot/conf.d/10-master.conf 需要取消中间几行的注释,以使已经存在的部分看起来像这样:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    group = postfix
    user = postfix
  }

以及同一文件中的另一部分:

unix_listener /var/spool/postfix/private/auth {
   mode = 0660
   user = postfix
   group = postfix
}

需要创建 dovemail 用户并授予对邮件目录(即 /var/mail)的读/写权限

相关内容