1

风云再起

小Q是Linux帝国网络部负责TCP连接的公务员。

一直以来工作都很轻松,加班也少,但自从小马哥到Linux帝国开设了nginx公司,小Q的工作量一下就大了起来,经常加班,为此小Q背后没少抱怨。

一大早,nginx按时启动,绑定了80端口监听,开始了今天的营生。

没过多久,今天的第一个客户来了。


搜图
编辑
请输入图片描述

小Q还是如往常一样,收到这个带有SYN标记的数据包后,创建了一个连接请求块,然后将其放入80端口归属的连接请求队列中,回复了一个带有SYN和ACK标记的数据包后,开启了一个定时器,等待第三次握手的完成。


搜图
编辑
请输入图片描述


没等多久,这个客户就发来了回信,三次握手完成。小Q把这个连接请求块转移到了80端口对应的连接就绪队列中,并按下了铃铛。

听到铃声的nginx线程从epoll_wait函数中醒来,调用accept函数,从队列中拿到了这个新来的客户,开始服务。

这就是小Q的日常,他已经干这份工作太久了,轻车熟路。

很快到了深夜,小Q准备打个盹儿,这么晚估计是没有活干了。

没想到刚躺下,就来了一个连接请求,小Q揉揉惺忪的睡眼,准备来处理,然后接着很快来了第二个,第三个,第四个······

奇怪的是,每一个客户只发送了一个SYN就没了音讯,眼看着连接请求队列里的请求块越来越多,最后实在没有空间安放新的请求块,小Q开始意识到情况不妙,拉响了帝国安全警报······

2

全军出击

十分钟前······

“快醒醒,有消息来了“,还在sleep的阿D被唤醒了。

“上峰总算想起我了,我来到Windows帝国都快一个月了,一直没有指示,只是让我保持静默,我都憋坏了。”,阿D伸了伸懒腰,起身调用recv函数取到了消息:

目标:222.230.189.34

端口:80

动作:伪造源IP地址,发送SYN数据包

读完消息后,阿D使用原始套接字构造了一个TCP数据包,将SYN标记点亮,伪造了一个源IP地址,将其发送了出去。

经过一通路由转发,这个数据包终于来到Linux帝国,却迟迟没有人来接待,侧目望去,原来,已经有数不清的TCP包堵在门口,还有无数类似的TCP包正在源源不断的涌入……

3

SYN Flood

此刻,帝国高层正在召开紧急会议。

防火墙:“现在有无数的网络连接进来,为了帝国的安全,我只好先关闭了网络,把那些数据包挡在外面。”


搜图
编辑
请输入图片描述


小马哥:“需要赶紧采取措施,恢复正常,我们nginx公司每秒钟都在丢失大量的客户,这是一笔巨额损失!”

帝国安全部长:“小Q,你把当前的形势介绍一下,大家一起来出谋划策。”

小Q:“好的。TCP的三次握手想必诸位都有所了解,收到SYN数据包后,我需要准备一个数据块来存储客户端的信息,敌军正是瞄准了这一点,给我发送大量SYN数据包,我就需要分配大量的数据块,直到把帝国空间耗尽。”


搜图
编辑
请输入图片描述

小马哥:“抱歉,我打断一下,你为何不及时把无效的数据块释放掉,腾出空间呢?”

小Q:“当然有,我有一套超时机制,超时以后第三次握手还没来,我就会给释放掉。但现在问题是敌军声势浩大,刚刚腾出的空间马上又会被挤占。”小马哥:“那简单,你把超时时间调小一点,尽快释放无效的数据块不就行了!”

小Q:“要是太小了,正常的用户因为网络原因,时延比较大的,这不就误伤了吗?”

小马哥:“嗯,这个你们自己权衡一下,取一个合适的值,如今也没有其他办法,赶紧恢复生产才是!”

安全部长:“小Q,先这样试试看”

小Q:“行吧,我这就去”

