客户端配置防火墙后使用ftp传送数据

来源:互联网 发布:没有钱想去美国知乎 编辑:程序博客网 时间:2024/04/30 15:58

在linux中配置了防火墙,开启21.20端口的访问

iptables -A INPUT -s XXX.XXX.XXX.XXX -p tcp --sport 21 -j ACCEPT

iptables -A INPUT -s XXX.XXX.XXX.XXX -p tcp --sport 20 -j ACCEPT

登陆正常,但是在做ftp测试ls命令时碰到如下错误:

ftp> ls

227 Entering Passive Mode (XXX,XXX,XXX,XXX,197,116)

网上查询到如下资料

FTP有两种工作模式,PORT方式和PASV方式,中文意思为主动式和被动式 ,详细介绍如下:
  主动 FTP :
    命令连接:客户端 >1024 端口 → 服务器 21 端口
    数据连接:客户端 >1024 端口 ← 服务器 20 端口
  被动 FTP :
    命令连接:客户端 >1024 端口 → 服务器 21 端口
    数据连接:客户端 >1024 端口 ← 服务器 >1024 端口
  PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据。
  PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链 路来传送数据。 

因为防火墙只开了21和22端口的连接,因此无法返回命令结果。

在ftp命令中加上passive,关闭PASV模式后,执行ls返回正常。