FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF

ftp,aspf · 浏览次数 : 0

小编点评

## ASPF功能配置详解 **1. 服务器端配置** * 配置安全策略,允许客户端访问服务器的21端口。 * 配置server-map表,存储客户端使用的端口信息。 **2. 客户端端配置** * 在客户端配置安全策略时,仅配置允许客户端访问服务器的21端口的安全策略。 * 当客户端访问服务器yyyy端口的报文到达FW后,FW会分析报文中的参数,认为这是新的连接请求。 * 如果FW没有配置允许该端口的安全策略,该报文无法通过FW,导致数据通道建立失败。 **3. ASPF实现过程** * 当客户端使用随机端口xxxx向服务器的21端口发起连接请求时,FW会分析报文中的参数,认为这是新的连接请求。 * 根据server-map表中存储的客户端使用的端口信息,FW根据客户端的IP地址和端口号创建Server-map表项。 * Server-map表项类似这样:`ftp-data VPN:public->public 1.1.1.1:aaaa --> 2.2.2.2:yyyy端口`,其中`yyyy`代表客户端使用的端口号。 * 客户端向服务器端发起的数据连接请求,数据通道将通过Server-map表中找到对应端口的服务器,建立连接。 **4. 问题和解决方案** * 配置安全策略只允许客户端访问服务器的21端口,但客户端试图使用yyyy端口发起连接。 * FW会分析报文,认为这是新的连接请求,并根据server-map表中存储的端口信息,拒绝该连接。 * 客户端无法建立数据通道,无法访问FTP服务器。 **5. 总结** ASPF功能通过分析应用层信息中的IP地址和端口号,提前预测客户端的连接行为,根据该信息创建Server-map表,实现数据通道的建立。如果只配置了允许客户端访问服务器的21端口的安全策略,FW会拒绝所有数据连接,导致用户无法访问FTP服务器。

正文

防火墙对FTP的影响 ASPF

多通道协议

应用层程序有些使用的是单通道协议,有些使用的是多通道协议。

  • 单通道协议

    例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议;

    防火墙一般都需要配置精细的安全策略对数据进行防护,针对这种单通道协议,例如http,只需要放行客户端的随机端口到服务器端的80端口就可以了,比较简单。

  • 多通道协议

    例如FTP协议,整个协议交互过程中,客户端和服务器端使用了两个独立的连接,控制连接和数据连接,控制连接服务器端使用了固定的端口21,但是数据连接则使用了随机的端口;

    防火墙针对这种多通道协议的数据连接则较难写安全策略,例如FTP的被动模式,客户端和服务器端的端口都是随机的,那防火墙就很难写精细的安全策略放行此类数据。

    常见的多通道协议有FTP,SIP,H323,RSTP,DNS,MSN,QQ,WeChat等;

ASPF和Server-map

ASPF(Application Specific Packet Filter,应用层的包过滤)是一种针对应用层的包过滤技术,也称为基于状态的报文过滤。

防火墙的ASPF技术配合server-map表项就用于解决多通道协议的数据连接策略,以FTP为例,上面已经了解,FTP有控制连接和数据连接,在控制连接上服务器端使用固定的端口21,防火墙是可以定义策略的,允许客户端的任意端口访问服务器端的TCP21端口即可,后续控制连接的其他报文会被识别为此控制连接的后续报文,允许通过,这样FTP的控制连接就可以正常建立了;

对于数据连接的主动模式,如果服务器端使用固定端口20的情况下,需要放行服务器端20端口到客户端任意端口的报文,对于客户端在防火墙内部的情况,这种策略是比较危险的,因为一般是不允许外部主动向内部发起访问的,而且对于服务器使用随机数据端口的场景,防火墙的策略则需要放行服务器端的任意端口到客户端的任意端口,显示这对于防火墙策略就更宽松了,很难达到防护的效果;

对于数据连接的被动模式,因为客户端的随机端口访问服务器端的随机端口,如果客户端在防火墙内部,则还可以写一下,但是策略依旧是很宽松的,对于客户端在防火墙外侧的场景,要放行外部客户端的任意端口访问内部服务器的任意端口,防火墙策略一般是不允许的。

