SMTP简单邮件传输协议.docx
- 文档编号:4770759
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:15
- 大小:55.66KB
SMTP简单邮件传输协议.docx
《SMTP简单邮件传输协议.docx》由会员分享,可在线阅读,更多相关《SMTP简单邮件传输协议.docx(15页珍藏版)》请在冰豆网上搜索。
SMTP简单邮件传输协议
SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
目录
详细简介
协议原理
个人SMTP服务器的配置方法
1.安装POP3和SMTP服务组件
2.配置POP3服务器
工作过程
安全和垃圾邮件
服务扩展
通讯模型
通信安全
详细简介
协议原理
个人SMTP服务器的配置方法
1.安装POP3和SMTP服务组件
2.配置POP3服务器
工作过程
安全和垃圾邮件
服务扩展
通讯模型
通信安全
展开
编辑本段详细简介
SMTP是一种提供可靠且有效电子邮件传输的协议。
SMTP是建模在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。
SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。
SMTP重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。
通常,
SMTP
一个网络可以由公用互联网上TCP可相互访问的主机、防火墙分隔的TCP/IP网络上TCP可相互访问的主机,及其它LAN/WAN中的主机利用非TCP传输层协议组成。
使用SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。
在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。
域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳IP地址。
在传输文件过程中使用25号端口
编辑本段协议原理
SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输的协议,它是基于TCP服务的应用层协议,由RFC0821所定义。
SMTP协议规定的命令是以明文方式进行的。
为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。
在linux环境下,使用"telnetsmtp.163.com25"连接smtp.163.com的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为smtp.163.com,而端口号指定为25,然后连接smtp.163.com:
交互过程如下:
SMTP
[lix@nslix]$telnetsmtp.163.com25
220163.comAnti-spamGTforCoremailSystem(163com[071018])
HELOsmtp.163.com
250OK
authlogin
334dXNlcm5hbWU6
USERbase64加密后的用户名
334UGFzc3dvcmQ6
PASSbase64加密后的密码
235Authenticationsuccessful
MAILFROM:
XXX@163.COM
250MailOK
RCPTTO:
XXX@163.COM
250MailOK
DATA
354Enddatawith.
QUIT
SMTP
250MailOKqueuedassmtp5,D9GowLArizfIFTpIxFX8AA==.41385S21211766217
HELO是客户向对方邮件服务器发出的标识自己的身份的命令,这里假设发送者为ideal;MAILFROM命令用来表示发送者的邮件地址;RCPTTO:
标识接收者的邮件地址,这里表示希望发送邮件给XXX@163.COM,如果邮件接收者不是本地用户,例如RCPTTO:
ideal,则说明希望对方邮件服务器为自己转发(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服务器是OPENRELAY的,否则说明该服务器不允许RELAY;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT表示退出这次会话,结束邮件发送。
这就是一个简单的发送邮件的会话过程,其实当使用outlookexpress等客户软件发送时,后台进行的交互也是这样的,当然,SMTP协议为了处理复杂的邮件发送情况如附件等等,定义了很多的命令及规定,具体可以通过阅读RFC821来获得。
当你的一个朋友向你发送邮件时,他的邮件服务器和你的邮件服务器通过S
SMTP
MTP协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设你的本地邮件服务器是Linux系统),若你通过telnet协议直接登录到邮件服务器上,则可以使用mail等客户软件直接阅读邮件,但是若你希望使用本地的MUA(MailUserAgent,如outlookexpress等客户软件)来阅读邮件,则本地客户端通过POP3或IMAP协议与邮件服务器交互,将邮件信息传递到客户端(如:
win98系统)。
而如果你向你的朋友回复一封信件时,你所使用的MUA也是通过SMTP协议与邮件服务(一般为发送邮件地址对应的email地址)器通信,指示其希望邮件服务器帮助转发一封邮件到你朋友的邮件地址指定的邮件服务器中。
若本地邮件服务器允许你通过它转发邮件,则服务器通过SMTP协议发送邮件到对方的邮件服务器。
这就是接受和发送邮件的全部过程。
编辑本段个人SMTP服务器的配置方法
安装POP3和SMTP服务组件
WindowsServer2003默认情况下是没有安装POP3和SMTP服务组件的,因此我们要手工添加。
1.安装POP3服务组件
以系统管理员身份登录WindowsServer2003系统。
依次进入“控制面板→添加或删除程序→添加/删除Windows组件”,在弹出的“Windows组件向导”对话框中选中“电子邮件服务”选项,点击“详细信息”按钮,可以看到该选项包括两部分内容:
POP3服务和POP3服务Web管理。
为方便用户远程Web方式管理邮件服务器,建议选中“POP3服务Web管理”。
2.安装SMTP服务组件
选中“应用程序服务器”选项,点击“详细信息”按钮,接着在“Internet信息服务(IIS)”选项中查看详细信息,选中“SMTPService”选项,最后点击“确定”按钮。
此外,如果用户需要对邮件服务器进行远程Web管理,一定要选中“万维网服务”中的“远程管理(HTML)”组件。
完成以上设置后,点击“下一步”按钮,系统就开始安装配置POP3和SMTP服务了。
配置POP3服务器
1.创建邮件域
点击“开始→管理工具→POP3服务”,弹出POP3服务控制台窗口。
选中左栏中的POP3服务后,点击右栏中的“新域”,弹出“添加域”对话框,接着在“域名”栏中输入邮件服务器的域名,也就是邮件地址“@”后面的部分,
2.创建用户邮箱
选中刚才新建的,在右栏中点击“添加邮箱”,弹出添加邮箱对话框,在“邮箱名”栏中输入邮件用户名,然后设置用户密码,最后点击“确定”按钮,完成邮箱的创建。
[1][2]完成POP3服务器的配置后,就可开始配置SMTP服务器了。
点击“开始→程序→管理工具→Internet信息服务(IIS)管理器”,在“IIS管理器”窗口中右键点击“默认SMTP虚拟服务器”选项,在弹出的菜单中选中“属性”,进入“默认SMTP虚拟服务器”窗口,切换到“常规”标签页,在“IP地址”下拉列表框中选中邮件服务器的IP地址即可。
点击“确定”按钮,此时SMTP服务器默认的是匿名访问,打开切换到“访问”标签页,点击“身份验证”按钮,在对话框中去掉“匿名访问“选项,选中”基本身份验证(Basicauthentication)“。
这样一个简单的邮件服务器就架设完成了。
编辑本段工作过程
简单邮件传输协议(SMTP)是一种基于文本的电子邮件传输协议,是在因特网中用于在邮件服务器之间交换邮件的协议。
SMTP是应用层的服务,可以适应于各种网络系统。
SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF。
响应信息一般只有一行,由一个3位数的代码开始,后面可附上很简短的文字说明。
SMTP
SMTP要经过建立连接、传送邮件和释放连接3个阶段。
具体为:
(1)建立TCP连接。
(2)客户端向服务器发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令。
(3)服务器端以OK作为响应,表示准备接收。
(4)客户端发送RCPT命令。
(5)服务器端表示是否愿意为收件人接收邮件。
(6)协商结束,发送邮件,用命令DATA发送输入内容。
(7)结束此次发送,用QUIT命令退出。
SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。
电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的。
SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序(MTA)将邮件传送到目的地。
编辑本段安全和垃圾邮件
最初的SMTP的局限之一在于它没有对发送方进行身份验证的机制。
因此,后来定义了SMTP-AUTH扩展。
尽管有了身份认证机制,垃圾邮件仍然是一个主要的问题。
但由于庞大的SMTP安装数量带来的网络效应,大刀阔斧地修改或完全替代SMTP被认为是不现实的。
InternetMail2000就是一个替代SMTP的建议方案。
因此,出现了一些同SMTP工作的辅助协议。
IRTF的反垃圾邮件研究小组正在研究一些建议方案,以提供简单、灵活、轻量级的、可升级的源端认证。
最有可能被接受的建议方案是发送方策略框架协议。
SMTP模型
smtp提供了一种邮件传输的机制,当收件方和发件方都在一个网络上时,可以把邮件直传给对方;当双方不在同一个网络上时,需要通过一个或几个中间服务器转发。
smtp首先由发件方提出申请,要求与接收方smtp建立双向的通信渠道,收件方可以是最终收件人也可以是中间转发的服务器。
收件方服务器确认可以建立连接后,双发就可以开始通信。
发件方smtp向收件方发处mail命令,告知发件方的身份;如果收件方接受,就会回答ok。
发件方再发出rcpt命令,告知收件人的身份,收件方smtp确认是否接收或转发,如果同意就回答ok;接下来就可以进行数据传输了。
通信过程中,发件方smtp与收件方smtp采用对话式的交互方式,发件方提出要求,收件方进行确认,确认后才进行下一步的动作。
整个过程由发件方控制,有时需要确认几回才可以。
为了保证回复命令的有效,smtp要求发件方必须提供接收方的服务器及邮箱。
邮件的命令和答复有严格的语法定义,并且回复具有相应的数字代码。
所有的命令由ascii码组成。
命令代码是大小写无关的,如mail和mail﹑mail是等效的。
编辑本段服务扩展
SMTP提供一种可靠的有效的传送机制,它用于传送电子邮件。
虽然十几年来,它的作用已经有目共睹,可是对它功能的扩充也是必不可少的。
对SMTP服务的扩展我们介绍一下:
在SMTP转发的邮件中包括信封和内容这两种东西。
我们写信也写信封和信皮,我们可以借生活中的信件来帮助理解。
(1)SMTP信封比较容易理解,它被作为一系列的SMTP协议单元传送,它包括发送者地址,传送模式,还有一个或多个接收者地址。
如果有不清楚的地方,请参阅《SMTP协议标准》。
SMTP
(2)至于内容,它是由两部分组成的,一部分是信头,一部分是信体,信头是由一个个的域/值对(一个域,一个值)组成的,如果信体有结构的话,它的结构是以MIME构造的。
内容从根本上来说是文本的,一般也是由ASCII码构成的,但是由于使用了MIME,所以这个限制应该也是没有了,但信头却不行,一般都应该使用ASCII码表示。
虽然SMTP协议是一个不错的协议,可是对它的扩展还是不可避免,本文主要说明了一种扩展方法,使用这种扩展方法,服务器和用户之间可以相互知道对方使用了扩展,使用了多少,如果进行通信。
编辑本段通讯模型
SMTP协议是TCP/IP协议族中的一员,主要对如何将电子邮件从发送方地址传送到接收方地址,也即是对传输的规则做了规定。
SMTP协议的通信模型并不复杂,主要工作集中在发送SMTP和接收SMTP上:
首先针对用户发出的邮件请求,由发送SMTP建立一条连接到接收SMTP的双工通讯链路,这里的接收SMTP是相对于发送SMTP而言的,实际上它既可以是最终的接收者也可以是中间传送者。
发送SMTP负责向接收SMTP发送SMTP命令,而接收SMTP则负责接收并反馈应答。
SMTP协议的命令和应答
从前面的通讯模型可以看出SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的。
在通讯链路建立后,发送SMTP发送MAIL命令指令邮件发送者,若接收SMTP此时可以接收邮件则作出OK的应答,然后发送SMTP继续发出RCPT命令以确认邮件是否收到,如果接收到就作出OK的应答,否则就发出拒绝接收应答,但这并不会对整个邮件操作造成影响。
双方如此反复多次,直至邮件处理完毕。
SMTP协议共包含10个SMTP命令,列表如下:
SMTP命令命令说明
HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令
MAILFROM:
<reverse-path><CRLF><reverse-path>为发送者地址。
此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。
此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。
RCPTTO:
<forward-path><CRLF><forward-path>标识各个邮件接收者的地址
DATA<CRLF>
接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。
REST<CRLF>退出/复位当前的邮件传输
NOOP<CRLF>要求接收SMTP仅做OK应答。
(用于测试)
QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。
VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。
EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。
HELP<CRLF>查询服务器支持什么命令
编辑本段通信安全
sendmail是在Unix环境下使用最广泛的实现邮件发送/接受的邮件传输代理程序。
由于Sendmail邮件服务器的特点是功能强大而复杂,因此为保证Sendmail的安全性,需要作以下一些工作。
1、设置Sendmail使用"smrsh"
smrsh程序的目的是作为在mailer中为sendmail定义的"/bin/sh"的替代shell。
smrsh是一种受限shell工具,它通过"/
etc/smrsh"目录来明确指定可执行文件的列表。
简而言之smrsh限制了攻击者可以执行的程序集。
当它与sendmail程序一起使用的时候,smrsh有效的将sendmail可以执行的程序的范围限制在smrsh目录之下。
第一步:
决定smrsh可以允许sendmail运行的命令列表。
缺省情况下应当包含以下命令,但不局限于这些命令:
"/bin/mail"(如果在你的系统中安装了的话)
"/usr/bin/procmail"(如果在你的系统中安装了的话)
注意:
不可在命令列表里包括命令解释程序,例如sh
(1),csh
(1),perl
(1),uudecode
(1)及流编辑器sed
(1)。
第二步:
在"/etc/smrsh"目录中创建允许sendmail运行的程序的符号连接。
使用以下命令允许mail程序"/bin/mail"运行:
[root@deep]#cd/etc/smrsh
[root@deep]#ln-s/bin/mailmail
用以下命令允许procmail程序"/usr/bin/procmail"运行:
[root@deep]#cd/etc/smrsh
[root@deep]#ln-s/usr/bin/procmailprocmail
这将允许位于".forward"和"aliases"中的用户采用"|program"语法来运行mail及procmail程序。
第三步
配置sendmail使之使用受限shell。
mailer程序在sendmail的配置文件"/etc/sendmail.cf"中仅有一行。
必须修改"sendmail.cf"文件中"Mprog"定义的那一行。
将"/bin/sh"替换为"/usr/sbin/smrsh"。
编辑"sendmail.cf"文件(vi/etc/sendmail.cf)并改动下面这一行:
例如:
Mprog,P=/bin/sh,F=lsDFMoqeu9,S=10/30,R=20/40,D=$z:
/,T=X-Unix,A=sh-c$u
应该被改为:
Mprog,P=/usr/sbin/smrsh,F=lsDFMoqeu9,S=10/30,R=20/40,D=$z:
/,T=X-Unix,A=sh-c$u
现在用以下命令手工重起sendmail进程:
[root@deep]#/etc/rc.d/init.d/sendmailrestart
2、"/etc/aliases"文件
如果没有加以正确和严格的管理的话,别名文件被用来获取特权。
例如,很多发行版本在别名文件中带有"decode"别名。
现在这种情况越来越少了。
这样做的目的是为用户提供一个通过mail传输二进制文件的方便的方式。
在邮件的发送地,用户把二进制文件用"uuencode"转换成ASCII格式,并把结果邮递给接收地"decode"别名。
那个别名通过管道把邮件消息发送到"/usr/bin/uuencode"程序,由这个程序来完成从ASCII转回到原始的二进制文件的工作。
删除"decode"别名。
类似的,对于所有用于执行没有被放在smrsh目录下的程序的别名,你都要仔细的检查,可能它们都值得怀疑并应当删除它们。
要想使你的改变生效,需要运行:
[root@deep]#/usr/bin/newaliases
编辑别名文件(vi/etc/aliases)并删除以下各行:
#Basicsystemaliases--theseMUSTbepresent.
MAILER-DAEMON:
postmaster
postmaster:
root
#Generalredirectionsforpseudoaccounts.
bin:
root
daemon:
root
games:
root?
?
删除这一行
ingres:
root?
?
删除这一行
nobody:
root
system:
root?
?
删除这一行
toor:
root?
?
删除这一行
uucp:
root?
?
删除这一行
#Well-knownaliases.
manager:
root?
?
删除这一行
dumper:
root?
?
删除这一行
operator:
root?
?
删除这一行
#trapdecodetocatchsecurityattacks
decode:
root?
?
删除这一行
#Personwhoshouldgetroot'smail
#root:
marc
最后应该运行"/usr/bin/newaliases"程序使改动生效
3、避免你的Sendmail被未授权的用户滥用
最新版本的Sendmail(8.9.3)加入了很强的防止欺骗的特性。
它们可以防止你的邮件服务器被未授权的用户滥用。
编辑你的"/etc/sendmail.cf"文件,修改一下这个配置文件,使你的邮件服务器能够挡住欺骗邮件。
编辑"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
OPrivacyOptions=authwarnings
改为:
OPrivacyOptions=authwarnings,noexpn,novrfy
设置"noexpn"使sendmail禁止所有SMTP的"EXPN"命令,它也使sendmail拒绝所有SMTP的"VERB"命令。
设置"novrfy"使sendmail禁止所有SMTP的"VRFY"命令。
这种更改可以防止欺骗者使用"EXPN"和"VRFY"命令,而这些命令恰恰被那些不守规矩的人所滥用。
4、SMTP的问候信息
当sendmail接受一个SMTP连接的时候,它会向那台机器发送一个问候信息,这些信息作为本台主机的标识,而且它所做的第一件事就是告诉对方它已经准备好了。
编辑"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
OSmtpGreetingMessage=$jSendmail$v/$Z;$b
改为:
OSmtpGreetingMessage=$jSendmail$v/$Z;$bNOUCEC=xxL=xx
现在手工重起一下sendmail进程,使刚才所做的更改生效:
[root@deep]#/etc/rc.d/init.d/sendmailrestart
以上的更改将影响到Sendmail在接收一个连接时所显示的标志信息。
你应该把"`C=xxL=xx"条目中的"xx"换成你所在的国家和地区代码。
后面的更改其实不会影响任何东西。
但这是"-abuse.email"新闻组的伙伴们推荐的合法做法。
5、限制可以审核邮件队列内容的人员
通常情况下,任何人都可以使用"mailq"命令来查看邮件队列的内容。
为了限制可以审核邮件队列内容的人员,只需要在"/etc/sendmail.cf"文件中指定"restrictmailq"选项即可。
在这种情况下,sendmail只允许与这个队列所在目录的组属主相同的用户可以查看它的内容。
这将允许权限为0700的邮件队列目录被完全保护起来,而我们限定的合法用户仍然可以看到它的内容。
编辑"sendmail.cf"文件(vi/etc/sendmail.cf)并更改下面一行:
OPrivacyOptions=authwarnings,noexpn,novrfy
改为:
OPrivacyOptions=authwarnings,noexpn,novrfy,restrict
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SMTP 简单 邮件 传输 协议