热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

浅谈防火墙对FTP的影响及故障排除分析

这篇文章主要介绍了浅谈防火墙对FTP的影响及故障排除分析,需要的朋友可以参考下

FTP是常见的基于TCP的网络服务,它使用了两个TCP连接来建立逻辑通信信道,即控制连接和数据连接。当客户端与服务器建立一个FTP会话时,使用TCP创建一个持久的控制连接以传递命令和应答。当发送文件和其它数据传输时,它们在独立的TCP数据连接上进行传递,这个连接根据需要创建和拆除。

更为复杂的是,FTP标准指定了创建数据连接的两种不同方法,即正常(主动)数据连接和被动数据连接。FTP的控制连接总是由客户端首先发起的,主动数据连接是由服务器端发起的,被动数据连接是由客户端发起的。

成功建立控制连接后,在进行主动连接时,客户端发送PORT命令,其中内嵌了地址和端口信息,以告知服务器进行连接,然后服务器打开默认端口20建立到客户端已告知地址和端口的数据连接。在进行被动连接时,客户机使用PASV命令告诉服务器等待客户机建立数据连接,服务器响应,告诉客户机为了数据传输它应该使用服务器上的什么端口(随机打开)。这种工作机制带来了一个严重的问题:在FTP的命令(PORT或PASV)或对它们的回答中传递IP地址及端口号与网络分层机制严重冲突,在FTP客户端与服务器的通信信道之间的网关设备(防火墙或路由器)上启用了NAT功能的情况下将出现连接性问题。

防火墙对于像FTP这样的多端口连接的TCP应用,其影响是深远的,在复杂的网络环境中,更是由于设备、软件的多样性可能导致不可预知的问题。作为一名网络管理员,深入了解防火墙和FTP的工作原理及其在NAT环境下防火墙对FTP的影响,对于选择FTP服务软件及安装、部署、管理及维护FTP服务和实际工作中排除FTP应用故障是大有裨益的。本文就以一个在实际环境中比较常见的FTP部署和应用拓扑为例,来详细解读防火墙(启用了NAT功能)对FTP的影响。如有不当之处,敬请指正。

一、网络拓扑图

windows_ftp_config_1

二、主动模式的连接分析

如本例中网络拓扑所示,IP为192.168.1.1客户端计算机打开一个可用的TCP端口1025,经过其前端的防火墙进行NAT转换成地址1.1.1.1和端口1025后建立到目标地址为2.2.2.2的21端口的连接,然后服务器前端的防火墙将此连接信息传递到服务器172.16.6.1的21端口,成功建立FTP控制连接。

服务器则经由这个已经建立的逻辑连接通道返回数据包,与客户端进行交互。接着,客户端发出PORT指令,在指令中嵌入了地址信息(IP:192.168.1.1,Port:1026),告知服务器用于数据连接,并打开端口1026,等待服务器连接。当承载PORT指令的数据包到达客户机前端的防火墙时,由于NAT的缘故,在成功创建NAT表项,改写数据包的IP和TCP端口信息后:

如果此时防火墙不能识别并检查此连接是FTP应用,便不能对PORT指令中嵌入的地址和端口信息进行改写,则将此数据包通过先前已建立的控制连接通道传递到服务器后,服务器则打开20端口,将建立到192.168.1.1的1026端口的数据连接。

显然,此连接数据包要么被其前端的防火墙丢弃,要么在流入因特网后立刻被丢弃,永远无法到达客户端。在这种情况下,客户端一直处在控制连接阶段发送含有PORT指令的数据包,以便建立数据连接;而服务器则在打开了20端口后,一直尝试建立到客户端的数据连接,但始终收不到应答。

直接的结果就是:客户端成功连接了FTP服务器,却无法进行数据传输。这里可能还包含一个隐藏的安全威胁:如果恰巧192.168.1.1对于服务器主机来说是直接可达的,则此时服务器便将数据包发送到这台计算机,在这两台主机之间产生莫名的数据流。其他可能更隐蔽、更不好的情况,笔者不再做假设论述了。

如果此时防火墙能支持对FTP应用进行审查和跟踪,即能识别PORT指令中的内容,就将其中嵌入的地址信息改写成(IP:1.1.1.1,PORT:1026)并动态打开1026端口,并建立新的NAT转换表项,等待连接,则当服务器收到PORT指令后,打开20端口,建立到1.1.1.1上1026端口的连接,成功交互后,便能进行数据传输了。

三、被动模式的连接分析

控制连接建立后,客户端发出的PASV指令到达服务器,服务器则随机打开一个可用的TCP端口,并将地址和端口信息(IP:172.16.6.1,Port:50000)返回给客户端,告知客户端利用这些信息进行数据连接。当包含服务器地址信息的这个数据包到达其前端的防火墙时:

如果防火墙不能识别并检查此数据包的应用层数据,无法判定它是FTP的PASV指令的返回包,并对其中嵌入的地址信息进行重写,则当此数据包返回到客户端时,客户端将随机打开端口3000,以目的地址172.16.6.1、端口50000来进行数据连接,同理,此连接数据包永远不能到达服务器端。

