※09.1 FTP Protocol Overall
一、FTP Introduction
1、万维网出现以前用户使用命令行方式传输文件,最通用的就是FTP。经40年发展,FTP标准已从简单的基于TCP的网络文件复制协议转变成复杂的整合模式,能在包括云服务在内的不同环境中。
FRC 114/1971年/已废除,最初由 MIT学生Abhay Bhushan制定 |
RFC 765/1980年/已废除,FRC 959/1985年/目前施行 |
1997/1998年因安全原因修订并增加“被动模式”及IPv6支持。 |
2、FTP用户名和口令的明文传输容易被窃听
很多用户把相同的用户名和口令用在不同的应用中,这样这个问题可能看起来更为糟糕。
可以使用SSL封装FTP,但FTP是通过建立多次链接进行数据传输的,即便是保护了密码安全,也很难保护数据传输的安全性。
自文件传输协议(FTP)发布以来,安全的数据传输也经历了长足发展,推荐使用SCP取代FTP进行文件传输。
3、Server可被终端和FileZilla等FTP客户端程序所控制
start IEXPLORE.EXE "ftp://anonymous:abc@1.1.1.1"
4、基于面向连接的TCP协议
为数据在C/S间的传输提供了可靠的保证。 |
繁复握手在传输档案数量很多的小档案时效能不好。 |
error recovery :FTP基于TCP具有数据重发机制。 |
二、FTP的主要目的:促进文件的网络传输
跨平台文件传输,向用户屏蔽不同主机FS的细节
1、由众多计算机厂商研制出的文件系统多达数百种,且差别很大:
访问控制方法不同。 | 文件的目录结构和文件命名的规定不同。 |
计算机存储数据的格式不同。 | 对于相同的文件存取功能,操作系统使用的命令不同。 |
因此,要实现不同系统之间的文件复制非常困难。
2、FTP的主要功能是减少或消除在不同OS下处理文件的兼容性。
ASCII文件内容由若干行组成,可以使用操作系统的显示、编辑命令来显示和编辑文件的内容,asc(默认)或bin传输模式。 |
除ASCII外的文件使用bin传输模式,否则内容会遭到破坏。 |
3、匿名FTP支持隐式的(anonymous)使用远程计算机
使用FTP必须首先利用Telnet登录,Internet上的FTP主机很多,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP无需本地主机成为远地计算机的注册用户,从而解决了这个问题。
三、FTP Professional terms
Control connection : User-PI与server-PI用来交换命令和响应的信息路径。此连接遵守Telnet协议。 Data connection : 用规定的模式和类型进行数据传输的双向连接。传输路径可能是server-DTP与user-DTP之间或两个server-DTP之间。 |
End-Of-File :文件结束符标志定义了传输中一个文件的结束。 End-Of-Record :记录结束符标志定义了传输中一个记录的结束。 |
Error recovery :允许用户从一些诸如主机系统或传输过程失败中恢复从断点续传。 |
Protocol Interpreter 协议解析器: 用户和服务器用其来解析协议。 Server-PI :在L端口监听user-PI的连接请求并建立控制连接,并管理server-DTP。 User-PI :用U端口建立到server-FTP process的控制连接,并在传输时管理user-DTP。 |
Data Transfer Process数据传输过程 :用于建立并管理数据连接。 |
Server-FTP process:由server-PI和server-DTP组成。 User-FTP process: User-PI+user-DTP+UI,它们共同与server-FTP process配合完成文件传输功能。用户界面UI允许使用本地语言对用户发送命令响应。 |
※09.2 FTP Process Model
一、一个FTP会话通常包括五个软件元素的交互
用户面面 | 提供了一个用户接口并使用客户端协议解释器的服务 |
客户 PI | 客户协议解释器,其项远程服务器协议机发送命令并且驱动客户数据传输过程 |
服务器PI | 服务器协议解释器,响应客户协议机发出的命令并驱动服务器端数据传输过程 |
客户 DTP | 客户数据传输过程,其负责完成和服务器数据传输过程及客户端本地文件系统的通信 |
服务DTP | 服务器数据传输过程,其负责完成和客户数据传输过程及服务器端文件系统的通信 |
二、FTP通信涉及到五个进程
1、打开熟知端口(端口号为21),使客户进程能够连接上
2、等待客户进程发出连接请示(open)。
3、启动从属进程来处理客户进程发来的请示。
从属进程对客户进程的请示处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
4、回到等等状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。
三、传输与控制采用独立的连接具有以下三方面的优点
1、使FTP协议更加简单并且更容易实现,例如控制连接可以直接采用Telnet协议实现,FTP数据连接不会与FTP命令混淆起来。 |
2、在数据连接结束后,控制连接仍然保留着,它能够在新的传输连接时被使用。 |
3、发送方与接收方在所有的数据都到达时可以在数据连接上用EOF通知另一方,从而达到命令传输的功能。 |
四、FTP控制连接(FTP使用Telnet协议进行控制连接)
控制连接是user-PI和server-PI间用仅在发送命令并接收应答时使用的链路。控制端口用来监听双方共同规定的控制字以达到及时提供服务或响应。
用户在两台主机间建立控制连接,然后进行数据连接,客户与服务器为每个文件传输建立一个单独的数据连接。
如果用户请求另一个传输,那么客户与服务器将建立一个新的数据连接。为了避免在控制与数据连接之间发生冲突,FTP对于两者使用不同的协议端口号。
控制连接用NVT ASCII传命令和响应。 |
FTP协议要求数据传输在处理时打开控制连接。尽管数据连接频繁地出现并消失,但是控制连接却在整个会话中一直保持着。在完成FTP服务后由用户发出中止控制连接命令。 |
五、数据连接(user-DTP和server-DTP传输链路)
1、主动模式客户端会侦听服务器以建立连接,客户端安装了防火墙会产生一些问题。所以,后来发明了被动模式。
2、被动FTP对服务器端的管理不利
3、关闭数据连接的条件
用户端发送ABORT命令 | 服务器通过EOF终止要求,表示结束发送数据 |
控制连接关闭 | 发生不可恢复错误 |
六、control connection上的请求与响应
1、FTP Command(PI规定字,用户空间不同OS命令不同)
FTP命令主要用于控制连接,可以直接采用Telnet协议实现,所以FTP命令同Telnet命令包括中断进程、Telnet的同步信号、查询服务器、带选项的Telnet命令等,命令以NVT ASCII码形式传送,要求在每行结尾都要有CR、LF对。
2、FTP response(Server-PI result-code)
响应都是ASCII码形式的3位数字,响应也是以NVT ASCII码形式传送,要求在每行结尾都要返回CR、LF对,此处省略。
※09.3 FTP Transfer Process
(Active Mode Example)
※09.4 FTP PORT Packet Analysis
FTP实际上是经过两次TCP三次握手完成的,对FTP的理解直接关系到对企业级防火墙的控制方式。
主动 FTP(适合FTP Server和client直接建立连接时使用) 命令连接请求:客户端 >1023端口 → 服务器 21端口 数据连接请求:客户端 >1023端口 ← 服务器 20端口 |
一、vsftpd强制为Active mode
1、cuteftp禁pasv后下2KB的a.iso并正常断开连接连接
2、wireshark监控tcp数据
3、ftcp-data第一个为list列表数据,此后的包为有效数据
4、过滤ftp——请求响应协议
5、ftp登陆tcp全过程
二、封锁FTP-DATA并分析
1、禁用ftp-data
2、分析:Client回包不能通过防火墙而丢包
※09.5 FTP PASV Packet Analysis
被动 FTP(适合client位于防火墙之后的环境) 命令连接请求:客户端 >1023端口 → 服务器 21端口 数据连接请求:客户端 >1023端口 → 服务器 >1023端口 |
1、notepad c:\pasv.ftp编写自动登陆FTP的脚本
open 1.9.9.9 | 三次握手创建双向control-connection |
user anonymous 8888888888mima | telnet明文密码认证 |
quote pasv(默认) | 数据连接创建模式改为由client向服务器发起 |
prompt off | 去掉mget *下载每个文件前的提问 |
mget *.* | 使用pasv模式创建data-connnection 1,传输file-a.log 使用pasv模式创建data-connnection 2,传输file-b.log |
quit | 四次挥手断开双向control connection |
2、ftp -n -s:c:\pasv.ftp自动连接到vsftpd-server=1.9.9.9
3、FTP登陆过程报文分析=telnet+http
※09.6 FTP Advanced 2 vsftpd
一、定义PASV端口范围(每个client占用一个Port)
1、Port号仅1个,有2个Client下载会失败
2、Port有10个Port,仅2个Client下载则成功
二、被动模式:服务器单机防火墙设置困难
方法一:使用状态跟踪
modprobe ip_conntrack_ftp -A INPUT -p tcp - -dport 21 -j ACCEPT -A INPUT -m state - -state ESTABLISHED,RELATED -j ACCEPT |
方法二:限制pasv模式打开端口的范围
三、主动模式:客户机单机防火墙设置困难
打开port模式使用的20端口和21端口
modprobe ip_conntrack_ftp -A INPUT -p tcp -dport 21 -j ACCEPT -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT |
四、wget解决ftp命令行不支持目录下载
-r参数就是用来下载目录的 |
*必须有,否则下载下来的就一个文件 |