1.1 历史背景
1.2 技术背景
1.2.1 NAT路由器
1.3 防火墙
1.4 恶意路由器,防火墙和数据破坏
2.1 被动模式
2.2 活动模式
3.1 活动模式
3.2 被动模式
4.1 大文件超时
1.1.历史背景
在互联网的快速生活世界中,文件传输协议不仅仅是旧的,它是古老的。 协议的早期草案可追溯到1971年,当前的规范是从1985年。协议甚至可能比你更老!
当时,互联网主要由大学和研究中心使用。 社区很小,许多用户彼此认识,并且都在一起合作。 互联网是一个友好,信任的地方。 安全不是很关心。
很多已经改变了。 互联网现在是无所不在的,数百万用户以许多不同的方式相互通信。 它也是一个更加敌意的地方。 可用性和开放性吸引了恶意用户,他们利用设计限制,不完全实现,错误和其他用户缺乏经验。
已经进行了若干尝试来解决这些问题:
NAT (网络地址转换)路由器。 互联网上的许多主机和路由器都使用IPv4协议。 连接到互联网的主机数量已达到IPV4的地址数量的设计限制( IPv6旨在减轻这种情况)。 NAT路由器允许LAN内的多个系统使用一个外部IP地址连接到外部世界。
个人防火墙尝试保护个人计算机免受恶意用户的攻击。
不幸的是,NAT和个人防火墙都与FTP冲突。 更糟糕的是,有些是自己的缺陷,导致FTP的其他问题。
1.2.技术背景
使FTP与大多数其他协议区别的是使用辅助连接进行文件传输。 当您连接到FTP服务器时,您实际上正在进行两个连接。 首先,建立所谓的控制连接 ,通过该连接传送FTP命令及其答复。 然后,为了传送文件或目录列表,客户端通过控制连接发送特定命令以建立数据连接 。
数据连接可以使用主动模式或被动模式两种不同的方式建立。
在被动模式下,建议(见下文),客户端将PASV命令发送到服务器,服务器将使用地址进行响应。 然后,客户端发出传输文件或获取目录列表的命令,并建立到服务器返回的地址的辅助连接。
在活动模式下,客户端打开本地机器上的套接字,并使用PORT命令将其地址告知服务器。 一旦客户端发出传输文件或列表的命令,服务器将连接到客户端提供的地址。
在这两种情况下,实际文件或列表都通过数据连接传输。
通常,建立传出连接需要在涉及的路由器/防火墙上比建立传入连接更少的配置。 在被动模式下,连接在客户端输出,在服务器端输入,在活动模式下,这是反向的。 注意,唯一的区别是建立连接。 一旦建立,该连接可用于上传或下载。
常见的网络设置可能如下所示:
在被动模式下,服务器端的路由器和防火墙需要配置为接受和转发入站连接。 然而,在客户端,只需要允许传出连接(这在大多数时间已经是这种情况)。
类似地,在活动模式中,客户端侧的路由器和防火墙需要被配置为接受和转发进入的连接。 在服务器端只允许出站连接。
由于在大多数情况下,一个服务器为许多用户提供服务,因此对于被动模式,在服务器侧配置路由器和防火墙比为活动模式中的每个单独的客户端配置客户端的路由器/防火墙要容易得多。 因此,在大多数情况下,建议使用被动模式。
1.2.1.NAT路由器
大多数宽带用户将在他们的计算机和互联网之间具有NAT(网络地址转换)路由器。 这可以是独立的路由器设备(可能是无线路由器),或者内置在DSL或电缆调制解调器中。 在NAT环境中,NAT路由器后的所有系统形成局域网(LAN) ,并且LAN中的每个系统都有一个本地IP地址(可识别为四个由点分隔的小号码,见私人地址 )。 NAT路由器本身也有一个本地IP地址。 此外,NAT路由器还具有通过其向因特网知道的外部IP地址。
示例系统可能如下所示:
内部IP地址仅在LAN内部有效,因为它们对远程系统没有意义。 想想NAT路由器后面的服务器。 想象一下,如果客户端请求被动模式,但服务器不知道NAT路由器的外部IP地址,可能会发生什么。 如果服务器将其内部地址发送给客户端,可能会发生以下两种情况:
1、如果客户端不在NAT之后,客户端将中止,因为地址无效。
2、如果客户端在NAT之后,则服务器给出的地址可能与客户端自己的LAN中的系统相同。
显然,在这两种情况下,被动模式是不可能的。
因此,如果服务器在NAT路由器之后,它需要知道被动模式下路由器的外部IP地址。 在这种情况下,服务器将路由器的外部地址发送到客户端。 客户端然后建立到NAT路由器的连接,NAT路由器又将连接路由到服务器。
1.3.防火墙
个人防火墙安装在许多系统上,以保护用户免受操作系统或其上运行的应用程序的安全漏洞。 通过互联网,恶意软件如蠕虫试图利用这些缺陷来感染您的系统。 防火墙可以帮助防止这种感染。 但是,防火墙和其他安全应用程序有时会干扰非恶意文件传输。
特别是如果使用FTP,防火墙用户可能偶尔会从防火墙看到这样的消息:
Trojan Netbus在FileZilla.exe使用的端口12345上阻止
在许多情况下,这是一个假警报。 任何程序可以选择任何想要通过互联网通信的端口。 然后,FileZilla可能会选择一个端口,这也是一个木马或其他恶意软件的默认端口由您的防火墙跟踪。 FileZilla是干净的恶意软件,只要它是从官方网站下载 。
1.4.恶意路由器,防火墙和数据破坏
一些路由器和防火墙假装是聪明的。 他们分析连接,如果他们认为他们检测到FTP,他们会静默地更改客户端和服务器之间交换的数据。 如果用户没有明确启用此功能,此行为本质上是数据破坏,并可能导致各种问题。
例如,假设NAT路由器后面的客户端尝试连接到服务器。 让我们进一步假设这个客户端不知道它在NAT之后并且想要使用活动模式。 因此,它将PORT命令与用户的本地不可路由的IP地址一起发送到服务器:
PORT 10,0,0,1,12,34
此命令指示服务器连接到端口12 * 256 + 34 = 3106上的地址10.0.0.1
NAT路由器会看到这一点,并静默地更改命令以包括外部IP地址。 同时,NAT路由器还将为FTP会话创建临时端口转发,可能在不同的端口上:
PORT 123,123,123,123,24,55
以上命令告诉服务器连接到端口24 * 256 + 55 = 6199上的地址123.123.123.123
使用此行为,NAT路由器允许未正确配置的客户端使用活动模式。
那么为什么这种行为不好呢? 基本上,如果默认情况下启用,没有明确的用户同意,它可能会导致一些问题。 FTP连接在它们最基本的形式似乎工作,但是一旦有一些偏离基本情况,一切都会失败,让用户被困住:
NAT路由器盲目地假定某些连接使用基于标准的FTP,如目标端口或初始服务器响应:
使用的协议被检测为FTP,但不能保证这是真的( 假阳性 )。 虽然不太可能,但是可以想到,FTP协议的未来修订可能改变PORT命令的语法。 修改PORT命令的NAT路由器将静默地改变它不支持的东西,从而断开连接。
路由器的协议检测可能无法识别FTP连接( 假否定 )。 说路由器只看目标端口,如果它是21,它检测它作为FTP。 因此,具有未正确配置的客户端到在端口21上运行的服务器的主动模式连接将工作,但是在非标准端口上的其他服务器的连接将失败。
显然,一旦使用加密的FTP会话,NAT路由器不再能够篡改连接,再次使用户无法理解为什么它对于普通FTP而不是对于加密的FTP工作。
说一个客户端在NAT路由器后面发送“端口10,0,0,1,12,34”。 NAT路由器如何知道客户端配置不正确? 还可能的是,客户端被正确地配置,但仅仅想要在其连接的服务器与服务器自己的本地网络中的另一个机器之间发起FXP(服务器到服务器)传输。
因此,默认情况下在NAT路由器中启用协议特定功能可能会产生重大问题。 所有这一切的解决方案是,知道你的路由器的设置,并知道路由器的配置能力,在你设置之前。 一个好的NAT路由器应该始终是完全协议无关的。 例外情况是,如果您作为用户已明确启用此功能,知道其所有后果。
虽然本节仅讨论客户端上的NAT路由器与活动模式的组合,但同样适用于NAT路由器后面的服务器和对PASV命令的回复。
如果您正在运行FileZilla 3,建议您运行网络配置向导。 它将指导您完成必要的步骤,并可以在设置后测试您的配置。
显然,如果你想连接到任何服务器,你需要告诉你的防火墙FileZilla应该允许打开到其他服务器的连接。 大多数正常的FTP服务器使用端口21,SFTP服务器使用端口22和FTP over SSL / TLS(隐式模式)默认情况下使用端口990。 但是,这些端口不是强制性的,因此最好允许传出连接到任意远程端口。
由于互联网上的许多服务器配置错误,并且不支持两种传输模式,因此建议您在结束时配置两种传输模式。
2.1.被动模式
在被动模式下,客户端无法控制服务器为数据连接选择的端口。 因此,为了使用被动模式,您必须允许到防火墙中所有端口的传出连接。
2.2.活动模式
在活动模式下,客户端打开一个套接字,并等待服务器建立传输连接。
默认情况下,FileZilla Client向操作系统询问机器的IP地址和可用端口号。 此配置只能在没有任何NAT路由器的情况下直接连接到互联网,并且已设置防火墙以允许大于1024的所有端口上的传入连接。
如果您有NAT路由器,您需要告诉FileZilla您的外部IP地址为了活动模式连接与您的本地网络外部的服务器一起使用:
如果您有固定的外部IP地址,您可以在FileZilla的配置对话框中输入。
如果您有动态IP地址,您可以授权FileZilla从特殊网站获取您的外部IP地址。 这将每次FileZilla启动时自动发生。 没有信息将提交到网站(不管FileZilla版本)。
如果有疑问,请使用第二个选项。
如果您不想允许所有端口上的传入连接,或者如果您有NAT路由器,则需要告诉FileZilla对活动模式连接使用特定范围的端口。 您必须在防火墙中打开这些端口。 如果您有NAT路由器,您需要将这些端口转发到本地机器FileZilla安装。 根据您的路由器型号,您可以转发一系列端口,或者需要单独转发所有端口。
有效端口可以是1到65535; 然而,小于1024的端口保留用于其他协议。 对于主动模式FTP,最好选择大于或等于50000的端口。 由于TCP的本质(底层传输协议),端口不能在每次连接后立即重用。 因此,端口的范围不应该太小,以防止多个小文件的传输失败。 在大多数情况下,50个端口的范围应该足够了。
设置服务器与设置客户端非常相似,主要区别是主动和被动模式的角色相反。
常见的错误,特别是具有NAT路由器的用户,是在测试服务器。 如果您位于本地网络中,则只能使用服务器的本地IP地址进行测试。 使用内部的外部地址可能会失败,并且可能会发生以下情况之一:
它实际上工作(令人惊讶 - 它可能意味着其他的东西是错误的…)
路由器阻止从内部访问自己的外部地址,因为它被识别为可能的攻击
路由器将连接转发到您的ISP,然后阻止它作为可能的攻击
即使测试工作,也不能保证外部用户可以真正连接到您的服务器和传输文件。 测试服务器的唯一可靠方法是尝试从LAN外部的外部系统进行连接。
3.1活动模式
确保FileZilla服务器允许建立到任意端口的传出连接,因为客户端控制使用哪个端口。
在连接的本地端,FileZilla服务器尝试使用比控制连接少一个端口(例如端口20,如果服务器监听端口21)。 然而,这并不总是可能的 - 所以不要依赖它。
3.2 被动模式
服务器配置与活动模式的客户端配置非常相似。 在被动模式下,服务器打开一个套接字,并等待客户端连接到它。
默认情况下,FileZilla Server向操作系统询问机器的IP地址和空闲端口号。 此配置只能在没有任何NAT路由器的情况下直接连接到互联网,并且已将防火墙设置为允许大于1024的所有端口上的传入连接。
如果您有NAT路由器,您需要告诉FileZilla服务器您的外部IP地址或被动模式连接将无法与您的本地网络外的客户端一起工作:
如果您有固定的外部IP地址,您可以在FileZilla服务器的配置对话框中输入。
如果您有动态IP地址,您可以让FileZilla Server自动从特殊网站获取您的外部IP地址。 除了您的FileZilla Server版本,没有信息将提交到该网站。
如果有疑问,请使用第二个选项。
如果您不想允许所有端口上的传入连接,或者如果您有NAT路由器,则需要告诉FileZilla Server使用特定范围的端口用于被动模式连接。 您必须在防火墙中打开这些端口。 如果您有NAT路由器,则需要将这些端口转发到安装FileZilla Server的本地计算机。 根据您的路由器型号,您可以转发一系列端口,或者需要单独转发所有端口。
有效端口可以从1到65535,但是小于1024的端口保留用于其他协议。 对于被动模式FTP,最好选择ports> = 50000。 由于TCP的本质(底层传输协议),端口不能在每次连接后立即重用。 因此,端口的范围不应该太小,或者多个小文件的传输可能失败。 在大多数情况下,50个端口的范围应该足够了。
以下是几个疑难解答建议:
不幸的是,许多个人防火墙和消费者路由器有缺陷或在某些情况下甚至积极破坏FTP(例如SMC Barricade V1.2 )。 首先,和所有的软件一样,你应该保持一切更新。 这包括防火墙软件以及路由器的固件版本。
如果这没有帮助,您可能想尝试卸载防火墙,看看会发生什么。 简单地禁用防火墙可能无法正常工作,因为某些防火墙无法完全禁用。 特别是,大多数防火墙安装虚拟设备驱动程序,除非通过卸载它们,否则无法禁用。 还检查隐藏的防火墙。 病毒扫描程序等程序通常也具有防火墙功能。
如果可能,尝试直接连接到互联网,没有路由器,将您的计算机直接连接到您的调制解调器。 如果您有组合调制解调器/路由器设备,请尝试将其置于桥接模式以禁用路由部分。
如果您正在尝试设置服务器,它在您的LAN内正常工作,但无法从外部访问,请尝试更改侦听端口。 一些ISP不喜欢他们的客户主机服务器,他们可能阻止端口与数字在1024以下。
如果您在默认端口21上托管FTP服务器,则可能会出现另一个问题。在您的连接的ISP端可能有一个防火墙,这可能会改变PASV命令的端口。 尝试为您的FTP服务器使用另一个非默认端口。
如果您遇到“无法打开数据连接”在随机(即,ftp客户端可以连接到ftp服务器没有问题,许多连接,直到遇到这个问题),一个可能的原因可能是,您的客户端PC防病毒软件被配置为阻止某些端口范围上的输出连接。 当您的ftp连接以pasv模式运行时,客户端出站端口被随机选择,其中一些随机选择的端口可能被防病毒软件阻止。 要识别此问题,请在客户端上阅读您的防病毒日志。 一般来说,任何可以阻止某些范围的输出端口(例如PC防火墙)的软件都可能导致类似的FTP问题。
4.1 大文件超时
如果您可以传输小文件没有任何问题,但大文件的传输以超时结束,客户端和服务器之间存在一个破碎的路由器和/或防火墙,并导致一个问题。
如上所述,FTP使用两个TCP连接:控制连接提交命令和接收答复,以及用于实际文件传输的数据连接。 这是FTP的性质,在传输期间,控制连接保持完全空闲。
TCP规范不对连接可以保持空闲的时间量设置限制。 除非明确关闭,否则假定连接无限期地保持活动。 然而,许多路由器和防火墙在一段时间后自动关闭空闲连接。 更糟糕的是,他们经常不通知用户,而是只是静静地删除连接。 对于FTP,这意味着在长传输期间,控制连接可能会被丢弃,因为它被检测为空闲,但不会通知客户端和服务器。 因此,当所有数据被传送时,服务器假定控制连接是活动的,并且它发送转移确认答复。 同样,客户端认为控制连接是活动的,它等待来自服务器的应答。 但是由于控制连接被丢弃,没有通知,回复永远不会到达,最终连接将超时。
为了尝试解决这个问题,TCP规范包括在空闲TCP连接上发送保活分组的方式,以告诉所有相关方连接仍然活着并且需要。 然而,TCP规范还使得非常清楚的是,这些保活分组不应该比每两个小时一次更频繁地发送。 因此,通过增加对网络延迟的容忍,连接可以保持空闲长达2小时4分钟。
然而,许多路由器和防火墙丢弃已经空闲不到2小时4分钟的连接。 这违反了TCP规范( RFC 5382使此特别清楚)。 换句话说,所有过早丢弃空闲连接的路由器和防火墙不能用于长FTP传输。 不幸的是,消费级路由器和防火墙厂商的制造商不关心规格…所有他们关心的是得到你的钱(只提供勉强工作最低质量的垃圾)。
要解决这个问题,您需要卸载受影响的防火墙,并用更好质量的路由器替换故障路由器。
如果您在将FileZilla服务器设置为在Windows防火墙后运行(特别是在“列表”上失败,并且客户端收到“无法接收目录列表”错误)时出现问题,则必须将FileZilla服务器应用程序添加到Windows防火墙的例外列表。 为此,请按照下列步骤操作:
在控制面板下打开Windows防火墙。
如果使用Vista,请单击“更改设置”
选择“例外”选项卡。
点击“添加程序…”
不要从列表中选择“FileZilla服务器接口”,而是单击“浏览…”
找到您安装FileZilla服务器的目录(通常为“C:\ Program Files \ FileZilla Server \”)
双击或选择“FileZilla server.exe”,然后按打开(再次,不是“FileZilla Server Interface.exe”)
从列表中选择“FileZilla server.exe”,然后单击“确定”
验证“FileZilla server.exe”是否添加到例外列表中,并在其旁边的框中有一个复选标记
按“确定”关闭窗口
使用管理权限打开命令提示符,然后执行以下命令: netsh advfirewall set global StatefulFTP disable
被动模式现在应该工作。 如果您仍然无法连接(从其他计算机或网络外部),请检查您的路由器设置,或尝试在位于例外选项卡的Windows防火墙设置中添加端口号。
请参阅Microsoft kb文章931130关于运行FileZilla与启用“路由和远程访问”或“应用程序层网关”服务。 http://support.microsoft.com/kb/931130
如果您的操作系统是Windows 8,这些是说明 - 该接口与上面使用Windows防火墙设置FileZilla服务器中描述的略有不同。
在Windows 8下,您必须通过Windows防火墙允许FileZilla Server应用程序。 为此,请按照下列步骤操作:
将鼠标移到右上角并单击放大镜搜索图标,然后在搜索框中键入“firewall”(不带双引号),然后单击“设置”文本。 或者,按住键盘上的Windows徽标键,然后按I键,选择文本“控制面板”并按Enter键,在右上角的搜索控制面板区域中键入“防火墙”。 无论在哪种情况下,现在点击应该出现的“通过Windows防火墙允许应用程序”。
点击“更改设置”,新的按钮应显示为“允许其他应用…”
点击“允许其他应用…”
应该会出现一个名为“添加应用程序”的窗口; 在这一步不做任何事情。
不要从列表中选择“FileZilla服务器接口”,而是单击“浏览…”
找到您安装FileZilla服务器的目录(通常为“C:\ Program Files \ FileZilla Server \”)
双击或选择“FileZilla server.exe”,然后按打开(再次,不是“FileZilla Server Interface.exe”)
您的鼠标指针现在应该返回到“添加应用程序”窗口; 向下滚动列表并选择“FileZilla server.exe”,然后单击“添加”。
您的鼠标指针现在应该返回到Windows防火墙允许的应用程序窗口; 验证“FileZilla server.exe”是否已添加到允许的应用程序和功能列表中,并在“专用”框或“公共”框中有复选标记。 如果您希望服务器只能从本地网络访问,请选择私人,如果您希望服务器可以从本地网络之外访问(可能包括无线连接到您的网络的客户端),请选择公共。
按“确定”关闭Windows防火墙窗口
使用管理权限打开命令提示符,然后执行以下命令: netsh advfirewall set global StatefulFTP disable
如果您仍有问题,请参阅上面的设置FileZilla Server或使用Windows防火墙设置FileZilla Server或搜索Microsoft知识库以获取防火墙相关文章的建议。