总之,通过上面的描述可知,防火墙基于会话的安全策略机制在FTP这种多通道协议的场景是非常不友好的,如果写的严格一些,就会出现FTP的控制连接可以建立,但是数据无法传输的情况。那要如果解决呢?这就需要通过防火墙的ASPF机制和server-map结合来解决上述问题了。

还是以FTP为例,FTP的数据连接使用端口虽然是随机的,但是通过FTP原理的描述,我们知道这个随机端口是在控制协议中确定出来的,例如FTP主动模式的PORT命令和被动模式的PASV命令,都是为了确定数据连接中客户端的端口和服务器端的端口,而ASPF会监控FTP控制连接的报文,获取到PORT命令或PASV命令中的地址和端口信息,自动将这个信息写入到防火墙的Server-map表中,形成一条Server-map表项,后续的数据报文就会匹配到该表项,就无需再去匹配防火墙的策略和会话表,直接放行后续数据,这样数据连接就可以正常建立,而防火墙的安全策略只需要写第一个控制连接的报文即可。

防火墙的Server-map表如下,实现的就是自动生成的主动模式下的数据连接会话:

image

FTP主动模式下防火墙的实现

以FTP协议的主动模式(服务器主动访问客户端)为例,FW检测PORT命令报文的应用层信息,将应用层携带的IP地址和端口记录在Server-map表中。

FTP主动模式下,客户端使用随机端口xxxx向服务器的21端口发起连接请求建立控制通道,然后使用PORT命令协商两者建立数据通道的端口号,协商出来的端口是yyyy。然后服务器主动向客户端的yyyy端口发起连接请求,建立数据通道。数据通道建立成功后再进行数据传输。

在配置安全策略时,如果只配置了允许客户端访问服务器的21端口的安全策略,即控制连接能成功建立。但是当服务器访问客户端yyyy端口的报文到达FW后,对于FW来说,这个报文不是前一条连接的后续报文,而是代表着一条新的连接。要想使这个报文顺利到达FTP客户端,FW上就必须配置了安全策略允许其通过,如果没有配置服务器到客户端这个方向上的安全策略,该报文无法通过FW,导致数据通道建立失败。结果是用户能访问服务器,但无法请求数据。

如果通过安全策略解决此问题,数据通道使用的端口是在控制通道中临时协商出来的,具有随机性,无法精确预知,所以只能开放客户端的所有端口,这样就会给客户端带来安全隐患。ASPF功能正是为了解决此问题。

下图显示了主动模式下ASPF和server-map表的实现过程,由于PORT命令的应用层信息中携带了客户端的IP地址和向服务器随机开放的端口,FW通过分析PORT命令的应用层信息,提前预测到后续报文的行为方式,根据应用层信息中的IP和端口创建Server-map表。服务器向客户端发起数据连接的报文到达FW后命中该Server-map表项,不再受安全策略的控制。

image

server-map表项类似这样:

ftp-data  VPN:public->public  2.2.2.2:20 --> 1.1.1.1:yyyy

FTP被动模式下防火墙的实现

FTP被动模式下,客户端使用随机端口xxxx向服务器的21端口发起连接请求建立控制通道,然后使用PASV命令协商两者建立数据通道的端口号,协商出来的端口是yyyy。然后客户端主动向服务器的yyyy端口发起连接请求,建立数据通道。数据通道建立成功后再进行数据传输。

在配置安全策略时,如果只配置了允许客户端访问服务器的21端口的安全策略,即控制连接能成功建立。但是当客户端访问服务器yyyy端口的报文到达FW后,对于FW来说,这个报文不是前一条连接的后续报文,而是代表着一条新的连接。要想使这个报文顺利到达服务器,FW上就必须配置了安全策略允许其通过,如果没有配置客户端到服务器的yyyy端口的安全策略,该报文无法通过FW,导致数据通道建立失败。结果是用户能访问FTP服务器,但无法请求数据。

