SYN 攻击方式最直接的表现就会把 TCP 半连接队列打满,这样当 TCP 半连接队列满了,后续再在收到 SYN 报文就会丢弃,导致客户端无法和服务端建立连接。

避免 SYN 攻击方式,可以有以下四种方法:

  • 调大 netdev_max_backlog;
  • 增大 TCP 半连接队列;
  • 开启 tcp_syncookies;
  • 减少 SYN+ACK 重传次数

方式一:调大 netdev_max_backlog

当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。控制该队列的最大值如下参数,默认值是 1000,我们要适当调大该参数的值,比如设置为 10000

方式二:增大 TCP 半连接队列

增大 TCP 半连接队列,要同时增大下面这三个参数:

  • 增大 net.ipv4.tcp_max_syn_backlog
  • 增大 listen() 函数中的 backlog
  • 增大 net.core.somaxconn

具体为什么是三个参数决定 TCP 半连接队列的大小,可以看这篇:可以看这篇:TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?

方式三:开启 net.ipv4.tcp_syncookies

开启 syncookies 功能就可以在不使用 SYN 半连接队列的情况下成功建立连接,相当于绕过了 SYN 半连接来建立连接。

具体过程:

  • 当 「 SYN 队列」满之后,后续服务端收到 SYN 包,不会丢弃,而是根据算法,计算出一个 cookie 值;
  • 将 cookie 值放到第二次握手报文的「序列号」里,然后服务端回第二次握手给客户端;
  • 服务端接收到客户端的应答报文时,服务端会检查这个 ACK 包的合法性。如果合法,将该连接对象放入到「 Accept 队列」。
  • 最后应用程序通过调用 accpet() 接口,从「 Accept 队列」取出的连接。

可以看到,当开启了 tcp_syncookies 了,即使受到 SYN 攻击而导致 SYN 队列满时,也能保证正常的连接成功建立。

net.ipv4.tcp_syncookies 参数主要有以下三个值:

  • 0 值,表示关闭该功能;
  • 1 值,表示仅当 SYN 半连接队列放不下时,再启用它;
  • 2 值,表示无条件开启功能;

那么在应对 SYN 攻击时,只需要设置为 1 即可。

方式四:减少 SYN+ACK 重传次数

当服务端受到 SYN 攻击时,就会有大量处于 SYN_REVC 状态的 TCP 连接,处于这个状态的 TCP 会重传 SYN+ACK ,当重传超过次数达到上限后,就会断开连接。

那么针对 SYN 攻击的场景,我们可以减少 SYN-ACK 的重传次数,以加快处于 SYN_REVC 状态的 TCP 连接断开。

SYN-ACK 报文的最大重传次数由 tcp_synack_retries内核参数决定(默认值是 5 次),比如将 tcp_synack_retries 减少到 2 次:

为什么挥手需要四次?

再来回顾下四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
  • 服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。
  • 从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手
  • 4.1 TCP 三次握手与四次挥手面试题 | 小林coding

#第二次挥手丢失了,会发生什么?

当服务端收到客户端的第一次挥手后,就会先回一个 ACK 确认报文,此时服务端的连接进入到 CLOSE_WAIT 状态。

在前面我们也提了,ACK 报文是不会重传的,所以如果服务端的第二次挥手丢失了,客户端就会触发超时重传机制,重传 FIN 报文,直到收到服务端的第二次挥手,或者达到最大的重传次数

举个例子,假设 tcp_orphan_retries 参数值为 2,当第二次挥手一直丢失时,发生的过程如下图:

对于 close 函数关闭的连接,由于无法再发送和接收数据,所以FIN_WAIT2 状态不可以持续太久,而 tcp_fin_timeout 控制了这个状态下连接的持续时长,默认值是 60 秒。 

但是注意,如果主动关闭方使用 shutdown 函数关闭连接,指定了只关闭发送方向,而接收方向并没有关闭,那么意味着主动关闭方还是可以接收数据的。

如果主动关闭方一直没收到第三次挥手,那么主动关闭方的连接将会一直处于 FIN_WAIT2 状态tcp_fin_timeout 无法控制 shutdown 关闭的连接)。如下图:

