当前位置: 首页 > news >正文

【HBZ分享】如何规避TCP的洪水攻击

常规洪水攻击的原理

  1. 在TCP第二次握手建立半连接时,此时就可以发动洪水攻击
  2. 就是大量的请求发起TCP连接,当第二次握手时,服务器会把这些请求放到半连接队列中,由于这些恶意攻击的客户端不会再确认第三次握手,就导致这些半连接无法被释放,服务器会一直等直到超时,此时半连接队列会被塞满,正常请求连接就无法被应答,这就是洪水攻击的方式

常规如何解决洪水攻击

  1. 开启syncookies方式,第一次握手时,服务器会根据(源地址,源端口,目的地址,目的端口等) 和一个随机数,计算出来一个哈希值(SHA1), 然后第二次握手会把这个生成的syncookies一并返回给客户端,客户端确认第三次握手时,会把这个syncookies再发送给服务端,服务端会校验该syncookie是否和之前的匹配, 如果匹配则建立TCP连接。
  2. 这种做法好处:当服务端没有收到 或 收到的syncookies不匹配时是不会建立TCP连接的。并且使用syncookies时,服务端不会去维护半连接队列,也就是不存在半连接状态,因为使用syncookies对比就无需半连接了,所以就避免了半连接队列被打满导致无法接收新的连接。

syncookies无法解决的场景

  1. 当发动大量DDOS攻击时,syncookies这种方式也会瘫痪,瘫痪原因是因为CPU要计算大量的syncookies,导致CPU被打死了。因为在计算syncookies时也是消耗CPU性能的,面临巨量的DDOS,CPU是扛不住的,此时只能增大带宽,用配置硬顶。

其他解决方案

  1. 增大半连接队列和全连接队列(海量攻击该方法基本无效)
  2. 减少SYN+ACK的重传次数(TCP是靠重传维持稳定连接的),即收到大量syn请求的洪水攻击时,服务端接收不到回应会不断重试,直到最大次数,降低这个最大次数就能缓解一下

如何查询判断是否被洪水攻击了

1. 先进行流量查看:
sar -n DEV 1 -h然后只看eth0即可-->用rxkb/s 和 rxpck/s 这两列相除-->如果得出的包就50-60几字节,
那就说明是小包搞鬼,有可能遭受洪水攻击了,一般来说最大MTU = 14602. 如果发现是小包搞鬼,那就再进行网络抓包, 输入如下命令
tcpdump -i eth0 -n tcp port 803. 看有多少个[S], 这个表示发起TCP请求阶段,如果[S]过多,那就说明是洪水攻击,这是洪水攻击的特征4. 进一步确认是洪水攻击,查询半连接的池子大小,以及当前半连接数量
半连接总大小: cat /proc/sys/net/ipv4/tcp_max_syn_backlog
当前半连接数: ss -s 或 netstat -n -p | grep SYN_RECV | wc -1[S]: SYN,开始连接
[P]: PSH, 推送数据
[F]: FIN, 结束连接
[R]: RST, 重置连接
[.]: 没有Flag,可能是ACK 也可能是URG

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LangChain 入门案例教程
  • github 下载提速的几种方法
  • 仕考网:公务员考试面试时间一般多长?
  • 利用Python进行数据分析PDF下载经典数据分享推荐
  • C 语言中如何实现图结构?
  • SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目
  • 每天一个数据分析题(四百十六)- 线性回归模型
  • 数据建设实践之大数平台(六)安装spark
  • 局域网远程共享桌面如何实现
  • [leetcode]partition-list 分隔链表
  • golang验证Etherscan上的智能合约
  • Docker-部署Sringboot项目保姆级教程(附项目源码)
  • RTOS系统 -- ARM Cortex-M4 RPMSG之通道初始化函数
  • k8s NetworkPolicy
  • [深度学习]卷积理解
  • hexo+github搭建个人博客
  • 07.Android之多媒体问题
  • css的样式优先级
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • HashMap剖析之内部结构
  • Java深入 - 深入理解Java集合
  • JS变量作用域
  • miaov-React 最佳入门
  • PAT A1050
  • python_bomb----数据类型总结
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • spring学习第二天
  • storm drpc实例
  • vue-cli3搭建项目
  • zookeeper系列(七)实战分布式命名服务
  • 创建一个Struts2项目maven 方式
  • 代理模式
  • 关于字符编码你应该知道的事情
  • 码农张的Bug人生 - 见面之礼
  • 微信小程序实战练习(仿五洲到家微信版)
  • 一起参Ember.js讨论、问答社区。
  •  一套莫尔斯电报听写、翻译系统
  • 用 Swift 编写面向协议的视图
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​TypeScript都不会用,也敢说会前端?
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3) cmake编译多个cpp文件
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (七)glDrawArry绘制
  • (区间dp) (经典例题) 石子合并
  • (四)js前端开发中设计模式之工厂方法模式
  • (转)C#调用WebService 基础
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转载)Linux 多线程条件变量同步
  • .net 7和core版 SignalR
  • .NET CORE使用Redis分布式锁续命(续期)问题