使用sendmail和dovecot lda将邮件发送给虚拟用户

我试图将我们的基于Linux系统用户的邮政系统迁移到虚拟用户。

我有

  • sendmail与procmail交付
  • 达夫科特
  • 系统用户使用不同的用户名
  • roundcube web界面

Sendmail处理所有的邮件传递给用户邮箱,dovecot处理pop3和imap与用户的交互,一切都像一个魅力

现在我们开始在全局实现活动目录,我想在ldap virutal用户之前拒绝来自linux系统的电子邮件用户。

我启用了sendmail ldap_routing

define(`confLDAP_DEFAULT_SPEC', `-h "10.1.0.1" -b "ou=portal,dc=univ,dc=priv" -d "cn=portal admin,ou=portal,dc=univ,dc=priv" -MLDAP_AUTH_SIMPLE -P/etc/mail/ldap_pass')dnl LDAPROUTE_DOMAIN_FILE(`/etc/mail/ldap_route_domains')dnl FEATURE(`ldap_routing', `null', `ldap -1 -T -v sAMAccountName -k (&(|(objectclass=user)(objectclass=group))(|(mail=%0)(proxyAddresses=smtp:%0)))',`passthru')dnl 

通过perl脚本为ldap用户创build简单的别名文件。 文件最初看起来像这样

 sAMAccountName1: vmail sAMAccountName2: vmail .... sAMAccountNameN: vmail 

启用dovecot-lda使用这个howto

不幸的是,sendmail将真实系统用户名(在我的情况下是“vmail”)作为-dparameter passing,而不是具有此configuration的virtial用户的sAMAccountName。

之后,我修改我的别名文件在这样的事情(受这个话题的启发)

 sAMAccountName1: "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1" sAMAccountName2: "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1" .... sAMAccountNameN: "|/usr/libexec/dovecot/dovecot-lda -d sAMAccountName1" 

这个解决scheme因为系统权利问题而无法解决。 这里是日志消息

致命:从userdb查找setgid(5000(vmail))失败,euid = 8(邮件),gid = 12(邮件),egid = 12(邮件):操作不允许(可能调用该二进制文件,并将进程组设置为5000(vmail)而不是12(mail))

dovecot将sendmail.cf中定义的代理与U = vmail:vmail进行交付

 Mdovecot, P=/usr/libexec/dovecot/dovecot-lda, F=l59DFMPhnu, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, M=51200000, U=vmail:vmail, T=DNS/RFC822/X-Unix, A=/usr/libexec/dovecot/dovecot-lda -d $u 

dovecot-lda有同样的主人和小组

 -rwxr-x--- 1 vmail vmail 28512 апр. 5 2013 /usr/libexec/dovecot/dovecot-lda 

如果我使用系统用户邮件,而不是vmail,一切都开始正常工作。 但是这个configuration似乎对我来说不太安全,我想用户用vmail> uid> 100而不是用户邮件。

所以邮件递送失败。 我感谢解决这个问题的任何帮助。

  1. 如果你不确定,跳过阅读:-)

  2. 使vmail特别发送邮件(没有DNS目的地查找)

     LOCAL_CONFIG CPvmail 
  3. 使用FEATURE(ldap_routing)selectmailHost而不是mailRoutingAddress

  4. 使用FEATURE(mailertable)select传送方式(邮件程序)

    的mailertable

     vmail dovecot:dummy 
  5. 不要使dovecot本地邮件 – function(local_procmail,…)

  6. 在dovecot邮件程序定义中,使用xSMTP规则而不是xL(本地)规则

    http://wiki2.dovecot.org/LDA/Sendmail

我试图自己设置,并在这里和那里find片段,但没有一个完整的配方。 这是我做的。

我正在运行FreeBSD 10.3-RELEASE,sendmail 8.15.2和dovecot 2.2.29。

您需要一个虚拟用户文件的用户:

 # passwd vmail:*:2025:2025:Dovecot Virtual Mail:/var/empty:/usr/sbin/nologin # group vmail:*:2025: 

鸽舍很简单,所以我们先做。 假设一个工作dovecotconfiguration,您将至less有一个userdb设置。 为虚拟用户添加一个新的:

 # Virtual users userdb { driver = static args = uid=vmail gid=vmail home=/var/vmail/%u } 

如果您还没有为静态证书添加passdb设置:

 passdb { args = scheme=plain-md5 username_format=%u /usr/local/etc/dovecot/imap-passwd driver = passwd-file } 

创build/ var / vmail:

 mkdir /var/vmail chown vmail:vmail /var/vmail 

除非您想为每个新的虚拟用户手动创build目录,否则添加:

 # Virtual users config lda_mailbox_autocreate = yes 

dovecot.conf(不打开lda_mailbox_autocreate,不存在的目录是EX_TEMPFAIL错误和邮件停留在本地sendmail队列中)的症状。

使用“doveadm pw -s PLAIN-MD5”并为新的虚拟用户添加一行:

 vfred:{PLAIN-MD5}912ec803b2ce49e4a541068d495ab570 

重新启动dovecot来获取新的configuration:

 service dovecot restart 

现在到sendmail。 如果你没有mailertable你需要添加一个:

 FEATURE(`mailertable')dnl 

sendmail.mc和:

 vmail dovecot:dummy 

到mailertable。 这是告诉sendmail使用* @ vmail的dovecot本地交付代理。

在sendmail.mc的结尾,你可能有这样的东西:

 MAILER(local)dnl MAILER(smtp)dnl 

附加一些内容:

 dnl dnl Dovecot virtual user delivery agent dnl LOCAL_CONFIG Mdovecot, P=/usr/local/libexec/dovecot/dovecot-lda, F=l59DFMPhnu, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, M=51200000, U=vmail:vmail, T=DNS/RFC822/X-Unix, A=/usr/local/libexec/dovecot/dovecot-lda -d $u 

生成一个新的sendmail.cf并重新启动sendmail:

 service sendmail stop ; sleep 1 ; service sendmail start 

(在FreeBSD下,“service sendmail restart”有点搞笑)

最后将你的虚拟用户添加到别名文件中:

 vfred: vfred@vmail 

运行newaliases和testing。