背景故事

好吧,大D的VPS已经无备份裸奔多日,一直在寻找靠谱的解决方案,无奈DropBox空间太小,百度云,360云又不开放API。被迅雷收购了的金山快盘虽然有SDK,也有一位大牛写出了Linux下的工具,但是大D写好了shell,测试了一周发现经常连接不上,上传不能。

还寻找了使用Amazon、OneDrive、阿里云、七牛云等等等等等。。。

最后还是买了一台年付VPS用来直接备份吧。

同时,由于FTP普通模式连接会将用户名和密码明文传输,遂决定搭建SSL/TLS安全FTP。

写这篇文章的时候,大D已经在服务器上搭建完毕了。装个虚拟机来写这篇文章吧,顺路可以学习一下Linux下的抓包。

实验环境

宿主机:DELL N5010-358(Intel Core i3-380M+8G)

虚拟化软件:Vmware Workstation 12

虚拟机配置:1核+1G+20G

虚拟机IP分配为:192.168.159.136

安装CentOS 6.7 Minimal

虚拟机配置

CentOS 6.7 Minimal不带Vmware的网卡配置,所以首先配置网卡。

虚拟机网卡模式NAT模式,所以开启onboot和dhcp即可。

然后重启网络服务。

安装Vsftpd

这一步就很简单了。直接安装就是了。

新建一个用来连接ftp的用户,并设置不能登录ssh。

配置一下配置文件。

需要配置的地方不是很多,首先要关闭匿名登录。

最后将Vsftpd启动,并添加到开机启动项。

添加防火墙规则。

关闭SElinux

这时可以使用Filezilla等FTP软件切换到普通FTP模式来连接一下,确认Vsftpd正常工作。

ptftp1

验证普通FTP模式下明文传输

首先安装一下抓包工具。

安装完毕之后我们来抓取一下主机192.168.159.136端口21上的数据包,这时我们将FTP软件的工作模式暂时改成主动模式方便抓包。

抓到一堆包,但是这样的数据是看不出来的呀,于是将数据保存到/home/ftp.pcap,通过FTP下载回Windows,使用Wireshark分析一下包。

可以看到用户名和密码了。

ptftp2

配置SSL/TLS安全FTP

终于来到重点了。

首先我们了解一下FTPS的工作方式。

FTPS工作方式

为了提高整体安全性,我们有两种选择,一种是FTPS,相当于加密版的FTP。第二种是SFTP,也就是通过SSH文件传输协议加密从客户机到服务器的FTP连接。

SSL/TLS协议工作在传输层(TCP/IP)之上,应用层之下。因此它可以很容易的在诸如HTTP、POP3、IMAP4、SMTP和FTP等应用层协议上来实现。

SSL安全扩展至少有两种不同的初始化方法,一种是显式安全,另一种是隐式安全。

显示安全:为了建立SSL连接,显式安全要求FTP客户端在和FTP服务器建立连接之后发送一个特定命令,也就是AUTH SSL或者AUTH TLS,显式的告诉FTP服务器初始化对应的安全连接。这时默认的FTP端口就是21端口。

隐式安全:当FTP客户端连接到FTP时,隐式安全将会自动和SSL连接并自动建立安全。

配置SSL加密FTP数据传输

首先我们来查看Vsftpd是否支持SSL。

如果输出有 libssl.so.10 => /usr/lib/libssl.so.10 (0x008cd000) 类似的一行,那么Vsftpd就是支持SSL的。

接下来我们使用Openssl生成证书。

生成顶级CA的公钥和私钥文件,有效期10年(RSA 1024bits)。

需要注意的是,域名/主机名/IP地址这块需要填写你主机的真实信息。

编辑Vsftpd的配置文件,添加SSL支持。

添加如下内容。

使用FileZilla连接时,按照如下进行配置。

ptftp3

配置完之后进行连接,输入密码,第一次连接时会提示你加载证书。如下:

ptftp4

由于大D的虚拟机没有调整系统时间,所以会显示尚未生效证书,这时点确定就可以进入FTP了。

Linux环境下可以使用curl或者lftp进行连接。

最后我们来验证一下加密是否还会明文传输用户名和密码。

换一种方式来抓包验证吧。

抓到的数据包如下:

可以看到在AUTH TLS开启加密之后,后面的数据包都是被加密过的了。保证了数据的安全。

版权声明
转载保留版权: 大D技研室 | 《Vsftpd搭建SSL/TLS安全FTP》
本文链接地址:https://www.dadclab.com/archives/5839.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , , , 标签