注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 利用手机和电池实现反地心..
 帮助

如何解决内网无法用PORT方式访问FTP服务器的问题


2007-02-01 16:57:16
 标签:服务器 FTP   [推送到技术圈]

如何解决内网无法用PORT方式访问FTP服务器的问题
 
一、环境介绍:
服务器固定IP202.202.101.100
FTP服务器端软件:SERV-U6.1
服务器配置:TCP/IP筛选,只对外开放了TCP802120
二、问题现象
原先ADSL用宽带路由共享上网。内网机器用主动方式(PORT)可以正常登录FTP服务器。现用LINUXIPTABLES做网络防火墙共享上网,无法用任何方式登录FTP,但其它人用主动方式(PORT)却可以登录FTP
三、问题分析
FTP服务器他人可以登录,而自己不能登录,问题不在服务器端,应该在本身。前后多次登录FTP时用的机器和软件都没换,只更改了网络环境,所以估计问题出在网络上,我们可以缩小到IPTABLES上。仔细分析了IPTABLES,没有对端口做任何过滤,只做了一个简单的转发。问题的根源应该在FTP协议的工作方式,网络环境的改变,原来的方式不能适合了。
 
FTP协议有两种工作方式:PORT方式(主动)和PASV方式(被动)。
1、  PORT(主动)方式的连接过程是:
1)      客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。如下图,内部主机IP192.168.100.2,网关IP61.152.165.188FTP服务器IP202.202.101.100
2)      当需要传送数据时,服务器从20端口向客户端的空闲端口发送连接请求,建立一条数据链路来传送数据。
2PASV(被动)方式的连接过程是:
1)  客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
2)  当需要传送数据时,客户端向服务器的空闲端口发送连接请求,建立一条数据链路来传送数据。
四、发现问题所在
   因为PORT方式在传送数据时,由服务器主动连接客户端,所以,如果客户端在防火墙或NAT网关后面,用PORT方式将无法与Internet上的FTP服务器传送文件。这种情况需要使用PASV方式。几乎所有的ftp客户端软件都支持这两种方式。特殊的典型例子是IEIE默认是用PORT方式的。如果要在ie里启用PASV方式,请打开IE,在菜单里选择:工具-Internet选项- 高级,在“使用被动ftp”前面打上钩(需要IE6.0以上才支持),确定即可。
下图,当使用主动方式登录FTP时,建立了命令链路后,接下来是服务器向客户发起数据传送请求,数据包到达网关后,网关并不知道要把这个数据转到内网的哪台机器上,所以就无法建立数据传送链接。
(建立命令链接是客户端的目标端口是FTP服务器的TCP21,当服务器返回时源地址是FTP服务器端的TCP21,所以网关知道该把这个数据转发到内网发起请求的机器上。)
 
从以上的分析看来,在这样的环境下是不可能用主动方式进行登录FTP了。解决的方法是用被动方式,但是服务器堵了端口,而用被动方式链接时,要求服务器开放一段动态的端口,所以此方法也不可能实现。
五、解决问题
充分利用SERV-U现有的功能,把原先被动模式访问时服务器端需要动态开启端口变成服务器端打开固定的端口。
1、  把客户端设置成被动方式,链接FTP服务器,因为不可能链上所以要过比较久的时间才会出现出错提示信息,从出错信息中找到类似这样的一行数据202.202.101.100,4,64(格式:IPm,n找到它我们利用公式计算出如果客户端用被动方式登录服务器时,服务器要动态开放的第一个端口值。公式为m*256+n,上例中应该是4*256+64=1088
2、  设置SERV-U如下图:
此处数值你可以多设置几个如1088-1095,这样就多开了一些端口用以PASV的端口。
3、  在防火墙、TCP/IP筛选、本地安全策略等处对外开放以上设置的端口,如本例中的tcp1088端口。注意了,如果你做了TCP/IP筛选的话,记得重启一下服务器才会生效。
 
六、总结
本例的思路是,当网络环境不允许使用主动方式登录FTP时,改用被动方式登录。利用SERV-U内置功能,把被动方式登录FTP时,服务器端需要动态开启端口变成动态打开我们人为设定的一个或者一段端口。
以上实验参考了网上众多锁碎资料,实验已成功。分析不足之处请各位大虾批评、补充。
本人联系
QQ : 706521828
 
 
 
2005-11-3




    文章评论
 
 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: