分享

邮件服务器的基础知识概述

 BorisBlog 2017-09-30


SMTP:SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
在传输邮件过程中使用标准服务端口:25号端口
在linux环境下交互过程中:HELO是客户向对方邮件服务器发出的标识自己的身份的命令;MAILFROM命令用来表示发送者的邮件地址;RCPT TO:标识接收者的邮件地址;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT表示退出这次会话,结束邮件发送。
SMTP的工作方式
首先发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向dns查询远端邮件服务器的MX纪录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答即可。
具体实验步骤这里不详加解析。。。

ESMTP:ESMTP (Extended SMTP),是扩展SMTP就是对标准SMTP协议进行的扩展。它与SMTP服务的区别仅仅是,使用SMTP发信不需要验证用户帐户,而用ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。

POP3:POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
POP3使用标准默认端口:110号端口
POP3认证:
目前大多数POP客户端和服务端都是采用ASCII码来明文发送用户名和密码,在认证状态下服务端等待客户端连接时,客户端发出连接请求,并把由命令构成的user/pass用户身份信息数据明文发送给服务端。
服务端确认客户端身份以后,连接状态由认证状态转入处理状态,为了避免发送明文口令的安全问题,有一种新的更为安全的认证方法,命名为APOP,使用APOP,口令在传输之前就被加密,当客户端与服务端第一次建立连接时,POP3服务器向客户端发送一个ASCII码文本的问候,这个问候是由遗传字符组成对每个客户机是唯一的,内容一般都是当地时间之类的。然后客户端把它的纯文本口令附加到刚才接受的字符串之后,接着计算出新的字符串的MD5单出函数值的消息数据,最后客户机把用户名和MD5加密后的消息摘要作为APOP命令的参数一起发送到服务器。但是目前大多数windows上的邮件客户端不支持APOP协议。
POP3虽然有认证但是很简单。

IMAP4:IMAP4(Internet Message Access Protocol 4) 即 交互式数据消息访问协议第四个版本,它与POP3协议一样也是规定个人计算机如何访问互联网上的邮件服务器进行收发邮件的协议,但是IMAP4协议同POP3协议相比更高级。IMAP4协议支持客户机在线或者离线访问并阅读服务器上的邮件,还能交互式的操作服务器上的邮件。IMAP4协议更人性化的地方是不需要像POP3协议那样把邮件下载到本地,用户可以通过客户端直接对服务器上的邮件进行操作(这里的操作是指:在线阅读邮件 在线查看邮件主题 大小 发件地址等信息)。用户还可以在服务器上维护自己邮件目录(维护是指移动 新建 删除 重命名 共享 抓取文本 等操作)。IMAP4协议弥补了POP3协议的很多缺陷。本协议是用于客户机远程访问服务器上电子邮件,它是邮件传输协议新的标准。
IMAP4协议的默认端口:143号端口
IMAP4也支持ASCII码明文传输密码。

SMTPS465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

POP3S995端口是为POP3S(POP3-over-SSL)协议服务开放的,这是POP3协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

IMAPS993端口是为IMAPS(IMAP-over-SSL)协议服务开放的,这是IMAP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

Open-Relay(开放转发或匿名转发)是指由于邮件服务器不理会邮件发送者或邮件接受者的是否为系统所设定的用户,而对所有的入站邮件一律进行转发(RELAY)的功能。通常,若邮件服务器的此功能开放,则我们一般称此邮件服务器是Open-Relay的。

电子邮件系统有很多部分组成,各种各样的代理服务看到令人实在眼花缭乱。下面主要和大家一起介绍一下电子邮件系统构成的其中五个代理,即邮件用户代理MUA邮件传送代理MTA邮件投递代理MDA以及邮件获取代理MRA邮件提交代理MSA
MUA:邮件用户代理MUA(Mail User Agent)是用于发送或许接收电子邮件的客户端顺序。MUA 也可以是一个顺序或许脚原模拟了一个典型MUA 正在发送或许接收Email 时的行为。MUA 正在发送电子邮件时运用SMTP/ESMTP 协议来与一个MTA 对话,正在接收邮件时,运用POP3 协议或许IMAP4 协议。MUA还提供邮件编写界面等功能。常用的MUA 客户端软件有Outlook、Outlook Express、Foxmail、ThunderBird、The Bat、mutt等。
Outlook Express是Microsoft(微软)自带的一种电子邮件,简称为OE,是微软公司出品的一款电子邮件客户端,也是一个基于NNTP协议的Usenet客户端。微软将这个软件与操作系统以及Internet Explorer网页浏览器捆绑在一起。
Foxmail邮件客户端软件,是中国最著名的软件产品之一,是由华中科技大学(原华中理工大学)张小龙开发的一款优秀的国产电子邮件客户端软件,2005年3月16日被腾讯收购。新的Foxmail具备强大的反垃圾邮件功能。它使用多种技术对邮件进行判别,能够准确识别垃圾邮件与非垃圾邮件。垃圾邮件会被自动分捡到垃圾邮件箱中,有效地降低垃圾邮件对用户干扰,最大限度地减少用户因为处理垃圾邮件而浪费的时间。
Thunderbird是由Mozilla浏览器的邮件功能部件所改造的邮件工具,使用 XUL 程序介面语言所设计,是专门为搭配 Mozilla Firefox 浏览器使用者所设计的邮件客户端软件,介面设计更简洁、而且免安装。 这款软件非常优秀,目前官方最新版本为 9.0.1,早期版本有 2.0.0.24 和 3.1.17;2.x 和 3.1.x 系列的后台资源占用很低,适合配置不高的用户;9.0.x 系列资源占用较高但数据安全性有了很大提高,功能也更加丰富。
mutt是linux下的一个email程序。Mutt 显然是一个 Unix 的邮件程序,它跟一般的 Windows 邮件程序不同,它不是一个包罗万象的大杂烩。你甚至会发现它根本不直接发出邮件,它从来不自己编辑邮件,它从来不自己对邮件进行加密和数字签名……Mutt 更像一个文件管理器,只不过它管理的是email。它的功能是借助各个最强大的程序来实现的。
这些都是专用的邮件用户代理,邮件用户代理还可以帮我们发邮件(新建一个邮件-->填写收件人,发件人,抄送给谁,内容-->确定直接可以发送了)虽然操作很简单但是无法了解到背后操作过程,而且都是无条件转发和收取。现在大部分邮件服务器都默认没有开启中继功能。

