面试官:介绍一下SYN泛洪是什么?

当面试官问这个问题的时候,不要被 "SYN 泛洪" 这个名词给震慑到,其实面试官就是想知道计算机网络中关于 DDoS 攻击和 TCP 建立连接三次握手的相关知识的考核。不要担心,接下来将详细介绍一下 SYN 泛洪及其相关知识。

什么是 SYN 泛洪?

攻击者向目标服务器发送大量的伪造源 IP 的 SYN 报文,服务端每收到一次 SYN 请求就会为其分配资源,内核会把这个连接放到半连接队列里,并向客户端返回 SYN + ACK,如果客户端返回 ACK,就把其对应的连接放到全连接队列里。但是由于这些伪造的客户端不会返回 ACK,因此这些连接会一直待在半连接队列里。服务器为了维护这些连接会耗尽自身内存,然后拒绝为后续的连接请求服务。

解决方案

增强网络基础措施

提升网络带宽、增加服务器的处理能力和承载能力,通过增强基础设施的能力来抵御攻击

使用 SYN Cookie 的目的就是绕过半连接队列的情况下建立连接。服务端收到 SYN 报文后,不分配半连接资源,而是通过源 IP、目的 IP、端口、时间戳等信息,经加密算法生成一个 "SYN Cookie" 放到第二次握手 SYN+ACK 的序列号中。客户端收到带 Cookie 的 SYN + ACK 并回复 ACK 时,服务端验证序列号的合法性,若合法则直接建立连接。

半连接队列优化

增大内核参数 somaxconn (最大监听队列长度),提升服务端处理并发连接的能力。减少 tcp_synack_retries(SYN+ACK 报文的重传次数,默认 5 次,可降低至 2-3 次),缩短半连接的超时时间,加快资源释放。调大 netdev_max_backlog这个队列用于接收网络处理不过来的数据包,但个人感觉调大了用处不大,攻击者伪造的 SYN 请求也能更大

拓展:什么是 DDoS 攻击?

SYN 泛洪攻击只是 DDoS 攻击的一种,DDoS,即分布式拒绝服务。顾名思义,DDoS 攻击的目的就是通过某种手段让正常的请求无法获得其服务。

是通过什么手段呢?攻击者通过控制海量僵尸主机组成的僵尸网络,从多个分布式节点同时向目标(服务器 / 网络 / 应用)发起恶意流量或请求,耗尽其带宽、CPU、内存、连接数等核心资源,使目标无法处理合法用户请求,最终导致服务中断或瘫痪。

常见的攻击类型:

  • 网络层攻击,如 UDP 反射攻击
  • 传输层攻击,如 SYN 泛洪
  • 会话层攻击,如 SSL 连接攻击
  • 应用层攻击,如 DNS 泛洪,HTTP 泛洪
相关推荐
打工的小王30 分钟前
Spring Boot(三)Spring Boot整合SpringMVC
java·spring boot·后端
80530单词突击赢2 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
爬山算法2 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
WeiXiao_Hyy3 小时前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
苏渡苇3 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
long3163 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_1113 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
短剑重铸之日4 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
Dragon Wu4 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
一个有梦有戏的人5 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python