ASPF

ASPF(Application Specific Packet Filter)是针对应用层的包过滤,其原理是检测通过设备的报文的应用层协议信息,记录临时协商的数据连接,使得某些在安全策略中没有明确定义要放行的报文也能够得到正常转发。

通过以下实验说明,ASFP:

FTP客户端经过防火墙访问FTP服务器

配置完成后,尝试登陆FTP服务器,可以正常登陆,但是不能够正常进行数据连接。

查看会话状态:

已经成功建立session会话。

FTP协议是一个典型的多通道协议,在其工作过程中,FTP Client和FTP Server之间将会建立两条连接:控制连接和数据连接。控制连接用来传输FTP指令和参数,其中就包括建立数据连接所需要的信息;数据连接用来获取目录及传输数据。数据连接使用的端口号是在控制连接中临时协商的。

根据数据连接的发起方式FTP协议分为两种工作模式:主动模式(PORT模式)和被动模式(PASV模式)。主动模式中,FTP Server主动向FTP Client发起数据连接;被动模式中,FTP Server被动接收FTP Client发起的数据连接。

FTP主动模式:

1.     FTP客户端向FTP服务器的21端口发起连接建立控制通道

2.     客户端通过PORT命令协商客户端使用的数据传输端口号。

3.     协商成功后,服务器主动向客户端的这个端口号发起数据连接。 而且每次数据传输都会协商不同的端口号。

服务器向客户端发起数据连接的源/目的端口号分别是20和临时协商的端口号yyyy,显然不是这条连接的后续报文,无法命中此会话转发。因此会出现可以验证用户密码,但是无法获取目录列表的现象。

可以新增策略,放行服务器到客户端方向的安全策略,但是这样必须开放客户端的所有端口有安全隐患。

别急,万能的防火墙都能实现。这就是本期要出场的神秘人物ASPF(Application Specific Packet Filter)。ASPF是针对应用层的包过滤,其原理是检测通过设备的报文的应用层协议信息,记录临时协商的数据连接,使得某些在安全策略中没有明确定义要放行的报文也能够得到正常转发。

记录临时协商的数据连接的表项称为Server-map表1,这相当于在防火墙上开通了“隐形通道”,使得像FTP这样的特殊应用的报文可以正常转发。当然这个通道不是随意开的,是防火墙分析了报文的应用层信息之后,提前预测到后面报文的行为方式,所以才打开了这样的一个通道。

Server-map表在防火墙转发中非常重要,不只是ASPF会生成,NAT Server、SLB等特性也会生成Server-map表,后续在其他帖子中强叔还会提及。

只需要在域间配置增加detect ftp即可

此时查看Server-map,可以看到已经自动生成了维护FTP数据连接的表项:

Server-map表中记录了FTP服务器向FTP客户端的2071端口号发起的数据连接,服务器向客户端发起数据连接时将匹配这个Server-map表转发,而无需再配置反向安全策略。

数据连接的第一个报文匹配Server-map表转发后,防火墙将生成这条数据连接的会话,该数据连接的后续报文匹配会话表转发,不再需要重新匹配Server-map表项。

正常访问,防火墙session状态:

Server-map表项由于一直没有报文匹配,经过一定老化时间后就会被删除。这种机制保证了Server-map表项这种较为宽松的通道能够及时被删除,保证了网络的安全性。当后续发起新的数据连接时会重新触发建立Server-map表项。

配置了ASPF可以生成动态维护临时协商的数据连接的表项,既简化了安全策略的配置又确保了安全性

被动模式下的流程:

ASPF, 1.1.1.1 -> 2.2.2.2:zzzz[any], Zone: ---

Protocol: tcp(Appro: ftp-data), Left-Time: 00:00:30, Addr-Pool: ---

VPN: public -> public

配置实例

USG6000V1:

#

ip vpn-instance default

ipv4-family

#

#内网Trust Zone接口

#

interface GigabitEthernet0/0/0

undo shutdown

ip binding vpn-instance default

ip address 192.168.1.1 255.255.255.0

#外网Untrust  Zone接口

#

interface GigabitEthernet1/0/1

undo shutdown

ip binding vpn-instance default

ip address 10.1.1.1 255.255.255.0

#

#安全级别,与接口配置

#

firewall zone local

set priority 100

#

firewall zone trust

set priority 85

add interface GigabitEthernet0/0/0

#

firewall zone untrust

set priority 5

add interface GigabitEthernet1/0/1

#

#Nat地址指向Null0避免环路

#

ip route-static vpn-instance default 10.1.1.10 255.255.255.255 NULL0

ip route-static vpn-instance default 10.1.1.11 255.255.255.255 NULL0

ip route-static vpn-instance default 10.1.1.12 255.255.255.255 NULL0

ip route-static vpn-instance default 10.1.1.13 255.255.255.255 NULL0

ip route-static vpn-instance default 10.1.1.14 255.255.255.255 NULL0

ip route-static vpn-instance default 10.1.1.15 255.255.255.255 NULL0

#

#Nat地址池

#

nat address-group nat-pool1 0

mode pat

section 10 10.1.1.10 10.1.1.15

#