半小时后······

小Q:“大人,我已经按照指示执行,不过网络连接越来越多,这一招恐怕支撑不了太久,还是早做打算才是。”

安全部长:“WAF公司呢,你们有什么办法没有?”

WAF公司黑衣人:“大人,我们关注的业务在于web应用安全,此次的SYN Flood,实非我等擅长。”

现场陷入了久久的沉默……

良久,防火墙打破了沉默:“小Q,为何非得在收到第一次握手SYN数据包后就建立数据块?如果把数据块的建立时间放在第三次握手之后呢?”

小Q:“如果一开始不用建立数据块占用空间,那确实解决了大麻烦!不过,不建立数据块,那如何把客户端的信息保存起来呢?”

防火墙:“保存什么信息?”

小Q:“客户端的IP、端口、序列号这些啊。”

防火墙:“这些信息在第三次握手来的数据包中也有啊,不用提前存起来嘛!”


搜图
编辑
请输入图片描述

小Q:“说的也是,唉,还是不对,第三次握手我得校验对方发来的ACK是不是我在第二次发给他的序列号+1,如果我提前不分配数据块把我发给他的序列号存起来,到时候就没办法校验了呀!不行,还是得提前存下来!”

防火墙:“有没有什么办法,不用提前存,也能做校验呢?”

小Q:“这,这怎么做?”

防火墙:“有了!第二次发给客户端的序列号,如果不是一个随机值,而是根据客户端信息和其他信息综合计算出来的一个哈希值,收到第三次握手的时候,我们拿到客户端答复的ACK,再重新计算一次哈希值,如果哈希值+1=ACK,那就能对得上,反之就是错误的包,直接丢弃!”


搜图
编辑
请输入图片描述

还没等小Q回过神,安全部长起身鼓掌:“妙哉!这真是一个绝妙的点子!小Q,就按这个办法,赶紧去办!”

4

绝处逢生

小Q回到工作岗位,按照防火墙提供的思路修改了策略。随后,通知防火墙重新打开网络码头,但究竟效果如何,小Q心里还是捏了一把汗。

网络恢复的一刹那,无数TCP SYN数据包涌了进来,这一次,小Q不再分配数据块,只是快速计算了一个哈希值作为序列号,回复给了客户端。小Q忙的满头大汗,但看到存储空间总算没有疯狂增长,小Q心里长舒了一口气。

收到消息的会议室里响起了热烈的掌声!

安全部长:“本次经历值得牢记,我们给这个方案取个名字吧,告知比特宇宙其他的帝国,帮助大家一起抵抗黑暗势力的侵扰。”

WAF黑衣人抢先发言:“我觉得这个方式关键点在于把校验信息的存储从服务器放到了客户端,有点类似web技术中的Cookie。要不咱们就叫做SYN Cookie吧!”

防火墙:“嗯,这个名字好,总结的很到位”

一个小时后,疯狂的TCP SYN数据包潮水逐渐退去,Linux帝国终于恢复了往日的宁静,nginx公司的业务也恢复了正常。小Q抬头一看,天边已经微亮,这漫长的夜晚总算是熬过去了。

