« Postfix更换Logo了 | Main | 配置per user transport实现用户分布存储 »

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
本文网址:http://www.hzqbbc.com/blog/arch/2002/12/aecmail_loopce.html
 

December 18, 2002

产生mail loop的原因及解决方案

Mail loop是一个很常见,但有时却又让人很难发现故障所在的问题。如何去发现和解决呢?这里以我自己遇到的mail loop问题为例子,来分析一下个中原因。

日志里关于mail loop的内容如下:

Dec 18 18:35:20 smtp postfix/cleanup[9526]: 4846417D5E: 
    message-id=<20021218223122.C5B6C680A@smtp.hzqbbc.com> 
Dec 18 18:35:20 smtp postfix/qmgr[9342]: 4846417D5E:
    from=<hzqbbc@hzqbbc.com>, size=1431, nrcpt=4 (queue active) 
Dec 18 18:35:20 smtp postfix/local[9585]: C4F5117D5C: 
    to=<postmaster@192.168.0.27>, relay=local, delay=33,
    status=sent (forwarded as 4846417D5E) 
Dec 18 18:35:20 smtp postfix/local[9585]: 4846417D5E:
    to=<postmaster@192.168.0.27>, relay=local, delay=22, 
    status=bounced (mail forwarding loop for postmaster@192.168.0.27) 

这里ldap的entry是:
dn: mail=postmaster@overtheland.com,virtualDomain=overtheland.com,o=myldap
objectClass: top
objectClass: MailAccount
objectClass: MailAlias
accountActive: TRUE
mailacceptAction: RELAY
mail: postmaster@overtheland.com
homeDirectory: overtheland.com/postmaster
mailbox: overtheland.com/postmaster/Maildir/
quota: 20971520S,1000C
maildrop: postmaster@smtp.overtheland.com
maildrop: root@overtheland.com
maildrop: postmaster@192.168.0.27
maildrop: hzqbbc@redhut.net

相应的ldap设置是:
=================================================================
ldapstaraliasfixup_query_filter = (&(maildrop=%s)(accountActive=TRUE))
ldapstaraliasfixup_result_attribute = mail
~~~~~~~~~~~~
ldapforwardings_query_filter =(&(mail=%s)(accountActive=TRUE))
ldapforwardings_result_attribute = maildrop
~~~~~~~~~~~~~

这里为什么有问题呢?很简单的解释:我发信给root@192.168.0.27。按照alias部分的ldap
设定,信笺应该投递给postmaster@overtheland.com。。确实正常的投递了。不过问题也就
来了。因为还设置了forward部分,而它expect的是maildrop属性的值,这里maildrop有多个值
其中包括了root@192.168.0.27,这样forward时除了给那些非root@192.168.0.27的地址发信外
还会给root@192.168.0.27自己发信。。。这个就产生loop了(看log可看到)

之后。由于root@overtheland.com并不存在机器上(只是一个postmaster@overtheland.com)
的一个alias)。而这时pipe将信笺给了maildrop,maildrop查ldap时并没有办法查得出
root@overtheland.com就是postmaster@overtheland.com(这个是maildrop的ldap部分缺陷,
有待改进)。因此返回user unknow。这个时候自然得给发信者。。。

之后就是很混乱的loop及bounce 信笺了。所以注意一点。forward及alias必须分开来
设置(用不同属性)否则就麻烦了。

而有关类似的mail loop问题的讨论,在Postfix邮件列表上非常多,这里仅举一例:

寄件者:Dirk Datzert (Dirk.Datzert@rasselstein-hoesch.de)
主旨:postfix and ldap

View this article only
新闻群组:mailing.postfix.users
日期:2001-04-10 14:54:04 PST

Hi all,

I have a postfix question with ldap using:

How can I configure aliases_maps and virtual_maps for the following
issue:

a user has a local 'mail'/'mailalternateaddress' with 'uid' and an
'mailforwardingaddress'

I could configure for local delivery:

alias_maps: ldap:aliases

aliases_query_filter = (│(mail=%s)(mailalternateaddress=%s))
aliases_result_attribute = uid

If a user has no local address I can forward:

virtual_maps: ldap:forwarders

forwarders_query_filter = (│(mail=%s)(mailalternateaddress=%s))
forwarders_result_attribute = mailforwardingaddress

Now my question:

How can I configure postfix to do both for one user: delivery local and
forward ?

Thanx,
Dirk

-
To unsubscribe, send mail to majordomo@postfix.org with content
(not subject): unsubscribe postfix-users
第 4 条留言
寄件者:LaMont Jones (lamont@hp.com)
主旨:Re: postfix and ldap


View this article only
新闻群组:mailing.postfix.users
日期:2001-04-10 16:04:07 PST

> aliases_query_filter = (│(mail=%s)(mailalternateaddress=%s))
> aliases_result_attribute = uid
> virtual_maps: ldap:forwarders
> forwarders_query_filter = (│(mail=%s)(mailalternateaddress=%s))
> forwarders_result_attribute = mailforwardingaddress
> Now my question:
>
> How can I configure postfix to do both for one user: delivery local and
> forward ?

result_attribute is a _LIST of attributes, so if you can get the changes
down to one map (merge alias and virtual), then you can just say:
_result_attribute = uid mailforwardingaddress

Untested, your mileage may vary, but we have similar things working in
production.

lamont

Wietse关于mail loop的解释

m 如何防止mail loop?看看wietse如何说的 ( 2003年1月2日21:28 )

http://groups.google.com/groups?hl=zh-CN&lr=&ie=UTF-8&inlang=zh-CN&threadm=a3f25j%24urn%241%40FreeBSD.csie.NCTU.edu.tw&rnum=6&prev=/groups%3Fq%3Dmail%2Bloop%2Blist%2Bgroup:mailing.postfix.users%26hl%3Dzh-CN%26lr%3D%26ie%3DUTF-8%26inlang%3Dzh-CN%26selm%3Da3f25j%2524urn%25241%2540FreeBSD.csie.NCTU.edu.tw%26rnum%3D6

You must list myhostname under mydestination:

mydestination = $myhostname localhost.$mydomain ...

Otherwise you will have a mail loop.

Wietse

寄件者:Wietse Venema (wietse@porcupine.org)
主旨:Re: mail loops back to myself


View this article only
新闻群组:mailing.postfix.users
日期:2003-01-18 17:29:08 PST

Is clanetsys.homeunix.net listed in mydestination? See the
main.cf file comments for guidance.

Is clanetsys.homeunix.net listed in virtual_alias_domains?
See the virtual(5) manual page for guidance.

Is clanetsys.homeunix.net listed in virtual_mailbox_domains?
See the VIRTUAL_README file for guidance.

If the domain is not listed in any of the above, then mail
will loop.

Wietse

Posted by hzqbbc at December 18, 2002 05:58 PM

Comments

Post a comment




Remember Me?

(you may use HTML tags for style)