从FTP建立连接模式想到的TCP SYNFlood防御

简介:

今天正在看有关几种常见攻击及其防御手段的文章,讲到TCP SynFlood的攻击模式时,忽然突发奇想,为何不使用FTP所应用的反向连接技术,来取代原有的TCP三次握手呢?这样子做会不会有更高的防御效率呢?

 

对于TCP三次连接的过程,我想阁下应了如指掌,但为了做出比较,我也简单回顾一下。

1、由发起TCP连接的A段发送TCP SYN报文到B端。报文内容为Seq Num等,SYN置位。

2、B端接收到该报文后,发送一个TCP SYN/ACK报文到A端,其中Seq Num=Seq Num+1,SYN、ACK置位。

3、A端收到该报文后,发送TCP ACK报文到B端,ACK置位。

这样,整个TCP连接算是建立完毕。

 

TCP SynFlood攻击原理,便是利用B端等待A端ACK报文时所需要比监听状态占用更多CPU中断、内存等资源的结果进行DoS攻击。这样一来,由于建立连接的主动权在“需要TCP服务”的A端,提供TCP服务的B端必须进行处理等待。无论是减少TCP半开连接时间,或者增大TCP处理缓存,都属于治标不治本的方式。一方面,由于无法判断那类连接属于有效连接,盲目的减少等待时间等于间接造成了DoS;而增加缓存对于大规模DDoS来说,几乎没有任何意义。

三次握手

回到FTP的话题。之所以提及FTP,主要是因为FTP的连接建立机制很独特。Client一端在建立连接初期,仅仅向Server表明了建立连接的要求,包括所用到的等待连接端口号。真正建立连接,是有Server端开始建立的。具体流程如下(port):

1、Client向Server TCP 21发送连接申请,其中包含有本地开放连接用的TCP Port;

2、Server向Client指定TCP Port发起连接,连接成功后,再进行认证等操作。

这样一来,在Server端无须保留任何资源,因为Client在申请连接阶段已经准备好了连接所需资源(端口的保留与监听)。倘若攻击者作为Client,根本没有打开上述端口,对于Server而言,也仅仅是浪费了生成一个“连接发起”所需要的资源。

对于TCP而言,生成一个SYN的资源往往比生成一个ACK的资源少。因此,为确保所有需要TCP服务的Client端已经保证了向Server端提供相应资源,TCP连接可以做一下修改(为作对比,称发起TCP连接的一端为tcpClient,接受TCP连接的一端为tcpServer):

1、tcpClient向tcpServer发送tcpReq,请求tcpServer建立TCP连接,其中Req内包含有建立连接用的Port;

2、tcpServer向tcpClient所提供的Port发送SYN,提供seq,以要求建立TCP连接;

3、tcpClient向tcpServer发送SYN/ACK,确认seq,并返回seq+1;

4、tcpServer向tcpClient发送ACK,确认seq+1。

上述过程比起“3次握手”,主要优点在于tcpServer不需要在本地保留建立连接时所需的资源。只有收到了tcpClient的ACK后,tcpServer才需要开始进行连接处理。这样一来,tcpClient端需要更多资源以确认tcpServer所提供的TCP连接,这也间接减缓了TCP连接时tcpServer端的防御能力。

上述内容纯属个人愚解,若有雷同,实属巧合。希望能对本文提出您的批评指正。




本文转自 gole_huang 51CTO博客,原文链接:http://blog.51cto.com/golehuang/536952

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
SQL 分布式计算 DataWorks
DataWorks常见问题之dataworks连接FTP服务器失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
Java 数据安全/隐私保护
Java——通过Java代码连接ftp服务器
Java——通过Java代码连接ftp服务器
|
Linux 网络安全
FTP被动模式配置
FTP被动模式配置
1362 1
|
JavaScript 网络安全
js ftp连接
js ftp连接
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式【Options】处理常规上传和FTP文件上传
|
网络安全 C#
FTP 被动模式配置
FTP 被动模式配置
284 0
FTP 被动模式配置
|
网络协议 Linux 网络安全
在Linux中,我们都知道FTP协议有两种工作模式,它们的大概的⼀个工作流程是怎样的?
在Linux中,我们都知道FTP协议有两种工作模式,它们的大概的⼀个工作流程是怎样的?
|
Linux 网络安全 数据安全/隐私保护
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
|
SQL 网络协议 Java
JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败
JAVA SQLServerException: 通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败
551 0
|
SQL 网络协议 jenkins
一篇文章掌握彻底掌握 FTP 服务器的 ACTIVE 与 PASSIVE 工作模式
一篇文章掌握彻底掌握 FTP 服务器的 ACTIVE 与 PASSIVE 工作模式