一、邮箱分类
邮件发送与接受主要存在两种形式:网页和客户端两种。网页形式主要是通过web页面登陆邮箱完成邮件的收发,如mail.139.com、mail.163.com和mail.google.com等;客户端是指在PC上安装第三方软件实现对邮件的收发,如outlook、foxmail和Thunderbird等。
使用网页形式,无需进行任何配置,只需登陆网页即可;而邮件客户端形式则需要配置收件服务器地址和发件服务器地址才可以正常使用。
二、关于MX记录
邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。
基本过程如下:
从上图可以看出,在邮件发送过程中,主要有两个关键步骤,首先MX记录解析,然后根据得到的邮件服务器域名,再进行A记录的解析得到IP地址,得到IP地址后进行邮件信息交互。因此,这个过程与DNS联系非常紧密。
三、邮箱协议分析
1.网页形式
网页形式的邮件收发主要是通过HTTP协议由PC向邮件服务器发送邮件信息,再由邮件服务器处理,完成邮件的收发。
A.发邮件
发送邮件一般会POST方式将需要发送的内容(包括收件人、邮件主题、内容等)上传给邮件服务器,完成发邮件动作。
B.收邮件
收邮件时会由PC向邮件服务器发送接收请求,然后服务器会向PC返回未读邮件信息,包括发件人地址、未读邮件数量等信息,以上也是通过HTTP协议完成的。
2.客户端形式
目前客户端形式常用的邮箱协议主要包括smtp、pop3和imap三类。其中,smtp主要用作发送邮件协议,pop3和imap主要用作接收邮件协议。
收发邮件的基本过程如下:
A.smtp协议(TCP port:25)
使用smtp协议发送邮件主要过程如下:
关键步骤包括三部分:②IMAP服务器域名解析、③登录服务器、④查询收件箱和⑤收取邮件。
以126邮箱为例,首先解析POP3服务器域名(pop3.126.com A记录= 123.125.50.23)。之后登录到POP3服务器上,需要通过用户名和密码的验证。
S: +OK Welcome to coremail Mail Pop3 Server (126coms[75….]) 欢迎语Hello World
C: USR liu_jingyu1985@126.com 输入用户名,明文方式
S: +OK core mail 输入OK
C: PASS 19850317 输入密码,明文方式
S: +OK 46 message(s) [46226460 byte(s)] 认证成功
认证成功后,请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数,46封邮件,总大小为46226460byte。
C: STAT 请求邮箱统计信息
S: +OK 46 46226460 返回的信息
通过LIST指令请求邮件大小(单位byte)。
C: LIST 请求每封邮件的大小
S: +OK 46 46226460 返回所有邮件的大小
通过UIDL指令请求邮件标识符。
C: UIDL 请求每封邮件的标识符
S: +OK 45 46226460 返回所有邮件的标识符
开始接收邮件。
C: RETR 5 接收第5封邮件
S: -ERR Can’t get the letter 1tbiuggCBUarcT0YtgAAb6[186],try again later
报错
在接收完邮件后,退出断开连接。
C: QUIT 请求退出
S: +OK core mail 成功退出连接
详细的报文抓取截图如下:
C.IMAP协议(TCP port:143)
使用IMAP协议收邮件主要包括以下过程:
关键步骤包括三部分:②IMAP服务器域名解析、③登录服务器、④查询收件箱和⑤收取邮件。
以139邮箱为例,首先解析IMAP服务器域名(imap.139.com A记录=221.176.9.179)。之后是登录IMAP服务器,发送登录请求时会将用户名和密码作为身份验证一起发送,格式为LOGIN邮箱地址“密码”。
Request:C1 LOGIN xxxxxxx@139.com “xxxx” 发送登录服务器请求
Response:C1 OK LOGIN completed 登录成功
在登录成功后,由邮件客户端请求当前IMAP服务器所支持的功能。
Request:C2 CAPABILITY 请求IMAP所支持的功能
Response:* CAPABILITY IMAP4rev1 XLIST 返回的支持IMAP版
本信息
请求邮箱中所有的文件夹及活动的文件夹(除了inbox之外自己创建的文件夹)。
Request:C3 LIST”” 请求所有的文件夹
Response:* LIST() “/” “INBOX” 返回的所有文件夹(包括Junk等)
Request:C4 LSUB”” 请求所有的活动文件夹
Response:* LSUB() “/” “INBOX” 返回的所有活动文件夹(包括Junk等)
Request:C5 NOOP 保持连接用,类似于心跳机制
Response:C5 OK NOOP completed 心跳应答
获取到所有邮件箱信息后,开始查询这些邮件箱的状态。其中MESSAGES表示邮箱中的邮件总数,RECENT表示标志为RECENT的邮件数量,UIDVALIDITY为邮箱的UID有效标志。以INBOX为例,共计6489封邮件,0封邮件被标记为RECENT。
Request:C6 STATUS “INBOX”(MESSAGES RECENT UIDVALIDITY) 请求INBOX状态
Response:* STATUS “INBOX”(MESSAGES 6489 RECENT 0 UIDVALIDITY) 返回INBOX状态
…
Request:C15 STATUS “Junk E-mail”(MESSAGES RECENT UIDVALIDITY) 请求垃圾箱状态
Response:* STATUS “Junk E-mail”(MESSAGES 0 RECENT 0 UIDVALIDITY 15) 返回垃圾箱状态
Request:C16 STATUS “Deleted Items”(MESSAGES RECENT UIDVALIDITY) 请求删除箱状态
Response:* STATUS “Deleted Items”(MESSAGES 0 RECENT 0 UIDVALIDITY 16) 返回删除箱状态
Request:C17 STATUS “Sent Items”(MESSAGES RECENT UIDVALIDITY) 请求已发箱状态
Response:* STATUS “Sent Items”(MESSAGES 0 RECENT 0 UIDVALIDITY 17) 返回已发箱状态
Request:C18 NOOP 保持心跳
Response:C18 OK NOOP completed 心跳应答
选定邮箱,进行收取邮件操作。FETCH获取邮件信息,格式为FETCH<mail_id>。IMAP服务器邮箱中的每个邮件都有一个唯一的ID标识,FETCH通过参数mail_id进行控制;datanames确定读取邮件的内容,如BODY表示只返回邮件文本格式和大小的摘要信息等。
Request:C19 SELECT “INBOX” 选择INBOX邮箱进行操作
Response:* 6489 EXITS 6489封邮件存在
Requset:C20 FETCH 1:6489(UID) FETCH获取邮件,
Response:* 1 FETCH (UID 1342057958) 根据邮件UID进行收取
Response:34380797) 逐封收取
…
Request:C21 NOOP 完成INBOX收取后保持心跳
Response:C21 OK NOOP completed 应答心跳
…
Resuqest:C43 SELECT “Deleted Items” 选择Deleted Itmes进行操作
Response:* 0 EXISTS 0封邮件存在
Request:C44 NOOP 完成Deleted Itmes收取后保持心跳
Response:C44 OK NOOP completed 应答心跳
…
详细的报文抓取截图如下:
D.POP3与IMAP的区别
POP允许电子邮件客户端下载服务器上的邮件,但在电子邮件客户端的操作(如:移动邮件、标记已读等),这是不会反馈到服务器上的;而在IMAP协议下的电子邮件客户端操作都会反馈到服务器上,对邮件进行的操作(如:移动邮件、标记已读等),服务器上的邮件也会做相应的动作。
IMAP它只下载邮件的主题,并不是把所有的邮件内容都下载下来,而是邮箱当中还保留着邮件的副本,没有把原邮箱中的邮件删除,用邮件客户软件阅读邮件时才下载邮件的内容。
四、分析方法汇总
1、利用nslookup工具检测MX记录
典型案例:企业邮箱内部发送邮件正常,但外部无法给其发送邮件。
MX记录能否正常解析决定邮件是否可以正常发送,虽然MX记录主要在服务器端完成,但也可以通过本地PC等进行验证。涉及指令:
nslookup –querytype=mx 或 nslookup –qt=mx 或 nslookup后,set –qt=mx
nslookup –querytype=a 或 nslookup –qt=a 或 nslookup后,set –qt=a
以省内某专线企业邮箱(xxx.com)为例,如果XM记录设置存在问题,在发送邮件时可能会出现如下的错误:
而其对应的MX记录解析也是无法正常进行的,如下图所示。
在企业邮箱修改MX记录配置后,xxx.com可以正常进行解析,其MX记录为mail.xxxx.com,A记录为x.x.x.x。
2、通过wireshark抓包获取协议交互过程中的异常信息
典型案例:邮箱登陆出现问题、收发邮件慢、上传下载附件慢
通过wireshark抓包的强大功能,验证邮箱协议报文交互过程是否存在异常。
(1)HTTP、SMTP、POP3和IMAP均使用TCP协议,因此连接服务器要先进行三次握手,可见三次握手是基础,观察三次握手建立是否成功。
(2)利用wireshark中的时间戳功能,查看在收发邮件、上传下载附件过程中是否有服务器响应慢的情况。以263邮箱为例,用户名密码认证之前都是很正常的响应,但在输入发件人时,响应时间用了6秒的时间,初步判断这个是造成发邮件慢的原因。
响应慢可能是网络层原因也可能是服务器原因,为进一步验证也可以使用ping指令验证网络层情况。