防火墙设置问题案例-解决windows2012 r2连不上其它服务器的ftp

防火墙设置问题案例-解决windows2012 r2连不上其它服务器的ftp

21319发表于2015-02-01

最近在用用两台windows2012 r2服务器搭ftp,其中一台有ftp服务器,把它叫做A,一台作为ftp客户端,把它叫做B。ftp服务器搭建成功了,我本地的机子都能工具正常连接(主动模式)。但是win2012那台服务器,无论是用主动模式还是被动模式始终连接不上,这个问题让我纠结了许久,今天终于解决了。原来ftp的主动模式和服务器和客户端的防火墙设置有大的关系。

问题是这样的:
Status: Connection attempt failed with "EACCES - Permission denied".
Error: Could not connect to server

我用telnet也不通
C:\Users\Administrator>telnet xxx.xxx.xxx.xxx 21
正在连xxx.xxx.xxx.xxx..无法打开到主机的连接。 在端口 21: 连接失败

要本地是没有开防火墙的,而那台要做ftp客户端的windows 2012是开了的,问题大概知道了是ftp客户端防火墙的问题:
仔细看了一下,原来有人之前在出站规则里面加了一个阻止ftp的规则如下图所示:
防火墙阻止ftp的规则
协议和端口如下图:


这样设置意思是本地的所有端口到其它机器的20,21都阻止。哈哈,终于找到罪魁祸首了,^_^!
接下来我把个上面的规则禁用了,重新连接但新的问题又出现了:
Error: Connection timed out
Error: Failed to retrieve directory listing

我再仔细检查那台B机器的防火墙。
入站规则如下图:

出站规则如下图:


这样入站和出站都设置的是20和21端口,意思是:
1、允许其它机器到所有端口到本机的20和21(进站)
2、允许本机的20和21到其它机器到所有端口(出站)
防火墙按上面设置主动模式会一直报:
Error: Connection timed out
Error: Failed to retrieve directory listing
后来我把连接改成被动模式居然可以成功连接了。
注意:我这里用的FTP连接工具是FileZilla,更改了连接模式,最好是要退出重新打开一下FTP连接工具。我在用的时候经常改了要重新打开才生效,我猜是有缓存。
这样问题暂时是解决了,但是有点奇怪,我本地是用的主动模式连接的,但B机器却只能用被动模式才能连。我之前写的一个连接ftp的程序是统一用的主动模式,这样我的程序在B机器就不能用了。
网上找了资料“到底FTP什么时候用主动模式与被动模式,二者的区别是什么?
这里要用的是主动模式,下面就总结一下FTP主动模式关键点:
FTP主动模式通讯流程图
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听 端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。

注意:这里说的是“客户端从一个任意的非特权端口N(N>;1024)连接到FTP服务器的命令端口,也就是21端口”,这是主动方式的ftp客户端的出站,用的本地端口不是20或21,而是大于1024的一个端口,所以上面的设置的出站规则正确,所以用主动连不上。

解决办法:

防火墙入站规则设置如下图:


防火墙的出站规则不用设置,如果加了规则要禁用掉,因为win2012的高级防火墙出站默认是允许的,如下图:


再次连接ftp,可以了。ftp程序也正常了。

总结:ftp的主动模式与被动模式和防火墙设置有大的关系,如果连不上首先检查服务器和客户端的防火墙规则,要首先定位是不是防火墙的问题,可以把其中一边的防火墙关了试一下是不是能连了,如果关了一方能连了就定位到了到底是哪一方的防火墙的问题。

注意:windows最新推出的windows高级防火墙有四个选项:


分别是:域配置,私有网络配置,公用网络配置,IPSec设置。
我之前只关了第一个域配置,由于ftp连接我用的是外网,只关第一个是没有用的,这样始终外网防火墙是开起的。最后我关闭了第三个“公用网络配置”才生效。这点一定要记住哦。

小编蓝狐