防火墙对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表如下,实现的就是自动生成的主动模式下的数据连接会话:

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表项,不再受安全策略的控制。

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表项,不用查询防火墙的策略表就可以放行后续报文。

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多通道协议检测功能。

  • 拓扑:

  • 配置步骤:

    • 配置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)的更多相关文章

  1. FTP主动模式和被动模式

    FTP主动模式和被动模式 FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这两个端口是21(命令端口)和20(数据端口 ...

  2. Ftp主动模式和被动模式以及java连接ftp模式设置

    Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...

  3. FTP 主动模式 与被动模式

    今天在被电信运营商给的没有内网ip被nat后的内网ip访问我的ftp服务器时出现了,连接被关闭的错误,经过多番查询发现问题原因是因为NAT内网ip没有被有效地转换为外网ip,也即是说NAT对ftp协议 ...

  4. [转] FTP主动模式和被动模式的区别

    转自原文FTP主动模式和被动模式的区别 基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常2 ...

  5. [服务]ftp主动模式和被动模式

    经常忘记这个东西.于是总结下这东西感受下这个协议. FTP连接方式 控制连接:标准端口为21,用于发送FTP命令信息 数据连接:标准端口为20,用于上传.下载数据 数据连接的建立类型: 主动模式:服务 ...

  6. FTP主动模式与被动模式,及java FTPClient模式设置

    FTP的主动模式与被动模式 FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向 ...

  7. ftp主动模式与被动模式交互过程分析

    1.相关介绍 1.1主动模式和被动模式 主动模式:服务端通过指定的数据传输端口(默认20),主动连接客户端提交的端口,向客户端发送数据. 被动模式:服务端采用客户端建议使用被动模式,开启数据传输端口的 ...

  8. java ftp主动模式与被动模式

    首先介绍一下主动模式与被动模式: 1.PORT(主动模式) ftpClient.enterLocalActiveMode(); PORT中文为主动模式,工作的原理:FTP客户端连接到FTP服务器的21 ...

  9. FTP主动模式和被动模式的区别

    基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...

  10. 【转】FTP主动模式和被动模式的比较

    总是记不住FTP主动和被动模式的区别.放在这里,以备日后查阅.   FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这 ...

随机推荐

  1. sql分页遍历出现重复数据原因与解决方案

    1. 问题描述 有同时反馈,直接通过如下的sql进行分页查询,分页会出现重复数据,于是乎我专门查了相关了资料,整理了一下. -- 根据sort字段对dbname进行排序,每五百条数据一页 SELECT ...

  2. C++ 中的 volatile 和 atomic

    C++ 中的 volatile 和 atomic 0. TL;DR std::atomic 用于多线程并发场景,有两个典型使用场景: 原子操作:对 atomic 变量的操作(读/写/自增/自减)仿佛受 ...

  3. jQuery获得或设置内容和属性、添加属性 append和after的区别

    来自w3school 在线教程 jQuery获得或设置内容和属性 text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设 ...

  4. #01背包#洛谷 4161 [SCOI2009]游戏

    题目 将 \(n\) 拆成若干个正整数的和, 问这些正整数的LCM有多少种 \(n\leq 10^3\) 分析 考虑这个\(LCM\)一定是1或者由若干个质数的指数幂相乘得到的, 那么可以设\(dp[ ...

  5. #Trie#洛谷 7717 「EZEC-10」序列

    题目 分析 考虑这些关系可以用若干个连通块表示,而可以用一个数异或边权表示, 那么每个连通块有一个生成树,而判断非树边是否合法即可, 那么问题就转换成有多少个数异或任意一个元素均不大于\(k\), 把 ...

  6. OpenHarmony设备环境查询:Environment

      开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询. Environment是ArkUI框架在应用程序启动时创 ...

  7. MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

    使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序. ORDER BY 关键字默认按升序排序.要按降序排序结果,使用 DESC 关键字. 示例按名称按字母顺序排序 ...

  8. Python查询上周五是多少号

    使用Python可以轻松的查询出上周几是多少号,这周几是什么多少号,以下是查询上周五的示例: import datetime, calendar last = datetime.date.today( ...

  9. c# Mutex 互斥锁

    前言 互斥锁(Mutex) 互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它. 互斥锁可适用于一个共享资源每次只能被一个线程访问的情况. 正文 代码: static void Ma ...

  10. Sarsa模型和Q_learning模型简记

    1. Sarsa模型 1.1 Sarsa类代码: class SarsaAgent(object): def __init__(self,state_n,action_n,learning_rate= ...