首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么后缀中继不只是通过lmtp将用户名传递给Dovecot,如何在FreeBSD上完成这一任务?

为什么后缀中继不只是通过lmtp将用户名传递给Dovecot,如何在FreeBSD上完成这一任务?
EN

Unix & Linux用户
提问于 2018-03-08 20:45:53
回答 1查看 965关注 0票数 1

我很难理解后缀如何将数据中继到Dovecot,并寻找最小值(尽可能少偏离分发版配置文件),但是完成了关于如何完成以下工作的示例:

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

所以,依循后缀的例子,我会

代码语言:javascript
复制
virtual_mailbox_domains = mydomain1.com, mydomain2.com, ... (or a hash)
virtual_mailbox_maps = hash:/path/to/vmailboxes
virtual_transport = lmtp:unix:private/dovecot-lmtp

在邮箱里我会

代码语言:javascript
复制
user@mydomain1.com someuser

在Dovecot我会

代码语言:javascript
复制
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接受用户@mydomain1.com的邮件,了解它的目的地是某个名为某个用户的用户,并将其准确地转发给Dovecot。然而,Postfix总是将user@mydomain1.com中继到Dovecot,这肯定不是我想要的,因为我可能有其他电子邮件地址指向同一个用户,比如

代码语言:javascript
复制
user@mydomain1.com someuser
sales@mydomain1.com someuser

我希望Dovecot能够查询其密码/用户数据库,并将邮件填充到适当的目录中供某些用户使用。同样,我也希望它能够使用相同的数据库进行IMAP身份验证。

最后,我希望有SMTP授权,以便某些用户可以连接到Postfix并将其用作中继。我如何用我的配置来实现这一点呢?我是否应该在后缀中有单独的密码表,或者Postfix会以某种方式咨询Dovecot并允许该用户发送邮件?

EN

回答 1

Unix & Linux用户

发布于 2018-03-13 10:46:05

所以本质上有两个错误。

首先,对于我的场景来说,virtual_mailbox_maps不是正确的选择。相反,我必须使用virtual_alias_maps。

其次,我们需要在虚拟邮箱的左侧和右侧提供电子邮件地址,因为否则Postfix将尝试将其传递给$myhostname,它只是不能通过LMTP提供一个简单的用户名。所以,如果

代码语言:javascript
复制
info@mydomain1.com someuser@mydomain2.com
ceo@mydomain1.com someuser@mydomain2.com
sales@mydomain1.com anotheruser

前两行运行良好,将发送给info@mydomain1.com和ceo@mydomain1.com的邮件转发给Dovecot中名为"someuser@mydomain2.com“的用户。唯一的区别是,在进行身份验证时,我们必须使用"someuser@mydomain2.com“登录,而不是只使用没有”@.“的用户名。

然而,第三行将把sales@mydomain1.com的邮件转发到anotheruser@primary.domain.com,邮箱写将由Postfix处理,在这种情况下不会调用LMTP。

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

然后,main.cf的工作配置将是

代码语言:javascript
复制
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

根据您的需要,所有其他选项都可以选择,但是我在main.cf示例中没有碰过任何其他的选项,它们都是随Postfix一起提供的,以使工作正常进行。

虚拟邮箱:

代码语言:javascript
复制
info@mydomain1.com user@mydomain2.com
ceo@mydomain1.com user@mydomain2.com
sales@mydomain2.com user@mydomain2.com

在Dovecot中配置的授权部分:

代码语言:javascript
复制
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/用户:

代码语言:javascript
复制
user@mydomain1.com:{PLAIN}yourpassword::::::
user@mydomain1.com:{PLAIN}yourpassword::::::

/usr/local/etc/dovecot/conf.d需要去掉中间的几行注释,使已经出现的部分看起来如下:

代码语言:javascript
复制
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    group = postfix
    user = postfix
  }

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

代码语言:javascript
复制
unix_listener /var/spool/postfix/private/auth {
   mode = 0660
   user = postfix
   group = postfix
}

需要创建dovemail用户,并赋予邮件目录的读/写权限,即/var/mail

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/429109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档