智安网络丨DDoS攻击:无限战争相关推荐

  1. 智安网络丨什么是等保2.0?

    等保2.0于在2019年12月1日开始实施,下面我们从多个角度切入,带大家详细了解等级保护2.0到底是什么. 等保1.0回顾 在开始讲等保2.0之前,让我们先回顾一下等保1.0.等保1.0发布距今已经 ...

  2. 智安网络丨等级保护2.0标准最全解读,三分钟读懂!

    2019年5月13日,网络安全等级保护制度2.0标准正式发布,同时这些标准将于12月1日正式实施,我国迈入等保2.0时代.相较于等保1.0,等保2.0标准在很多方面都做了调整,重点包括:等保2.0覆盖 ...

  3. 智安网络丨网络架构,是数据中心的“神经脉络”

    如果把数据中心比作一个"人",则服务器和存储设备构成了数据中心的"器官",而网络(交换机,路由器,防火墙)就是这个数据中心的"神经脉络".那 ...

  4. 智安网络丨第一次听人把云计算讲这么明白!

    近年来,在互联网科技行业中,"云"--这一虚无缥缈的词出现的频率越来越高,随之出现的专业名词"云计算"的存在感也来越强.但是,提到"云计算" ...

  5. 智安网络丨2021有趣新解:什么叫网关?

    计算机主机网关的作用是什么? 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声 ...

  6. 智安网络丨IPv6 为网络安全带来新机遇

    IPv6拥有几乎无限的地址空间,网络信息传输也更智能.更安全,围绕IPv6的新一轮发展机遇已经出现,基于IPv6的互联网应用将很大可能颠覆现有商业模式.本文提出,向IPv6的迁移是今后网络发展的基础, ...

  7. 智安网络丨居安思危·洞见未来 — — 智安网络安全周报

    安全周报第5期:2021年7月5日丨 国内资讯 ►滴滴遭国家网络安全审查:为国内首次股价跌10% 7月2日晚间消息,国家网信办官网发布公告,网络安全审查办公室宣布对滴滴出行启动网络安全审查.公告要求, ...

  8. 智安网络丨德勤发布2021九大技术趋势,零信任安全成为主流

    日前,德勤管理咨询正式发布了<2021技术趋势报告>,本年度报告研究了过去一年疫情对企业战略.运营和技术带来的连锁反应,阐明了锤炼"韧性"经营,加速企业数字化转型的观点 ...

  9. 智安网络丨居安思危·洞见未来 —— 智安网络安全周报

    安全周报第7期:2021年7月13日丨 国内资讯 ►腾讯牵头的业内首部<零信任系统技术规范>正式发布 近日,由腾讯安全牵头编制的中国第一部<零信任系统技术规范>正式发布.< ...

最新文章

  1. 阿里前员工跳槽后曝光薪资截图:新公司月入五万多,很满足!
  2. MySQL在ROW模式下通过binlog提取SQL语句
  3. 8.2-指令周期(学习笔记)
  4. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...
  5. 对Leader的闲话
  6. Ghost8.0分区备份与恢复详细图解
  7. asp.net中实现登陆的时候用SSL
  8. ucserver admin.php,如何修改discuz管理员密码以及Ucenter初始管理密码
  9. C3P0连接池的基本配置与使用
  10. python记忆口诀-最良心的软件可以良心到什么程度?
  11. 最大流最小割定理 (定理,割集)
  12. 软件使用疑难杂症解决记录篇——科瑞工程量计算簿
  13. 计算机的通讯方式有哪些特点,1.串行通信有几种方式?它们的特点分别是什么...
  14. win7无法发现工作组计算机,系统之家win7系统在同一个工作组看不到其他电脑的解决方法...
  15. 前后端分离页面500错误,控制台不打印错误日志的错误定位
  16. 华硕关闭更新BIOS
  17. 锐捷交换机的环路检测
  18. 超全的 100 个 Pandas 函数汇总,建议收藏
  19. linux CentOS操作系统入门基本使用
  20. 考研最辛苦、最努力的一批人,喊累之前先看看他们……

热门文章

  1. 音频设置 audio
  2. 中医证型关联规则挖掘
  3. MySQL数据库篇---对数据库,数据库中表,数据库中表的记录进行添修删查操作---保姆级教程
  4. Mac 下使用apt-get
  5. 如何删除在Excel中存在的无效的链接呢
  6. 微速(微锐) 与 打码工作
  7. ESP32 学习日志(5)——NVS
  8. centos7是linux内核,在CentOS 7上用源代码编译最新的Linux内核
  9. GPU在高性能仿真计算中的应用
  10. 为什么要做用户行为分析?