有关FTP服务器搭建与FTP加密技术(学习笔记)
FTP文件传输协议
本篇是学习笔记,只整理相关链接,诚挚感谢各文章的博主。本文章不定期拓展内容。
一、 有关FTP的基本概念
(一)、什么是FTP
(二)、 FTP扩展安全协议
二、服务器搭建与客户端使用
(一)、 常用服务端与客户端测评
- 客户端:首推使用WinScp,支持FTP、SFTP、FTPS等,功能强大;FileZilla也不错,但不支持SFTP
- 服务端:FileZilla提供除SFTP外的所有连接方式,简单易上手;OpenSSH和FreeSSHD都提供SFTP
(二)、 使用FileZilla搭建FTP服务器,并了解主动与被动模式
基本配置参考以下几篇(注意防火墙配置部分,不懂自己查,不赘述)
1、本地环回搭建
2、 对外服务器搭建
涉及端口映射、内网穿透与NAT地址转换技术
由于测试机位于家庭网络中,没有公网IP,所有此处考虑使用内网穿透,想要了解内网穿透看下面:
- 内网穿透软件介绍《八个优秀开源内网穿透工具》
- 反向代理服务器《ngrok:反向代理服务,它能够实现内网穿透》
其实内网穿透软件都是使用的反向代理服务器,原理相同
- 了解内网穿透什么内网穿透?如何使用内网穿透?
内网穿透的软件有很多,这里选择使用路由侠
-
下载请前往 路由侠官网
-
FileZilla配合路由侠穿透教程 点击这里
针对教程里为什么要在传输连接的映射中把公网端口和内网端口设置为一样,这里解释一下:因为FileZilla的缘故,当你选钩映射后的IP作为对外地址,并且自定义了端口范围,当FTP协商通过后,服务端就会把这个IP和这个端口告知客户端,让客户端来连接xxxx.xxx.luyouxia.net:46470(以图片为例),但是问题是,46470不仅是对外告知的端口,同时也是本地开放的端口,假设这个端口和你路由侠为你映射的公网端口不一致,那么一开始告知客户端的地址可能就不是正确的,导致客户端无法连接到路由侠提供的反向代理服务器。
简而言之,是由于FileZilla服务端的特性,所以必须这么做,直接记住就行。
注意,在为穿透形成的隧道分配带宽时,要注意查看本地计算机的上行带宽,如果隧道分配带宽高于本地上行带宽,那么传输的最大速率就会受限于本地上行带宽。
测试中我为隧道分配4Mbps的带宽,在本机最大上行速率范围内
可以看到传输时的速率,约为4Mbps,说明带宽分配合适
4Mbps其实太慢了,主要是没钱买带宽
(三)、详细介绍加密技术与服务端扩展协议的设置
1、 FTPS即FTP SSL/TSL相关
-
SSL与TSL工作原理《SSL/TLS工作原理》
-
SSL加密技术辅助理解《非对称加密(公钥密钥)》
-
在FileZilla上配置SSL证书实现显示加密
《FileZilla Server建立安全的SSL/TLS FTP》
《如何在 FileZilla 服务器上生成 CSR 并安装 SSL 证书》 -
问题解决的经验积累(选看)
《FileZilla Server 搭建FTP服务器时出现的报错》
《修改资源管理器登录ftp的缺省用户名和密码》 -
扩展部分:
CA证书的申请与购买将在以后另做专题学习,这里且看几篇文章了解
《自签证书可以保护网站安全吗?为什么非CA机构颁发的SSL证书不受信任?》
2、SFTP配置
待补充……(SSH证书验证、密钥分配)
三、抓包实战解析
(一)、FTP明文传输
为了更加清晰的学习FTP控制指令和传输过程,我们先使用明文传输,分析过程是从客户端登录到获取并下载./test/123.txt文件
-
首先配置好过滤器(反代服务器IP是动态的,这里暴露也无妨)
- 连接与登录请求
1~3为TCP三次握手,4号报文返回建立成功
5号报文告知服务器用户名是uu
7号报文告知客户端需要提供密码
-
密码登录与身份验证
9号报文,客户端推送密码,可见FTP模式下密码传输也是明文传输
11号报文服务端告知客户端登录成功
12号报文捎带确认并向服务器发送SYST指令,请求服务器系统信息
具体FTP指令查看这个网站
14号报文,服务器告诉客户端服务器是由FileZilla建立的
-
协商阶段
15号报文客户端再发送FEAT指令,请求更多客户端信息;有关FEAT的一些问题
16号报文服务器返回编码格式、传输方式等内容
17号报文返回客户端类型,WinSCP
协商阶段内容很多,后面的模式都类似,大概有协商字符类型、PWD查看当前工作目录、RETR传输文件副本、TYPE设置传输模式、PASV进入被动模式等,不再赘述,具体的命令都可以查到,请参照这篇博客《FTP命令列表------大写的命令如CWD_PASS》
-
文件传输阶段
直接看文本传输部分
可以看出文件传输使用了服务器的另一个端口46470,这个端口是由于需要内网穿透而特别设置的,通常情况下,默认协商端口号21,数据传输端口号则为20。
由于wireshark使用ASCII显示内容,对于中文文本只能看到一堆点,所以需要把16进制 数据放到其他网站上转换以下,可见,文本内容也是明文传输的。
- 连接释放(略)
(二)、TLS显示加密传输
我们再稍微看一下TLS加密显示
-
TLS传输协商阶段
可见服务器与客户端在一开始连接上还确认对方身份的时候就开始约定使用TLS协议进行传输,后续的用户名、密码、数据都使用TLS进行加密传输
看一下数据内容,内容都经过了加密