我无法理解 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)的读/写权限