FTP主被动模式问题

FTP主被动模式问题

FTP主动及被动模式问题

很久以前处理过一个案例:中信银行前置机与平安对接,通过ftp的方式,送文件过来时,报错:

用户反馈:

连接上,switch 到binary mode,就报错,连接被剔除。
请检查10.35.156.53、10.35.156.54、55、56上的ftp是否有问题
NAT:172.16.19.24  F5vip: 172.29.34.16

421 Service not available, remote server has closed connection.

根据用户提供的信息,先到主机上去看看。
测试ftp功能是否正常:

[chkusr@CNSZ041729 ~]$ ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220-If you are not authorized to access this private computer system, disconnect now. All activities on this system will be monitored and recorded without prior notification or permission.
220
Name (127.0.0.1:chkusr): ftpzhongxinybt
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bin
200 Switching to Binary mode.
ftp> ls
227 Entering Passive Mode (127,0,0,1,99,53)
150 Here comes the directory listing.
-rw-r--r--    1 9999     9999            0 Feb 05 13:02 CITIC047FSS20160205REQ.TXT
226 Directory send OK.
ftp> get CITIC047FSS20160205REQ.TXT
local: CITIC047FSS20160205REQ.TXT remote: CITIC047FSS20160205REQ.TXT
227 Entering Passive Mode (127,0,0,1,30,65)
150 Opening BINARY mode data connection for CITIC047FSS20160205REQ.TXT (0 bytes).
226 File send OK.
ftp>

挺好的,没问题。问题应该在网络层面。

问问中信:

  1. 过来的公网IP
  2. ftp访问方式,主动or被动
  3. 可否手工测试

回答说 “中信无法人工模拟登录ftp,上传或下载。只能通过脚本,连接时,可以看到如case中提及的情况。”
感觉跟防火墙策略有关,中信过来的IP是:166.100.12.36
查询访问该ip及端口的所有策略信息:

access-list outside_access_in extended permit tcp host 166.100.12.36 host 172.16.19.24 eq ftp log
access-list 362 extended permit ip host 172.29.34.16 host 166.100.12.36 

有策略。运营没有反馈全,再问中信采用主动模式or被动模式进行ftp访问?

运营问业务,业务问中信,又过去N个小时。上图:

原来是被动访问,这就对了,估计是防火墙没开ALG,呵呵就快要找到真相了o(∩_∩)o…哈哈

应用层网关(英语:Application Layer Gateway,或application-level gateway,缩写为ALG) 是一种NAT穿透技术。就应用层面来说,它允许修改网关上的NAT traversal的过滤规则,完成某个应用程序在特定协议上的地址和端口的转换。举例来说,像 FTP、BitTorrent、SIP、RTSP或IM等即时通软件上的文件传递功能,这些都可以使用ALG来针对应用程序在地址及通信端口转换上的需求.

BUT,现实是残酷的,没那么容易搞定。
这个墙的ftp alg是开了的:

    policy-map global_policy
    class inspection_default
      inspect ftp
      inspect sip
      inspect h323 h225
      inspect h323 ras
    policy-map zbxftprate-limit
    class zbxftprate-limit
      police input 1024000
    policy-map rate-limit
    class rate-limit
      police input 512000

    policy-map inspect_ftp_10021
    class ftp_port_10021
      inspect ftp
     class rate-limit
      police input 512000
    class zbxftprate-limit
      police input 1024000
    !
    service-policy global_policy global

那怎么连接后改变传输模式会提示421然后断开呢?
分析一下访问流程:

F5,对咯,防火墙开alg,F5也要开。
该VS仅配置了21端口的转发,少了ftp profile。
加上就一切OK了。客户好评:完美解决! 🙂


我们回过头来看看ftp的访问模式,什么叫主动什么叫被动呢?
简言之:

  • 主动:客户端连接服务端后(port 21),随机开放一个端口告知服务端访问
  • 被动:客户端连接服务端后(port 21),随机开放一个端口告知客户端访问

道理差不多,但不够严谨。参考网络资源描述严谨些。

PORT(主动模式)

PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

最佳实践

ftp明文传输,不安全而且涉及主被动模式问题防火墙开通麻烦,我们可以使用更加安全可靠的sftp(secure file transfer program)来替代,sftp仅需一个22端口。
简便、快捷、安全。后面我会介绍高可用的sftp集群架构及实现。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注