本报告搭建了POP3服务器和SMTP服务器,对其进行了简单的流量分析,并且简单总结了其异同。
一、实验原理:#
POP3协议,全名为“Post Office Protocol - Version3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。
POP协议,支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或MAC。一旦邮件发送到 PC机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。
SMTP协议,是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
二、实验目的:#
利用开源软件ewomail搭建自己的邮件服务器并且对其流量进行分析。
三、实验内容:#
1、选择环境
在这里我使用了开源软件EwoMail邮件服务器软件进行邮件服务器搭建。EwoMail是基于Linux的开源邮件服务器软件,集成了众多优秀稳定的组件,是一个快速部署、简单高效、多语言、安全稳定的邮件解决方案,帮助你提升运维效率,降低
IT 成本,兼容主流的邮件客户端,同时支持电脑和手机邮件客户端。
我认为这个软件很适合用来搭建邮件服务器,原因有以下三点:
该软件完全开源,所有代码都可见。而且作为一个成熟的项目,该软件可以方便地找到资料。
集成组件Postfix:邮件服务器Dovecot:IMAP/POP3/邮件存储Amavisd:反垃圾和反病毒。符合了我们的要求。(主要探究POP3协议)
部署简单,只需要一台centos的服务器就可以搭建。
2、安装虚拟机
这里有一个坑一定要记得,centos安装时候默认不开启网络的,需要手动打开。如果错过了这一步,那只有等安装好之后用命令好修改打开,十分麻烦(我在这一步上一直出错)。
在这里贴上如果忘记打开网络,命令行的做法。
1.打开网络配置文件
1 | vi /etc/sysconfig/network-scripts/ifcfg-eth0 |
2.在文件末尾追加DNS
1 | DNS1=8.8.8.8 |
3.重启网络
ifup eth0
这里要注意一点,centos默认是不带图形界面的,只有命令行界面,虽然说我们依然可以利用命令行界面搭建,但是这样不方便而且也很难以操作。所以我们选择下载图形界面。
这里需要注意的是,centos在命令行下好像没法粘贴复制,所以需要手打。
注意空格。
1 | yum groupinstall "GNOME Desktop" "Graphical Administration Tools" |
完成之后我们用另一个指令打开图形界面。
1 | ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target |
成功。
安装ewomail
参考文档:http://doc.ewomail.com/docs/ewomail/jianjie
关闭selinux
1 | vi /etc/sysconfig/selinux |
SELINUX=enforcing 改为 SELINUX=disabled
检查swap
如果没启动swap,这会导致EwoMail的防病毒组件不能启动,所以在安装前先检查swap是否已经启动,如已启动可跳过该步骤。
查看swap
1 | free -m |
邮箱域名
EwoMail本身是可以配置多个域名来收发邮件的,但在安装前需要一个邮箱的主域名。
本次教程例子使用的主域名是ciaofox.cn
查看当前主机名
1 | hostname -f |
安装
安装前请服务器必须已链接网络,安装时间将会根据你的系统配置和网络环境大概会在10分钟内安装完成。(需要root权限)
打开:http://www.ewomail.com/list-11.html 输入你的域名获取安装代码
这里要记得用sudo指令,或者切换进入root账户下。否则会出现问题。
这种问题。
对POP3流量进行分析
使用telnet直接进入163邮箱服务器。输入o(连接主机),然后通过110端口连接进163邮箱服务器。
可以看到POP协议的内容,和我们得到的东西很接近。那么我们再查看流量包,尤其是TCP协议。
从这里我们可以看出TCP
的三次握手,对110端口。连接建立之后返回了一个POP报文,内容是
1 | +OK Welcome to coremail Mail Pop3 Server(163coms[b62aaa251425b4be4eaec4ab4744cf47s]) |
接下来我们尝试登陆163邮箱(账号来自于别人),得到了明文的报文。
跟踪流可知每次输入都会进行ACK上传,密码是通过明文传输的。(好像不太安全)
输入quit退出,可以看到ACK报文,确认之后经过四次挥手结束流程。
总结:可以看出POP3协议在登陆时会先进行身份验证,即账号和密码。验证之后可以通过发送对应指令获得所有未读信息到主机,完成登陆与邮件的获取。从抓到的包中可以看出几点,1,它是通过一个字符一个字符地上传。2,密码与账号都是通过明文上传。
SMTP协议分析
一样的方法,可以看出是先经过TCP3次握手再传送回SMTP报文。
1 | 220 163.com Anti-spam GT for Coremail System (163com[20141201]) |
helo 和ehlo指令的作用是向服务器标示用户身份,返回邮件服务器身份。
输入auth login验证用户(验证用户使用auth
login进行验证时用户名和密码是经过base64编码过后的字符)
502是telnet没有设置到SMTP服务。设置之后就好了。
账号经过base64编码后为bGVlYW5ua2FAMTYzLmNvbQ。但是同样是明文传递。
客户端向服务器发送用户登录命令“AUTH LOGIN”,服务器回复表示接受(“334”表示接受)
客户端分别向服务器发送编码后的用户名和密码, 服务器分别回复“ 334”“235”表示接受。
总结:
SMTP和POP3的特点之一在于POP3无法发送邮件,更多是接受,而SMTP可以接受与发送。另一个特点在于POP3完全是明文发送,而SMTP会经过base64转码。