下图显示了主动模式下ASPF和server-map表的实现过程,由于PASV命令的应用层信息中携带了数据连接中客户端使用的ip地址和端口号,防火墙通过分析PASV命令中的参数,提前预测到后续报文的行为方式,根据应用层信息中的IP和端口创建Server-map表。后续客户端向服务器端发起的数据连接就会命中该server-map表项,不用查询防火墙的策略表就可以放行后续报文。

image

server-map表项类似这样:

ftp-data  VPN:public->public  1.1.1.1:aaaa --> 2.2.2.2:yyyy

端口识别

上面的ASPF+Server-map实现防火墙透传FTP报文的需求是针对标准的FTP灯多通道协议进行识别的,一般只有控制连接的端口号为TCP21才会被识别为FTP报文,进而被ASPF进行分析,但是在生产中我们有时出现安全考虑会把FTP是端口使用非标准端口,这就会导致ASPF无法识别这是FTP协议,无法生产数据连接的Server-map表现。

此时我们需要额外配置端口识别功能,让ASPF知道这就是FTP报文,进行数据连接的端口分析,使用方式如下:

  • 华为/华三

    # 把匹配acl 2000的报文,建立端口号31到FTP协议的映射
    acl 2000
     rule permit source 10.1.2.0 0.0.0.255
     exit
    port-mapping FTP port 31 acl 2000 
    

迈普ASPF配置示例

  • 需求:Device为连接内部网络与外部网络的边界设备,内网中的本地用户PC访问公网上的ftp服务器。在Device上配置ASPF策略,将设备报文入接口Gi0/2/0加入安全级别高的安全域,出接口Gi0/2/1加入安全级别低的安全域,ASPF和安全域协同工作,安全域之间的报文由安全策略进行安全检查,实现ftp多通道协议检测功能。

  • 拓扑:

image

  • 配置步骤:

    • 配置ASPF策略开启ftp数据通道检测功能。

      Device#configure terminal 
      Device(config)#aspf policy 1
      Device(config-aspf-policy)#detect ftp
      Device(config-aspf-policy)#exit
      
    • 配置安全策略和安全域。

      #配置源安全域对象zone1,目的安全域对象zone2。
      Device(config)#security zone name zone1
      Device(config-security-zone)#import interface gigabitethernet 0/2/0 
      Device(config-security-zone)#priority 80
      Device(config-security-zone)#exit
      Device(config)#security zone name zone2
      Device(config-security-zone)#import interface gigabitethernet 0/2/1
      Device(config-security-zone)#priority 60
      Device(config-security-zone)#exit
      
      #配置安全策略匹配源安全域zone1和目的安全域zone2,动作action为inspect aspf policy。
      Device(config)#security policy 1
      Device(config-security-policy)#match source security-zone zone1
      Device(config-security-policy)#match destination security-zone zone2
      Device(config-security-policy)#action inspect aspf-policy 1
      Device(config-security-policy)#exit
      
    • 检验结果。

      #查看策略号为1的ASPF配置信息。
      Device#show aspf policy 1
      ASPF policy configuration:
      Policy Id: 1
      Policy description: 
      TCP SYN packet check: Disable
      ICMP error message check: Disable
      Inspected protocol:
      ftp
      
      #内部私网PC从安全级别高的安全域的接口向安全级别低的安全域的接口的服务器采用PORT方式进行ftp传送数据,上传、下载文件成功,数据通道预期连接建立正确。
      Device#show connection ipv4 table lpu 0
      Device0: LPU 0, IPV4 connection table
      Protocol  Source:port               Destination:port/other    State          Lifetime  Vrf
      --------  ---------------------     ---------------------     ----------     --------  --------
      TCP       [1.1.1.2]:4945            [203.18.10.2]:21          tcp-time-wait    1       global
      TCP       [203.18.10.2]:20          [1.1.1.2]:4946            tcp-time-wait    1       global
      
      #内部私网PC从安全级别高的安全域的接口向安全级别低的安全域的接口的服务器采用PASV方式进行ftp传送数据,上传、下载文件成功,数据通道预期连接建立正确。
      Device#show connection ipv4 table lpu 0
      Device0: LPU 0, IPV4 connection table
      Protocol  Source:port               Destination:port/other    State          Lifetime  Vrf
      --------  ---------------------     ---------------------     -----------    --------  --------
      TCP       [1.1.1.2]:49320           [203.18.10.2]:21          tcp-time-wait    1      global
      TCP       [1.1.1.2]:38805           [203.18.10.2]:11656       tcp-time-wait    1      global
      
      #从外部网络发起各种连接的报文无法进入内部网络。
      

与FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF相似的内容:

FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF

防火墙对FTP的影响 ASPF 多通道协议 应用层程序有些使用的是单通道协议,有些使用的是多通道协议。 单通道协议 例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议; 防火墙一般都需要配置精细的安全策略对数据进行防护,

玩转服务器之数据传输篇:如何快速搭建FTP文件共享服务器

FTP服务(File Transfer Protocol,FTP)是最早应用于主机之间数据传输的基本服务之一,是目前使用最广泛的文件传送协议。FTP文件共享服务器在日常办公中可以实现多人之间文件的传递和共享,极大提高协同办公的效率

[转帖]配置ftp连接对象存储bucket子目录的方法

https://developer.jdcloud.com/article/1838 配置ftp连接对象存储bucket子目录的方法 京东云技术交付部 2021-01-27 IP归属:未知 44160浏览 收藏 云主机 云计算 公有云

C#的多线程UI窗体控件显示方案 - 开源研究系列文章

上次编写了《LUAgent服务器端工具》这个应用,然后里面需要新启动一个线程去对文件进行上传到FTP服务器,但是新线程里无法对应用主线程UI的内容进行更改,所以就需要在线程里设置主UI线程里控件信息的方法,于是就有了此博文。此文记录的是一种高级用法。 为了实际的使用,笔者将线程操作放在独立的类当中,

云服务器从阿里云迁移到华为云,FTP服务器的一些设置处理

由于一些特殊原因,计划从阿里云上把ECS服务器的相关资源资源迁移到华为云上,为了保险起见,先申请一个月的华为云ECS服务器进行测试,首先就是搭建FTP服务器进行文件的上传处理,在使用FileZilla Server搭建服务器的时候,出现一些设置上的问题,爬坑了一小段时间才顺利跳出,顺便总结分享一下。...

Java SpringBoot FTP 上传下载文件

POM 添加依赖 cn.hutool hutool-all 5.3.7

Python使用socket的UDP协议实现FTP文件服务

用Python的socket,使用UDP协议实现一个FTP服务端、FTP客户端,用来实现文件的传输。在公司内网下,可以不适用U盘的情况下,纯粹使用网络,来实现文件服务器的搭建,进而实现文件的网络传输。同时用来理解Python的socket使用。

Docker容器共享磁盘

需求:.NET程序需要监控一个FTP上的文件变化并进行操作,在linux上使用原生目录时,不管怎么切换后台运行,总是会在一段时间运行后死掉。 方案:远程也不好debug,想了一下,干脆直接使用docker-compose运行,设置死了自动重启(restart=always)就完事了。 由于FTP与.

基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者合一处理

在前面介绍的随笔《基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传》中介绍过在文件上传处理的过程中,整合了本地文件上传和基于FTP方式的上传文件的处理整合。本篇随笔继续介绍文件上传的处理,基于选项模式【Options】方式整合基于阿里云OSS对象存储的处理方式。

【Azure 应用服务】部署WAR包到App Service访问出现404错误的解决方式

问题描述 在Linux的App Service上,通过FTP把war文件和HTML静态文件上传到wwwroot目录下,静态文件访问成功,但是java应用中的请求都返回404错误 问题解决 因为FTP上传文件只是把文件放在 WWWROOT 目录中,并没有部署war包成功。如果要部署war包,需要使用w