免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1249 | 回复: 0
打印 上一主题 下一主题

Postfix 邮件路由和传输研究2008-10-13 23:58 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-14 09:48 |只看该作者 |倒序浏览
Postfix 邮件路由和传输研究
本文最初发表于
http://hi.baidu.com/delphiss/blog/item/9f6c71cead14423bf9dc6148.html
转载请注明出处作者:wdy
postfix从各种渠道收到邮件后,先由cleanup程序处理收件地址,就是把一些不规范的发件和收件地址域名“清理”一下,比如没有的补全,改写等等。
cleanup清理后的邮件被队列管理器交给trivial-rewrite来决定下一步的路由。
postfix下一步的传输前需要获得几个目标地址数据:
mydestination:本地标识; virtual_mailbox_domains:虚拟邮箱域名; relay_domains:转发域。
路由信息包括邮件一下步的传输者(transport)和收件域名(next-hop destinations)。
传输者是指 local 或 smtp 这样的在master.cf 里定义的记录。next-hop destinations 包括 主机或域名等。
trivial-rewrite 判定的过程如下:
如果收件域出现在mydestination里,或目标收件ip地址与 $inet_interfaces 或 $proxy_interfaces 匹配,trivial-rewrite把邮件交给 [local_transport]; [local_transport]的缺省设置是 local:$myhostname。表示transport是local(master.cf里定义的),邮件域名改写为$myhostname。
如果收件域出现在virtual_mailbox_domains里,表示是个虚拟域的邮件,把邮件交给 [virtual_transport]; [virtual_transport] 缺省的设置是 virtual: ,表示用 virtual 投递,路由收件域名不变,还是收件地址中的虚拟域名。 virtual 根据 virtual_mailbox_base 来确定邮箱根目录,根据 virtual_mailbox_maps 来确定邮箱的存储路径,根据 virtual_uid_maps 和 virtual_gid_maps 来确定保存邮件使用的uid和gid。 当然现在大多数都使用 maildrop 来进行虚拟域的投递,安装好maildrop后先在master.cf里把maildrop配置成一个transport,然后设置 : virtual_transport = maildrop:
如果收件域出现在relay_domains里,就说明发件者因为各种原因无法把信件投递到收件域的主MX服务器了,自己正做为备用MX服务器接收了这些邮件。 postfix收下邮件后将尝试连接主MX服务器,交出之前收到的邮件。 如果邮件在队列里保留时间超过maximal_queue_lifetime规定的时间,就会发一份退信通知给发信人。 [relay_transport] 的缺省设置是 relay: 。 如果 relay_transport 设置里next-hop destinations为空,则依次查询 sender_dependent_relayhost_maps, relayhost 来确定,如果都为空则next-hop destinations 为收件地址域名不变。 如果收件域是需要远程投递的其他的域,把邮件交给 [default_transport]。 [default_transport] 的缺省设置是 smtp: 。 smtp MDA会先查询收件域名的mx记录,查询出ip后连接25端口进行投递。 如果 default_transport 设置里next-hop destinations为空,则依次查询 default_transport, sender_dependent_relayhost_maps, relayhost来确定,如果都为空则next-hop destinations 为收件地址域名不变。
以上是postfix缺省的邮件路由方式,如果我们要自己指定一些路由方式,比如把 abc.com 所有邮件转发到另外一台主机让它来投递,把
root@xyz.com
的邮件拒收等等,我们就需要用到transport_maps查询表。transport_maps比缺省的postfix路由方式优先级要高。
transport_maps数据项的键名为收件地址,键值为 transport:nexthop收件地址可以是一个域名,表示匹配这个域名下所有的收件地址。transport必须是master.cf里定义的传输方式。 nexthop 的形式为 host:port。host只能搭配 inet 或 unix 类型的传输方式。如果 host 是个域名,则先查询mx记录确定ip地址。如果 host 本身就是个ip或是个A记录,则需要用方括号括起来。port指定要连接的端口,缺省是25。
举几个例子:
abc.com smtp:[192.168.12.34]:20025发送给abc.com的邮件使用smtp MDA传送到192.168.12.34的20025端口上。
xyz.com maildrop发送给xyz.com的邮件交给maildrop投递。
root@abc.com
error:No mail accepted for root当场拒收给
root@abc.com
的邮件,并给出错误信息:No mail accepted for root
spam@mydomain.com
spam这个是dspam里的设置,表示把发给
spam@mydomain.com
的邮件交给spam(同样,spam在master.cf里设置)。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5948/showart_1296845.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP