七 、搭建分布式的邮件系统
对于大型邮件系统,实现用户的分布是不得不考虑的事情。因为,集中存储的硬件成本还是比较高。比如,网易的电子邮件注册用户超过3亿,新浪免费邮件的用户也超过1.1亿以上,Gmail扩容的动作也迫使其他邮件服务提供商扩大自己的容量,集中存储的成本也因此变得更加昂贵。而将用户分布在不同的邮件服务器上,并利用大容量而且相对廉价的磁盘阵列来存储用户邮件的做法,则能显著降低成本,并能在一定程度上解决集中存储的单点故障问题。
1.搭建分布式邮件系统的架构设计
用Postfix搭建分布式的邮件系统的架构如图1所示。邮件接收服务器部署在架构的最外层,负责接受外部其他服务器的发信请求,并将接收到的邮件转发到用户邮件服务器上。邮件接收服务器不对外发出请求。有效地配置邮件接收服务器上的Postfix,就能实现邮件的接收和转发。有些人实现邮件转发是通过虚拟投递代理和虚拟别名来实现,但是,本文将介绍一种扩展性和灵活性更好的方法来实现邮件转发。用户邮件服务器上部署MDA、MUA。可以配置Postfix让其只接受邮件接收服务器和其他用户邮件服务器的请求。用户发送邮件通过用户邮件服务器上Postfix的Sendmail向外部其他服务器提出发信的请求,具体架构见图3。

 

图3  Postfix搭建分布式邮件系统架构图
2.邮件接收服务器配置与设计
这里的邮件接收服务器是本网域MX记录所指向的服务器,MTA通过SMTP协议进行邮件传输时,实际上就是通过DNS的MX记录来找到邮件接收服务器的。对于大型的邮件系统往往需要一组服务器构成。邮件接收服务器接收其他MTA邮件的流程为:接收服务器接收邮件→查询用户注册在哪一台用户邮件服务器→将邮件转发到用户邮件服务器的MTA。那么当接收服务器收到邮件后,如何执行查询动作和转发动作呢?这个问题可以通过Postfix提供的强大的配置文件来解决。在main.cf中有两个重要的配置参数在大型的分布式邮件系统中起到了非常重要的作用,一个是local_recipient_ maps,另一个是transport_ maps。local_recipient_maps参数值由SMTP服务使用,当邮件接收服务器收到新邮件时,它会检查该参数指定的查询表确定是否该接收该邮件,这里的查询表可以是键值型的索引表,也可以是查询程序。比如,可以这样配置main.cf:
local_recipient_maps = usersever:smtpcheck
发送方MTA发出“RCPT ”指令时,如果接受服务器上的Postfix,就可以调用smtpcheck对应的程序去确认该用户是否存在。如果存在,就开始准备接收“DATA”指令发过来的邮件正文。那么成功收到邮件后,如何实现转发呢?这就需要配置 transport_maps这个参数。Postfix中可以通过transport_maps这个参数对应的查询表来判断如何处理邮件,继而修改默认的邮件投递流程,这里的查询表可以是键值型的索引表,也可以是查询程序。比如,可以这样配置main.cf:
transport_maps = usersever:transportmx
Postfix可以通过transportmx对应的程序获得下一步处理邮件的指令。比如,输入收件人邮件地址“user2 @cec-cn.com”,输出“smtp: usersever06.cec-cn.com”,这就会让Postfix通过SMTP把信转投到usersever 06.cec-cn.com域名的这台机器上,也就是第6台用户邮件服务器。
3.用户邮件服务器的配置与设计
邮件系统中的用户在注册时被分配到不同的服务器上,并在数据库中记录这些信息。这些服务器负责接收从邮件接收服务器转投过来的信件,并最终放入存储系统中。这里邮件的处理流程为:用户邮件服务器上的MTA接收邮件→查询用户在邮件服务器上的存储位置→存邮件至用户路径。
在这里,一样会使用local_ recipient_maps检查收件人是否真实存在。但与邮件接收服务器不同的是,这是信件的最终目的地,transport_maps查询的结果就不能再是“smtp: usersever06.cec-cn.com ”,要设置成合适的本地处理程序,比如local或者指定mda的名称(在etc/master.cf中设置)等。main.cf的主要配置为:
local_recipient_maps = userserver:smtpcheck
transport_maps = usersever:transportusersever
这样,一个大型的分布式邮件系统的MTA框架就搭建成功,在用户邮件服务器上部署MUA,用户可以进行阅读收信及发送邮件等操作了。
本文从安装配置和实现机制向读者概要地介绍了Postfix,并在这个基础上设计了一个大型的邮件系统。但是,本文对Postfix的介绍还远远不够,比如Postfix来如何实现高效地反垃圾、反病毒,Postfix的详细配置与管理等。读者可以通过实践来学习使用Postfix,并在实践中探索Postfix的原理,从而更好地优化和配置Postfix,以实现更加强大的邮件系统。


  1. 曹江华做客51CTO畅谈Linux安全策略
  2. Linux服务器技术
  3. 专题:Linux 基础


相关内容