除了MUA之外还有一个服务器要装上之后既能够当做客户端用的服务端又能够提供smtp和smtpd这样一个帮我们实现邮件传递的叫做MTA
MTA:邮件传输代理(Mail Transfer Agent) 作用是正在不同的主机之间传送电子邮件,它运用SMTP 协议,罕见的MTA 效劳软件有sendmail、qmail、Postfix、exim。MTA 接收来自MUA(Mail User Agent 邮件用户代理)或许是其他MTA、MDA(MailDelivery Agent 邮件投递代理)的邮件,它解析邮件头来绝议邮件的接收者。一般,MTA 需求重写邮件头,然先查找DNS 一定收件人信箱所正在的远程主机,并经过网络发送给其他MTA 或许MDA。目前比较流行的有这样几种:
sendmail:sendmail是最重要的最古老的邮件传输代理程序。它的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。也是由于其早期的Internet用户数量及邮件数量都相当小,Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。例如,通常情况下sendmail只启动一个进程顺序向外发送邮件,如果邮件较多时就要花费相当长的时间。
qmail:Qmail具有安装方便、安全性高、邮件结构合理、支持SMTP服务、队列管理、邮件反弹、基于域名的邮件路由、SMTP传输、转发和邮件列表、本地(邮件)传送、POP3 服务等强大的功能而且效率非常之高。它已经逐渐替代传统的Sendmail成为linux下邮件系统内核的主流选择。为了解决 sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。
这种按照Unix思路的模块化设计方法也使得Qmail具备较高的性能,因为如果需要,Qmail可以启动某个模块的多个实例来完成同一个任务,例如启动多个发送程序同时向外发送邮件,这对于提供邮件列表服务的邮件系统是非常有益的。这种方式也使得Qmail要占用较大的网络带宽,如果带宽有限,效果反而不好,但在当前网络性能大幅度提高的情况下,这种方式是非常合适的。
Qmail还提供一些非常有用的特色来增强系统的可靠性,例如,它提出了Maildir格式的邮件存储方式,这使得通过网络文件系统NFS存取邮件成为可能。此外,Qmail还具备一些非常别致的特色,它不仅仅提供了与Sendmail兼容的方式来处理转发、别名等能力,还可以用以Sendmail完全不同的方式来提供这些功能。从它的编译安装方式、提供的扩展功能和源代码的风格,可以看出其作者DanBernstein是一个极具个性化的程序员。正因为如此,对于Qmail的某些方面,有着一些争论,例如有些人认为Qmail的安装设置并不易于理解,很容易让人糊涂,而另一些人的看法则相反。基本上这是因为Qmail提供解决问题的方式,和Sendmail不大相同的缘故,这样对那些不太熟悉 Sendmail的邮件系统管理员,反而更容易接受Qmail一些。
但是由于作者后期不在维护导致昙花一现,着实让我们感到很失望。不过全球爱好者们还在继续维护更新中。
postfix:postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。安全性极佳,Postfix 同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者WietseVenema曾编写了著名的安全软件TcpWrapper,并是SATAN程的合作人员之一,Postfix的安全性是非常值得信赖的。同样,Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。但Postfix占用的内存要大一些,这主要是由于Postfix和Qmail在系统结构上的差异造成的。与Qmail不同,Postfix更着眼于作为Sendmail的直接替换,使用Postfix替换Sendmail却相当简单,因为Postfix使用的很多文件和Sendmail一致,只需要在配置文件中指明原有Sendmail配置文件的位置就可以了,Postfix甚至还提供了sendmail和mailq程序,以保持兼容性。基本上,可以直接从Sendmail转换为使用Postfix,而不需要额外的设置。Postfix提供的安装配置方式也相当简单,它使用中心化的配置文件和非常易理解的配置指令。
Postfix提供的一些强大的功能主要在于多种数据库表查询方式,例如它支持DB、DBM、passwd文件、正则表达式、MySQL数据库以及LDAP方式的查询,用于支持系统级的别名、虚拟主机等。虽然在Qmail中也能支持这些功能,但没有象Postfix那样统一、简洁。此外,更改Postfix的设置之后,也不需要重新启动整个系统,只需要使用postfix reload就能完全刷新配置,这也避免了丢失邮件的可能性。
Exim:Exim是基于GPL协议的开放源代码软件,由英国剑桥大学的Philip Hazel开发。Exim是一个MTA,负责邮件的路由,转发和投递。
Exim有两种称为Driver的元素:Router和Transport。Router对一个邮件地址进行操作,决定如何投递,即交给那个Transport,或对地址进行转换。Transport将邮件从Exim的队列中投递到目的地。Exim有本地和远程两种类型的Transport。邮件被Router成功处理后,交给Ttansport。如果一封邮件有多个收件人,它可能同时被多个不同的Transport处理。每个Router必须指定一个Transport,当Router运行成功时,即把邮件交给Transport来投递。通过String Expansion,Exim几乎有了无限的扩展能力,实现无限复杂的需要。邮件系统管理员可以根据自己的需要,设计相应的数据格式,然后通过String Expansion进行转换和判断。
courier:Courier-MTA 是一个优秀的电子信件系统,功能上它远比Qmail、 Postfix 等我们已经熟知的系统完整,包含了 ESMTP (含身份认证)、 POP3、 IMAP、 传真、网页信箱界面、保密通信 (SSL 和 TLS 涵盖 SMTP、 POP3、 IMAP)、多种用户数据库 (UNIX 操作系统的用户数据文件 (通过 PAM(3))、Berkeley DB、LDAP、MySQL、PostgreSQL)。而它也吸收了先前信件系统的优点。Courier 中的信件过滤器 maildrop、IMAP 服务器组件还常被与其它电子信件系统 (如Postfix) 配合使用。
Exchange Server:Microsoft Exchange Server 是个消息与协作系统。Exchange server可以被用来构架应用于企业、学校的邮件系统或免费邮件系统。它还是一个协作平台。你可以在此基础上开发工作流,知识管理系统,Web系统或者是其他消息系统。 是一个主面的Intranet协作应用服务器,适合有各种协作需求的用户使用。Exchange Server协作应用的出发点是业界领先的消息交换基础,Exchange Server提供了包括从电子邮件、会议安排、团体日程管理、任务管理、文档管理、实时会议和工作流等丰富的协作应用,而所有应用都可以从通过Internet浏览器来访问。