什么是 SYN 攻击?如何避免 SYN 攻击?相关推荐

  1. SYN 洪泛、SYN 攻击、DDos 攻击以及如何抵御

    SYN 洪泛.SYN 攻击.DDos 攻击实际上就是对服务端一直发送 TCP SYN 包,但是不回第三次握手 ACK,这样就会使得服务端有大量的处于 SYN_RECV 状态的 TCP 连接. 这里给出 ...

  2. 什么是SYN攻击,被SYN攻击了要如何处理

    SYN攻击常见于游戏类,是最常见又最容易被利用的一种攻击手法.SYN是属于DOS攻击的一种,它通过利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源.为了形成足够强大的流量,攻击者往往 ...

  3. 拒绝服务攻击是对计算机网络的哪种,信息安全技术题库:DoS攻击是一种对网络危害巨大的恶意攻击,其中,具有代表性的攻击手段包括SYN洪泛、ICMP洪泛、UDP洪泛等。()...

    相关题目与解析 ●网络安全包含了网络信息的可用性.保密性.完整性和真实性.防范Dos攻击是提高(2)的措施,数字 在对计算机或网络安全性的攻击中,修改是对网络()的攻击.A.保密性B.完整性C.可控性 ...

  4. ddos压力测试_蓝盟IT外包,浅析DDoS攻击防御和DDoS攻击原理

    DDoS攻击基础 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一 ...

  5. 浅谈TCP半连接攻击与全连接攻击

    全连接攻击: 所谓的全连接攻击说的就是客户端仅仅"连接"到服务器,然后再也不发送任何数据,直到服务器超时后处理或者耗尽服务器的处理进程. 为何不发送任何数据呢?因为一旦发送了数据, ...

  6. tcp连接之半连接攻击和全连接攻击总结

    众所周知,tcp通信是一个面向连接的过程,客户端要和服务端连接,必须进行连接才能进行通信.在tcp连接中,有两种连接攻击方式,是半连接攻击机和全连接攻击,对此搜积相关资料做了一个总结. <1&g ...

  7. 网站怎么防止ddos攻击,防御ddos攻击的11种方法

    为了对抗 DDoS(分布式拒绝服务)攻击,你需要对攻击时发生了什么有一个清楚的理解. 简单来讲,DDoS 攻击可以通过利用服务器上的漏洞,或者消耗服务器上的资源(例如 内存.硬盘等等)来达到目的.DD ...

  8. 如何应对CC攻击以及检测CC攻击

    转载来源: 什么是cc,网站如何应对cc攻击? http://www.safebase.cn/article-259414-1.html 一.Linux主机简单判断CC攻击的命令 第一条命令: tcp ...

  9. pythonarp攻击_python 实现ARP攻击

    原博文 2013-10-27 21:38 − 注:使用这个脚本需要安装scapy 包 最好在linux平台下使用,因为scapy包在windows上安装老是会有各种问题 1 #coding:utf-8 ...

  10. linux syn 队列,linux 防御SYN攻击

    一.默认syn配置 sysctl -a | grep _syn net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_syncookies = 1 net. ...

最新文章

  1. 1小时识别100亿张图像,每秒 80 亿亿次!「智算巨头」亮相中国南京
  2. python个人项目-个人项目WC(Python实现)
  3. VMC Command Line
  4. 面试官:聊聊你对分布式锁技术方案的理解
  5. notepad++与ISE/Vivado关联
  6. 为什么写C语言弹不出窗口,居然还有SB说C写不出窗口的..
  7. leetcode417. 太平洋大西洋水流问题(bfs)
  8. 为C++程序添加文件保存加载功能
  9. Android 几种解析XML文件方式的区别
  10. openstack nova 源码分析4-nova目录下的driver.py
  11. 2022-01-12总结 CSS开篇
  12. 卸载symantec 找不到vpshellres.dll 解决方案
  13. 计算机视觉 CS231n Course Introduction
  14. 杭电ACM2030题
  15. 直立车控制之PID算法分析
  16. 加工中心宏程序c语言,加工中心最实用的宏程序
  17. 数据结构 查找 的思维导图
  18. python_大智慧SAR指标编写
  19. 麒麟子Cocos Creator实用技巧
  20. 秘宝 联想正式进入元宇宙 互联网巨头的数字藏品用的哪种技术?

热门文章

  1. PS制作墙壁上海报卷页图片效果
  2. OpenAI 发布GPT-4——全网抢先体验
  3. PPLive新CEO陶闯:从微软跳槽的落差
  4. B站直播数据包分析连载(2018-12-11更新)
  5. python爬虫经典段子_Python爬虫实战之爬取糗事百科段子
  6. bwa和bowtie2使用方法
  7. 10W+爆文背后隐藏的10条规律(人人可复制)
  8. DNS是什么?DNS的工作流程
  9. linux 安装php gd,Linux下安装GD_php
  10. Karl Guttag:现有Micro LED/LCoS+光波导AR眼镜对比解析