这种情况下,客户端将一直尝试建立数据连接,却总是不能收到应答。这里可能包含的隐藏安全威胁,如前所述。

如果防火墙能对FTP应用进行审查和跟踪,并将返回包中嵌入的服务器地址信息进行重写,即转换成(IP:2.2.2.2,Port:50000),然后建立新的NAT表项,动态打开50000端口,等待连接。则此返回包到达客户端时,客户端将随机打开端口3000,以目的地址2.2.2.2、端口50000来新建连接,便能成功建立数据连接。

根据以上分析,为成功进行FTP数据传输,主动模式下要求客户机前端的防火墙在启用NAT后能对FTP应用进行审查和跟踪,识别并改写PORT指令中的客户端地址信息;被动模式下则要求服务器前端的防火墙能改写服务器响应PASV指令后返回数据包中的服务器地址信息。

当然,为保险起见,为保证FTP应用的正常使用,建议两端的防火墙都需要支持对FTP进行识别和内容审查。

四、网络防火墙与FTP

大多数网管设置防火墙的默认访问控制策略是:允许从内部到外部的一切流量,禁止从外部到内部的一切流量。

就FTP应用来说,为了简化防火墙策略的配置又兼顾安全策略要求,客户机选择被动模式进行数据连接较好,不需要对其前端的防火墙设置特别的访问控制策略,但要求服务器前端的防火墙能动态打开数据连接所需的随机端口;服务器端则选择主动连接较好,为允许客户端的访问,其前端防火墙的访问控制策略仅需要显式对外开放21端口即可,但需要客户机前端的防火墙能动态打开数据连接所需的端口。

从方便使用的角度考虑,既然提供FTP服务,就要配置好服务器前端的防火墙,使其访问控制策略能支持两种模式下的FTP服务正常工作。

如果客户机前端的NAT设备为路由器,不是防火墙,并不能审查和跟踪FTP应用,从前面的分析可以推断出,主动模式下肯定存在连接性问题,需要以被动方式建立数据连接才能成功使用FTP服务。

如果FTP控制端口非默认,而是定制的TCP端口(比如2121),在这种情况下,服务器前端的防火墙通过配置命令显式指示FTP的控制端口,便能进行审查和跟踪。但客户机前端的防火墙即使其能识别默认端口下的FTP应用,此时也会把控制端口非21的FTP服务当作一般的TCP应用对待,这种情形下,便不能改写主动模式下的客户端地址端口信息,导致服务器在建立数据连接时失败,但客户端使用被动连接模式能正常工作。

综上所述,客户端使用被动方式连接FTP服务器是最恰当的,能最大限度地降低连接性问题。同时降低了对客户机前端防火墙备的要求,不需要像主动方式那样动态开放允许输入的随机端口,把可能的安全威胁推给了服务器端。这或许是微软的IE浏览器(资源管理器)默认设置使用被动方式的原因。如图表2所示。另外需要注意的,在Windows命令行下,FTP默认是使用主动方式进行数据连接的。

windows_ftp_config_2

五、主机防火墙与FTP

如果将FTP服务器架设在Windows Server 2008上,由于它内置Windows防火墙,而且默认已经启用,所以客户端建立到这台FTP服务器的控制连接便会被封锁,此时需要在防火墙上开放对TCP 21端口的传入连接。

被动模式下,由于服务器通过控制信道将用来监听客户端请求的端口号是随机产生的,此时需要在防火墙上开放的传入连接的端口也是随机的。由于Windows防火墙不能像网络防火墙那样根据需要动态打开和关闭FTP服务要求的随机端口,所以需要静态开放全部可能的随机端口。

Windows Server 2008默认的动态端口范围是49152-65535,而Windows防火墙的例外开放规则只能针对单一端口来开放,要开放49152-65535这个范围内的一万多个端口,非常不切实际,更是会给运行FTP服务器的主机带来严重的安全威胁。

所幸的是,基于IIS7.0建立的FTP服务器允许将端口号固定在自行指定的一个范围中,如50000-50005,此时便只需要开放这一小段范围的端口即可,大大提升了安全性和配置Windows防火墙的效率。如果服务器上部署的是第三方防火墙,则需要慎重考虑如何设置使之能安全保障FTP服务的正常运行。

小编补充:

因为现在大家服务器基本上都是用 FileZilla Server  FTP服务器,他的例外方法就是通过添加端口或FileZilla server.exe为例外,最近因为针对 FileZilla Server 的提权

对于利用方法大家可以看下这篇文章(https://www.jb51.net/books/552915.html),那么就需要屏蔽本地14147端口的对外连接(使用防火墙或ip安全策略)。


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文详细介绍了 BERT 模型中 Transformer 的 Attention 机制,包括其原理、实现代码以及在自然语言处理中的应用。通过结合多个权威资源,帮助读者全面理解这一关键技术。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
author-avatar
小嘿嘿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有