Filezilla server配置FTP服务器中的各种问题与解决方法

公司很多资料需要通过ftp上传,那么就需要配置一个FTP服务器,找了一台Windows服务器捣鼓,开始按网上教程自己配置特别麻烦,何西西说用Filezilla比较方便,就去Filezilla官网下载了Filezilla Server,本来以为会很轻松搞定,没想到还是碰到一堆坑,记录下来方便以后查阅。

服务器:Windows Web Server 2008 R2,64位

坑1:安装Filezilla Server报错 "could not load TLS network. Aborting start of administration interface"

原因:根据这个Filezilla Forums里这个帖子https://forum.filezilla-project.org/viewtopic.php?t=39838讨论的,服务器没装补丁KB2533623。

出坑:去微软官网下载补丁,根据自己服务器型号选,我选了Update for Windows Server 2008 R2 x64 Edition (KB2533623),补丁装好以后安装Server不再报错。

坑2:打开Filezilla以后面板里红字显示"FTP over TLS is not enabled, users cannot securely"

原因:未启用TLS模式。

出坑:

打开Settings

选FTP over TLS settings,勾选Enable FTP over TLS support,然后点击中间Generate new certificate...按钮

空白处都可以随便填,注意Common name (Server address)那里填127.0.0.1就行了,下面给密钥和证书选一个保存的位置,然后点最下方Generate certificate

然后在Key password填个密钥密码,随便填一个用不到的,最后点击左下OK,再打开Filezilla就不会有错误提示啦~~

上面两个坑解决以后,就可以按照网上各种教程添加用户,分配文件夹访问权限了,基本配置参考《FileZilla怎么用 FileZilla配置FTP服务图文详解》,Settings里每一项的具体作用参考《免费ftp服务器FileZilla Server配置》,大部分都默认设置就行了。

坑3:服务器本地可以访问FTP,其他机器访问连输用户名和密码的界面都弹不出

原因:防火墙封住了服务器上FTP的入站端口,这种情况下Filezilla里连有人请求连接的信息都看不到。

出坑:

打开“高级安全Windows防火墙”

右击“入站规则”,点击“新建规则”

选择“端口”,选择“TCP”,输入FTP端口,如果之前配置Filezilla时没有改过,就用默认端口21

后面就选“允许链接”,所有时候都应用该规则,最后给这条规则命名如FTP Default Port,再用其他机器访问FTP就能弹出输入用户名和密码的窗口了,Filezilla里也能看到连接的信息啦~

坑4:服务器本地可以访问FTP,其他机器输入用户名和密码后提示“打开ftp服务器上的文件夹时发生错误,请检查是否有权限”

原因:这个坑博主把上面那条提示放到百度里,也没搜到什么靠谱的解决办法,然后想着装一个Filezilla Client,用Client访问FTP是不是能看到什么错误代码,果然找到了错误 代码"425 Can't open data connection.",从stackoverflow上搜到这个解决办法《Setup FileZilla Server Passive Ports on Windows Server 2012》。大概是说FTP的客户端默认以Passive mode(被动模式,博文最后解释了FTP的主动模式和被动模式)连接服务器,Filezilla会随机打开1-65535之间的一个端口,导致这个错误的原因就是,防火墙封住了Passive mode的端口。

出坑:

在Passive mode settings里勾选Use custom port range,如果让防火墙对1-65535端口全部开放有些危险,所以先在这里限定好端口范围

然后重复坑3在入站规则里打开21端口的过程,打开限定好的Passive mode端口范围,唯一的不同就是在下面这里输入50100-51100,给这条规则命名如FileZilla - Passive FTP Ports,再用其他机器访问就没有任何阻碍啦~

至此,Filezilla配置过程中的所有坑都跳出来了,这里再补充两个小知识和一个小技巧:

1. 防火墙的入站规则和出站规则

下面是从网上copy下来的一段解释,对于FTP服务器来说,只涉及外网访问服务器,不涉及服务器访问外网,所以上面坑3和坑4都是在防火墙的入站规则里打开端口,没有修改出站规则。

出站就是你访问外网,入站就是外网访问你,用户可以创建入站和出站规则,从而阻挡或者允许特定程序或者端口进行连接。用户可以使用预先设置的规则,也可以创建自定义规则,可以将规则应用于一组程序、端口或者服务,也可 以将规则应用于所有程序或者某个特定程序;可以阻挡某个软件进行所有连接、允许所有连接,或者只允许安全连接,并要求使用加密来保护通过该连接发送的数据 的安全性;可以为入站和出站流量配置源IP地址及目的地IP地址,同样还可以为源TCP和UDP端口及目的地TCP和UPD端口配置规则。

2.FTP的主动模式和被动模式

FTP连接包括两类通道:一个控制连接(命令联系通道),几个数据连接(资料联系通道)。前者用于传递客户端的命令和服务器端对命令的响应,默认使用服务器的21端口,生存期是整个FTP会话时间。后者用于传输文件和其它数据,如目录列表等,只在需要数据传输时建立,而一旦数据传输完毕就关闭,每次使用的端口也不一定相同,根据数据连接是否由服务器发起,可以分为主动模式和被动模式。

《关于ftp的主动模式(Active Mode)和被动模式(Passive Mode)》里解释得比较清楚,FTP协议是建立在TCP协议基础上的,所以客户端与服务器的每次交互都要经过三次握手,通过两张图可以区分这两种模式:

主动模式:客户端端利用>1024的任意端口发起与服务器21端口建立连接,建立“命令联系通道”,如果要发生资料传输,通过21告知服务器端口(如1333)并 开始listen,服务器利用20端口向客户端的1333端口发起连接,建立“资料联系通道”。由于“资料联系通道”是由服务器主动建立的(图中步骤6),所以称作主动模式。

被动模式:建立“命令联系通道”的方式和主动模式基本一样,也是连接先连接服务器的21端口。但是如果需要传输资料,客户端会送出PASV指令,告诉服务器要利用被动模式建立“资料联系通道”,然后服务器会打开一个端口并开始listen,并把这个端口通过“命令联系通道”告知客户端,客户端再打开一个端口,与服务器建立“资料连接通道”。由于“资料连接通道”是由服务器被动建立的,所以称作被动模式。

3.取消FTP的自动登录

有时候我们访问某个FTP时可能设置了保存密码,之后每次访问那个FTP,都会默认通过之前的用户名和密码登录。为了安全起见不让它再自动登录,或者FTP设置了不同权限的用户,我们想通过其他用户名登录,可以在已进入的目录空白处右击,选择“登录”,弹出的窗口里把“保存密码”选项取消掉就可以了,在这个窗口里也可以输入其他用户名及密码,就是通过其他身份访问FTP了。