#需要映射的源地址set。通过address-set 或者service-set方式,修改时直接修改set信息即可。

#

ip address-set saddr_192.168.1.0/24 type object

address 192.168.1.0 0.0.0.255

#

#ASPF 监控ftp

#

firewall interzone trust untrust

detect ftp

#

#安全策略

#

#放开client访问ftp的21端口(需要detect ftp,不然ftp不能正常通信)

security-policy

rule name ftp

source-zone trust

destination-zone untrust

source-address 192.168.1.0 24

service ftp

action permit

#放开防火墙自身ping所有zone的权限,用于连通性测试

rule name icmp

source-zone local

source-zone trust

service icmp

action permit

#

#Nat策略,

#

nat-policy

rule name policy_nat1

source-zone trust

destination-zone untrust

source-address address-set saddr_192.168.1.0/24

action nat address-group nat-pool1

#

ASPF(Application Specific Packet Filter)的更多相关文章

  1. Introduction of Servlet Filter(了解Servlet之Filter)

    API文档中介绍了public Interface Filter(公共接口过滤器) Servlet API文档中是这样介绍的: ‘A filter is an object that performs ...

  2. 【面试突击】-缓存击穿(布隆过滤器 Bloom Filter)

    原文地址:https://blog.csdn.net/fouy_yun/article/details/81075432 前面的文章介绍了缓存的分类和使用的场景.通常情况下,缓存是加速系统响应的一种途 ...

  3. 粒子滤波(PF:Particle Filter)

    先介绍概念:来自百科 粒子滤波指:通过寻找一组在状态空间中传播的随机样本来近似的表示概率密度函数,再用样本均值代替积分运算,进而获得系统状态的最小方差估计的过程,波动最小,这些样本被形象的称为&quo ...

  4. 安卓操作系统版本(Version)与应用程序编程接口等级(Application Programming Interface Level)对照表

    Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑. 使用Android API,可以在Java环境开发App,编译.打包后可在Android系统 ...

  5. 《计算机网络课程设计》基本操作(基于Cisco Packet Tracer)

    第一次课 Router> #用户模式 Router# #特权模式 lhx(config)# #全局配置模式 Router>enable #进入特权模式 Router#configure t ...

  6. Python学习:函数式编程(lambda, map() ,reduce() ,filter())

    1. lambda: Python 支持用lambda对简单的功能定义“行内函数” 2.map() : 3.reduce() : 4.filter() : map() ,reduce() , filt ...

  7. vue 过滤器filters的使用以及常见报错小坑(Failed to resolve filter)

    今天使用vue 过滤器中发现一个小坑,网上查到的大都是不正确的解决方法,故分享给大家: 原错误代码: // 过滤器 filter:{ FdishList:function(value){ if (!v ...

  8. 拦截器(Interceptor)与过滤器(Filter)的区别

    转自:https://www.jianshu.com/p/cf088baa9b04 过滤器,是在java web中将你传入的request.response提前过滤掉一些信息,或者提前设置一些参数.然 ...

  9. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(略有修改)

    对应项目的代码地址为:https://github.com/liuxiaoming7708/springboot-dubbo-parent Dubbo与Zookeeper.SpringMVC整合和使用 ...

随机推荐

  1. 欧拉筛(线性筛) & 洛谷 P3383 【模板】线性筛素数

    嗯.... 埃氏筛和欧拉筛的思想都是相似的: 如果一个数是素数,那么它的所有倍数都不是素数.... 这里主要介绍一下欧拉筛的思路:(欧拉筛的复杂度大约在O(n)左右... 定义一个prime数组,这个 ...

  2. maven build 添加到 META-INF 目录。

    <build> <resources> <resource> <directory>src/main/resources</directory&g ...

  3. 断电后gitlab报500错误启动出错

    异常断电后,gitlab报500错误,重启无效 通过sudo gitlab-ctl reconfigure启动时, 提示 [execute] pgsql:could not connect to se ...

  4. (转)linux exec与重定向

    原文:http://xstarcd.github.io/wiki/shell/exec_redirect.html linux exec与重定向 exec和source都属于bash内部命令(buil ...

  5. sencha touch dataview 中添加 button 等复杂布局并添加监听事件

    config 中的属性默认都会自动生成   getter   setter  applier  updater 四个方法. applier 在调用  setter 时被调用, updater 在属性值 ...

  6. Intellij IDEA 远程debug、远程tomcat部署项目

  7. touch-slide-image

    用htmls5+css3实现的在android和ios,以及wekit新版浏览器上实现手指滑动切换图片. https://github.com/navyxie/touch-slide-image

  8. python 包管理工具Pipenv

    Kenneth Reitz的最新工具Pipenv可以用于简化Python项目中依赖项的管理. 它汇集了Pip,Pipfile和Virtualenv的功能,是一个强大的命令行工具. 入门 首先使用pip ...

  9. 查找正序排列的List中缺失的日期数据的一个算法

    Code: public List<DateTime> getMissDateData() { DateTime[] keys = { DateTime.Now.AddDays(-5), ...

  10. 问题集录05--ajax跨域问题

    由于最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决ajax的跨域问题.本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到 ...