Linux下邮件服务器的搭建论文最终定稿 下载本文

安徽新华学院2014届本科毕业论文(设计)

服务器,SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange)DNS。 (2)POP3协议

邮局通信协议,是邮件系统上负责接收电子邮件的通信协议,它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,由RFC 1939定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件,它不具有传送邮件至使用者或其它邮件主机的功能。 (3)IMAP协议

消息存取通信协议,是Internet上一项常见的通信协议,其中包含连接方式、客户端验证以及C/S的交谈等的定义,它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。当前的权威定义是RFC3501。IMAP协议运行在TCP/IP协议之上,使用的端口是143。与POP一样,IMAP主要是用来读取服务器上的电子邮件,但客户端需要先登录服务器,才能进行资源的存取。

IMAP与POP3的区别是:IMAP它只下载邮件的主题,并不是把所有的邮件内容都下载下来,而是你邮箱当中还保留着邮件的副本,没有把你原邮箱中的邮件删除,你用邮件客户软件阅读邮件时才下载邮件的内容。较好支持这两种协议的邮件客户端有:ThunderMail、Foxmail、outlook等。

2.5 Postfix邮件服务器

postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试[9]。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真是一个让人吃惊的数字。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。

7

安徽新华学院2014届本科毕业论文(设计)

2.5.1 Postfix服务的特点

(1)postfix是免费的:

postfix想要作用的范围是广大的Internet用户,试图影响大多数的Internet上的电子邮件系统,因此它是免费的。 (2)更快:

postfix在性能上大约比sendmail快三倍。一部运行postfix的台式PC每天可以收发上百万封邮件。 (3)兼容性好:

Postfix是Sendmail兼容的,从而使Sendmail用户可以很方便地迁移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。 (4)更健壮:

Postfix被设计成在重负荷之下仍然可以正常工作。当系统运行超出了可用的内存或磁盘空间时,postfix会自动减少运行进程的数目。当处理的邮件数目增长时,Postfix运行的进程不会跟着增加。 (5)更灵活:

Postfix是由超过一打的小程序组成的,每个程序完成特定的功能。你可以通过配置文件设置每个程序的运行参数。 (6)安全性

Postfix具有多层防御结构,可以有效地抵御恶意入侵者。如大多数的postfix程序可以运行在较低的权限之下,不可以通过网络访问安全性相关的本地投递程序等等。

2.5.2 Postfix服务器的处理过程

(1)接收邮件的过程

当Postfix接收到一封新邮件时,新邮件首选在incoming队列处停留,然后针对不同的情况进行不同的处理:

①对于来自于本地的邮件:local进程负责接收来自本地的邮件放在maildrop队列中,然后pickup进程对maildrop中的邮件进行完整性检测。maildrop目录的权限必须设置为某一用户不能删除其他用户的邮件。

8

安徽新华学院2014届本科毕业论文(设计)

②对于来自于网络的邮件:smtpd进程负责接收来自于网络的邮件,并且进

行安全性检测。可以通过UCE(unsolicited commercial email)控制smtpd的行为。

③由postfix进程产生的邮件:这是为了将不可投递的信息返回给发件人。这

些邮件是由bounce后台程序产生的。

④由postfix自己产生的邮件:提示postmaster(也即postfix管理员)postfix运行过程中出现的问题。(如SMTP协议问题,违反UCE规则的记录等等。)

关于cleanup后台程序的说明:cleanup是对新邮件进行处理的最后一道工序,它对新邮件进行以下的处理:添加信头中丢失的Form信息;为将地址重写成标准的user@fully.qualified.domain格式进行排列;从信头中抽出收件人的地址;将邮件投入incoming队列中,并请求邮件队列管理进程处理该邮件;请求trivial-rewrite进程将地址转换成标准的user@fully.qualified.domain格式。 (2)投递邮件的过程

新邮件一旦到达incoming队列,下一步就是开始发送邮件,postfix发送邮件时的处理过程如图2.6所示。相关的说明如下:

图 2.6 Postfix邮件处理过程

邮件队列管理进程是整个postfix邮件系统的中心。它和local、smtp、pipe等投递代理相互关联,将包含有队列邮件发件人地址、邮件收件人地址、文件路径信息的投递请求发送给投递代理。队列管理进程维护着一个deferred队列,那些无法投递的邮件被投递到该队列中[10]。除此之外,队列管理进程还维护着一个active队列,为了防止邮件负载太大时内存溢出,因此队列中的邮件数目是有限制的。邮件队列管理程序还负责将收件人地址在relocated表中列出的邮件返回给发件人,该表包含无效的收件人地址。

9

安徽新华学院2014届本科毕业论文(设计)

如果邮件队列管理进程请求,rewrite后台程序对收件人地址进行解析。但是缺省地,rewrite只对邮件收件人是远程的还是本地的进行区分。

如果邮件对你管理进程请求,bounce后台程序可以生成一个邮件不可投递的报告。

本地投递代理local进程可以理解类似UNIX风格的邮箱,Sendmail风格的系统别名数据库和Sendmail风格的.forward文件。可以同时运行多个local进程,但是对同一个用户的并发投递进程数目是有限制的。你可以配置local将邮件投递到用户的宿主目录,也可以配置local将邮件发送给一个外部命令,如流行的本地投递代理procmail。在流行的Linux发行版本RedHat中,我们就使用procmail作为最终的本地投递代理。

远程投递代理SMTP进程根据收件人地址查询一个SMTP服务器列表,按照顺序连接每一个SMTP服务器,根据性能对该表进行排序。在系统负载太大时,可以有数个并发的SMTP进程同时运行。

pipe是postfix调用外部命令处理邮件的机制。

10