FTP主被动模式抓包分析

FTP主被动模式抓包案例分析

1 FTP 工作模式

FTP有两种工作模式,分别为主动模式和被动模式。所谓的主被动模式,是相对于服务器端而言的。

1.1主动模式

主动模式(Active Mode)是指在发起数据传输的时候,是由服务器端向客户端主动发起连接请求。

主动模式的时序图如下图所示

抓包如下图所示:

 

 

主动模式下的服务器端向客户端发起请求

 

 

在主动模式下,如果客户端有防火墙的话,就有可能服务器端发起主动连接失败。

1.2 被动模式

被动模式(Passive Mode)是指在发起数据传输的时候,是客户端主动发起请求(也就是服务器端被动)。

被动模式时序图如下图所示:

抓包分析的结果如下

控制信道三次握手

 

客户端向服务器21端口发起请求(PASV模式)

 

服务器端响应了PORT 218,168,180,194,108,115,也就是跟客户端说,你可以连接我的108*256+115端口,也即是27763端口

 

 

被动模式的情况下,如果主机或者防火墙有限制,客户端在请求数据的时候,就无法连接服务器。

在被动模式下,如果是LINUX服务器,可以通过启用ip_conntrack_ftp模块来支持被动模式的FTP连接。具体修改方法如下

# vi /etc/sysconfig/iptables-config, 将IPTABLES_MODULES 一行修改为
IPTABLES_MODULES="ip_conntrack_ftp"

然后在iptables规则中,增加

# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

2 实际生产环境分析

生产环境的话,由于中间有防火墙,假设我们是客户端,我们通过Active Mode去连接FTP服务器,首先我们通过防火墙出去访问公网FTP的话,防火墙肯定会进行NAT转换,否则 FTP服务器端收到的PORT就是192,168,0,100,xx,xx,这样的话,服务器端肯定连接不了客户端。

 

3 案例分析

生产环境一公网FTP 用户登录正常,但是无法列出目录,报错如下图所示:

 

分析过程如下:

  1. 这个是一个vsftpd服务器,客户端用的是被动模式。
  2. 已经登陆上了,证明控制信道是没有问题的,是连接信道的问题。
  3. 抓包分析

客户端

服务器端

这里至于为什么源IP和目的IP抓包看到都不一样,是因为是公网IP,做过转换的。

从这里可以看出,客户端要连接服务器的12*256+166 = 3238端口。但是发的包服务器端没有收到(客户端还重发了包),到这里,猜测两个原因:

  1. 网络前端防火墙策略为开放3238端口
  2. 服务器端有防火墙

检查了服务器端的防火墙配置,发现selinux, iptables都没问题。

与网络沟通了一下,网络反馈没有做过任何变更。继续追问网络前端是否有安全策略,答曰有。让其截图看了一下

 

开放的端口是3001~3100。查看了一下vsftpd的配置文件,其中有两行如下

pasv_min_port=3001
pasv_max_port=3300

显然,是这里的端口跟防火墙的不匹配,让网络同事把安全策略调整了一下后恢复正常。

原文地址:https://www.cnblogs.com/doctormo/p/12154884.html