MDA:邮件投递代理(Mail Deliver Agent)
许多邮件传递代理都有自带的邮件投递代理maildrop是一个负责本地邮件并且包含邮件过滤语言的MDA工具,maildrop首先从标准输入读取E-mail信息,如果文件/etc/maildroprc存在,邮件投递或邮件过滤将从/etc/maildroprc中读出。maildrop的投递/过滤指令可能把信息保存在一个特殊的mailbox,或者丢弃它,或者返回给发送者,或者转发到不同的邮件地址。
MRA:(Mail Retrieval Agent)邮件获取代理提求了使MUA 可以远程获取电子邮件的效劳,如qpoper、cyrus-imap、courier-imap、dovecot 等,为了使得邮件存取格式兼容,正在MRA 顺序中经常都提求了邮件投递代理顺序MDA。MRA 运用的协议有POP3 和IMAP4 等。POP3 可以运用户从效劳器下载邮件并离线阅读。IMAP4 运用于那些没有外地信箱的用户,具有远程操作信箱的才干。IMAP4 容许多个客户机器同时访问一个信箱。原文想象的系统中,Webmail 正在先台便是经过IMAP4 协议来访问用户信箱的。

MSA:邮件提交代理(Mail Submission Agent)将邮件发给邮件网关,然后由网关过滤发出。

SASL 为应用程序和共享库的开发者提供了用于验证、数据完整性检查和加密的机制。开发者可通过 SASL 对通用 API 进行编码。此方法避免了对特定机制的依赖性。SASL 特别适用于使用 IMAP、SMTP、ACAP 和 LDAP 协议的应用程序,因为这些协议全都支持 SASL。
SASL 库基础
SASL 库称为
libsasl。libsasl 是一个框架,允许正确编写的 SASL 消费方应用程序使用系统中可用的所有 SASL 插件。术语插件是指为 SASL 提供服务的对象。插件位于 libsasl 的外部。SASL 插件可用于验证和安全性、名称标准化以及辅助属性(如口令)的查找。加密算法存储在插件中,而不是 libsasl 中。
libsasl 为消费方应用程序和库提供应用编程接口 (application programming interface, API)。服务提供者接口 (service provider interface, SPI) 是为插件提供的,用于为 libsasl 提供服务。libsasl 不能识别网络或协议。相应地,应用程序必须负责在客户机与服务器之间发送和接收数据。
SASL 对用户使用两个重要的标识符。验证 ID (authid) 是用于验证用户的用户 ID。验证 ID 授予用户系统访问权限。授权 ID (userid) 用于检查是否允许用户使用特定选项。
SASL 客户机应用程序和 SASL 服务器应用程序将协商公用的 SASL 机制和安全级别。通常,SASL 服务器应用程序会将其可接受的验证机制的列表发送给客户机。随后 SASL 客户机应用程序便可决定哪种验证机制最能满足其要求。此后,客户机与服务器使用双方同意的验证机制,对它们之间交换的由 SASL 提供的验证数据进行验证。此交换将持续下去,直到验证成功完成、失败或被客户机或服务器中止。


在验证过程中,SASL 验证机制可以协商安全层。如果已选择安全层,则必须在 SASL 会话期间使用该层。

以上知识均来自于网络各种渠道总结,绝无侵权之意。。。谢谢。。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多