基于SSH安全端口转发实现POP的安全传输
在SSH实现telnet安全传输的实验中,用SSH加密telnet是并没有太多使用价值的,其旨在说明SSH的端口转发功能,在此基础上,本次试验通过SSH实现了具有一定使用价值的邮局协议POP的安全传输。
一、实验环境:
两台Linux虚拟机,一台模拟本地主机(localhost),一台模拟远程主机(HostServer)。并且安装有telnet、SSH和POP,sendmail需要注意的是telnet和ssh都是CS工作模式,安装包包括客户端和服务器。在宿主机上用putty远程登录登陆Linux。并使用wireshark验证数据包是否加密。
二、实验构想:
假设用户yanji要读取远程主机(HostServer)上的邮件。用户为了保证安全,使用SSH安全端口转发,在本地主机的2000端口和远程主机的邮局协议POP的110端口建立安全隧道,然后在本地主机使用telnet登录到远程主机,安全读取用户邮件。
三、实验步骤:
1、查看并启动Linux 172.16.1.3(HostServer)上的POP协议和sendmail协议:
rpm -qa | grep sendmail 查看是否安装sendmail
service sendmail start 立即启动sendmail服务,也可用开机启动命令chkconfig
pstree | grep sendmail 检验sendmail是否已启动
rpm -qa | grep imap 查看是否安装imap,RH Linux9 中imap的RPM包包括POP和IMAP两种协议的程序
vi /etc/xinetd.d/ipop3 将disable=yes 改为 disable=no
vi /etc/xinetd.d/imap 将disable=yes 改为 disable=no
service xinetd restart 重启超级服务xinetd,imap和POP是挂在在超级服务下的
备注:一般sendmail和imap在系统安装时已安装,不需要自己安装的
2、在Linux 172.16.1.3 (HostServer)上用root账户发一封邮件给非根用户yanji:
echo "一封root发给yanji的测试邮件" | mutt -s "Hello World" yanji
3、在宿主机上启动wireshark,对数据包进行验证
捕捉过滤器的过滤语句: host 172.16.1.2 and 172.16.1.3;
4、在Linux 172.16.1.2(localhost)上建立ssh端口转发:
ssh -L2000:localhost:110 172.16.1.3 (非后台执行,会占据终端,需要另外打开一个远程终端来完成余下试验)
ssh -f -L2000:localhost:110 172.16.1.3 sleep 7200(后台执行,不会占据终端,可以继续使用该终端完成实验);
按要求输入用户名和密码
5、依据是否选择了后台执行,选择正确的终端进行telnet连接:telnet localhost 2000并读取邮件:
若在上一步中选择拉后台执行,在可以在同一putty终端(172.16.1.2)进行telnet的远程登陆,若没有,则需要另外开启一个putty终端(172.16.1.2)进行telnet连接读取信件。
实际操作如下:
[yanji@localhost yanji]$ telnet localhost 2000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK POP3 localhost.localdomain v2001.78rh server ready
user yanji
+OK User name accepted, password please
pass yanji123
+OK Mailbox open, 1 messages
retr 1
+OK 817 octets
Return-Path: <root@localhost.localdomain>
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by localhost.localdomain (8.12.8/8.12.8) with ESMTP id s3II3PrL004289
for <yanji@localhost.localdomain>; Sat, 19 Apr 2014 02:03:25 +0800
Received: (from root@localhost)
by localhost.localdomain (8.12.8/8.12.8/Submit) id s3II3Pa5004287
for yanji@localhost.localdomain; Sat, 19 Apr 2014 02:03:25 +0800
Date: Sat, 19 Apr 2014 02:03:25 +0800
From: root <root@localhost.localdomain>
To: yanji@localhost.localdomain
Subject: Hello World
Message-ID: <20140418180325.GA4282@localhost.localdomain>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
User-Agent: Mutt/1.4i
Status: O
一封root发给yanji的测试邮件
.
qiut
+OK Sayonara
Connection closed by foreign host.
备注:当用root登陆时,输入密码后会提示bad login
pop常用命令:
命令 参数 状态 描述
user username 认可 此命令与下面的pass命令若成功,将导致状态转换
pass password 认可
?apop name,digest 认可 一种安全传输口令的办法,执行成功导致状态转换。
stat 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
uidl [msg#] 处理 返回邮件的唯一标识符,pop3会话的每个标识符都将是唯一的
list [msg#] 处理 返回邮件数量和每个邮件的大小
retr [msg#] 处理 返回由参数标识的邮件的全部文本
dele [msg#] 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行
rset 处理 服务器将重置所有标记为删除的邮件,用于撤消dele命令
top [msg#],n 处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
noop 处理 服务器返回一个肯定的响应,不做任何操作。
quit 更新 退出
6、分析wireshark捕获的数据包:
数据全部为SSH加密
我们可以建立ssh安全端口的情况下,用telnet 172.16.1.3 110登录到远程主机收取邮件。我们可以在wireshark清楚的看到登陆账户、口令和邮件内容,POP是明文传输。
四、实验总结:
1、当用root登陆时,输入密码后会提示bad login;
2、POP命令的执行:
POP命令是一条命令执行一次,与服务器进行一次通信。而telnet则有四种通信模式,且一般为一次一个字符。
3、IMAP的一个与POP3的区别是:
IMAP它只下载邮件的主题,并不是把所有的邮件内容都下载下来,而是你邮箱当中还保留着邮件的副本,没有把你原邮箱中的邮件删除,你用邮件客户软件阅读邮件时才下载邮件的内容。较好支持这两种协议的邮件客户端有:ThunderMail,Foxmail,outlook等。通俗来说,POP运用于邮件客户端(outlook,foxmail),imap则更多用于网页版邮箱,目前国内免费的imap服务提供商有腾讯的QQ邮箱、21cn世纪龙、搜狐邮箱和网易邮箱。当然,imap也是可以用于outlook等邮件客户端软件中。IMAP协议比较酷的功能是用户可以维护自己在服务器上的邮件目录;可以直接抓取邮件的特定部分(例如只有文本)。
备注:关于端口转发的其他问题可以查看“SSH实现telnet的安全传输”一文