记一次FTP服务故障分析

Posted 孙磊elisun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次FTP服务故障分析相关的知识,希望对你有一定的参考价值。

一、 概念理解

FTP的主动、被动模式让人很烦,相信你认真看完下面的描述就不会再烦了!

由于历史原因,FTP服务默认需要有2个端口20(数据端口),21(控制端口)

FTP服务的最初的工作过程是:Client请求Server的21端口建立控制连接,然后Server主动用20端口去连Client建立数据连接,结果总是被Client的防火墙拒之门外。(主动模式)

Server毕竟是为大多数人服务的,这样低三下四又干不成事固然不行,于是为了解决服务端被拒之门外的问题,被动模式诞生了:Client请求Server的21端口建立控制连接,然后Server告诉Client我开了哪几个数据端口,你自己来连。(被动模式)

2种模式的区别总结为一句话:前提都是Client去请求Server建立控制连接,不同的是谁来发起数据连接。

 

二、 故障案例分析

FTP服务器公网IP为:124.x.x.x   内网IP:192.168.1.85  服务端为Vsftpd

故障如图(连接超时):

 

当我看到这个问题的时候,不知所措,也没有仔细去分析连接的过程,我习惯性的用工具连接了一下,因为我相信工具某些方面比人更强大,果然我用CuteFTP连接正常,于是我看工具连接的日志,注意到了一句话:

这句话是什么意思呢?为什么要替换呢?

我们来分析一下过程:

  1. Client向Server(公网IP)发出控制连接申请并通过账号密码验证

  2. Client向Server发出PASV命令进入被动模式

  3. Server向Client返回的是监听IP(192.168.1.85)和数据传输端口(38*256+252=9980)

  4. Client发现返回的IP(192.168.1.85)和之前发出的连接(124.x.x.x)不同,Client自行修改IP为正确的公网IP

  5. Client向124.x.x.x的9982端口发出数据连接申请,建立数据连接

这个分析完之后,我们再回过头来看用命令连接时出现的问题,不难看出,是卡在了Client向Server端发出数据连接申请的时候了,为什么?因为我们命令模式不是智能的,不会自己将Server返回的内网IP转成公网IP,所以连192.168.1.85返回超时。

然后分析的就是为什么会只返回内网IP?

原来,公网IP并不是配在该服务端的,而是通过路由界面进行绑定的,所以FTP服务端程序只知道存在一个内网的IP。

解决办法:配置文件写入pasv_address=公网IP

# man  vsftpd.conf

以上是关于记一次FTP服务故障分析的主要内容,如果未能解决你的问题,请参考以下文章

记一次故障处理----主机异常关闭后mongodb二进制文件损坏

记一次CLOSE_WAIT多的故障

记一次线上故障--HashMap在多线程条件下运行造成CPU 100%

记一次线上故障--HashMap在多线程条件下运行造成CPU 100%

记一次线上故障--HashMap在多线程条件下运行造成CPU 100%

记一次Ceph日志损坏的分析处理过程