什么是SYN Flood攻击?SYN‑Cookie原理、现象与防护手段
很多站长遇到过一种奇怪故障:网站打不开,SSH连接卡顿,服务器CPU、内存占用看着不算高,但外部新连接就是进不来。排查后发现大量处于SYN_RECV状态的网络连接,这多半就是遭遇到了SYN Flood,也就是常说的SYN洪水攻击。环球云域在日常运维中碰到不少中小VPS被这类打垮,很多人分不清SYN Flood和CC攻击,两者攻击层级完全不一样。
一、SYN洪水攻击到底是什么
要理解SYN洪水,先要简单说下TCP三次握手。正常建立连接,客户端发SYN包,服务器回复SYN‑ACK,客户端再回ACK,三次完成才正式建立连接。服务器收到SYN之后,就会在系统内核开辟一块队列空间,保存这条半连接状态,等待客户端最后的ACK报文。
SYN洪水攻击就钻了这个协议的漏洞。攻击者大量发送伪造源IP的SYN数据包,服务器收到后,会回复SYN‑ACK报文。因为IP是伪造的,永远不会收到客户端返回的ACK应答包。服务器只能把这些半连接挂在队列里面,等待超时后才会释放。短时间海量伪造SYN包涌进来,半连接队列直接被占满,后续真实用户的正常连接直接被系统丢弃,网站、SSH全部无法接入,业务直接瘫痪。
和CC攻击有明显区别:CC属于应用层攻击,耗的是程序、数据库资源;SYN洪水属于网络层DDoS,直接打操作系统内核TCP协议栈,还没到网站程序这一层就已经被拦截。哪怕你网站程序写的再完美,内核队列耗尽,业务照样无法对外提供服务。
二、服务器遭遇SYN洪水的实际现象
环球云域整理实际运维中遇到的真实表现,可以用来快速判断:
- 外部无法访问服务,但服务器内部负载不算高。网站80、443端口访问超时,SSH远程连接卡顿甚至连不上,但登录进服务器看CPU、内存使用率并没有跑满,磁盘IO也正常。问题出在内核网络协议栈,不是业务程序本身。
- 大量SYN_RECV状态连接。执行查看网络连接命令,会看到一大堆状态为SYN_RECV的连接记录,来源IP杂乱,很多都是海外陌生IP,这些就是滞留的半打开连接。
- 系统日志出现SYN flooding告警。Linux内核日志会打印提示:possible SYN flooding on port xx. Sending cookies,代表系统已经检测到洪水攻击,自动触发SYN‑Cookie机制进行防御。
- 小带宽机器更容易中招。攻击不一定需要超大流量,依靠大量小包就可以把半连接队列打满,部分低配置VPS几十M流量就可以把服务打挂。
三、SYN‑Cookie是什么,它如何防御攻击
SYN‑Cookie是Linux内核自带,专门用来对抗SYN洪水的内核机制,很多人会搞混,把它当成攻击手段,其实它是防御方案。
正常情况下服务器收到SYN包,立刻分配队列内存保存半连接信息。开启SYN‑Cookie之后,当半连接队列快要被填满,内核不再为新来的SYN请求分配内存,而是拿源IP、目的IP、端口、密钥等信息运算生成一串加密序列号,放到SYN‑ACK包里面返回给客户端,服务器本地不保存这条连接的任何状态数据。
如果是真实正常用户,会返回携带该序列号的ACK包。服务器收到ACK之后,重新演算校验Cookie,如果校验通过,才正式创建TCP连接交给上层程序。攻击者伪造IP,收不到SYN‑ACK,自然不会回复ACK报文,服务器不会为攻击者消耗任何队列资源,攻击包相当于全部落空,不会占满半连接队列,保证真实用户可以继续接入。
但是SYN‑Cookie并不是万能,它也存在短板。启用之后部分TCP高级选项会失效,例如窗口缩放,高带宽场景下会轻微影响传输性能;同时它只能解决SYN洪水,对CC攻击、UDP洪水、其他类型DDoS完全不起作用,不能当做唯一防护手段。
四、Linux下SYN‑Cookie配置与参数说明
Linux系统中控制参数为net.ipv4.tcp_syncookies,一共三个取值,绝大多数现代发行版默认设置为1,也就是检测到攻击才自动启用,平时不会触发,不影响正常业务性能。
- 0:关闭SYN‑Cookie,无论是否遭受攻击都不启用。
- 1:模式,只有内核判定发生SYN洪水、半连接队列满了之后,才开启防护,推荐生产环境使用。
- 2:永久强制开启SYN‑Cookie,无论有没有攻击都生效,不建议常规业务使用,会带来额外性能损耗。
查看当前参数:
临时调整(重启失效):
永久配置,编辑 /etc/sysctl.conf,写入下面一行,保存执行sysctl‑p生效:
五、完整防护思路,不能只靠SYN‑Cookie
SYN‑Cookie属于单机内核层面的兜底手段,只能扛中小规模SYN洪水。如果攻击者流量巨大,单靠服务器内核调优扛不住,必须做多层防护架构,环球云域给出几点实操建议:
- 优先前置CDN或者高防IP,把恶意SYN报文在外部节点清洗,不要让攻击流量直接裸打到源站服务器,这是最有效的手段,隐藏源站真实IP,从源头拦截攻击包。
- 合理调大半连接队列backlog,调小SYN‑ACK重试次数,减少无效半连接的存活时间,加快释放队列资源,配合sysctl内核参数一起优化。
- 防火墙层面做限速策略,iptables配置限制单IP短时间内SYN报文数量,抑制单源高频扫描攻击。
- 开启系统SYN‑Cookie保持默认1模式,不要盲目改成2永久开启,避免影响正常业务传输性能。
- 做好监控告警,监控SYN_RECV连接数量、内核洪水告警日志,出现异常第一时间介入处理,不要等到业务完全瘫痪才排查。
不少新手以为打开SYN‑Cookie就万事大吉,实际线上遇到大流量DDoS,内核防护能力会到达上限。真正的安全防护,永远是多层叠加,不能指望单一一项功能解决全部网络攻击问题。

















![表情[baoquan]-服务器测评_云 VPS 推荐_运维技术教程与源码分享 - 环球云域数据平台 cloudidc.vip](https://cloudidc.vip/wp-content/themes/zibll/img/smilies/baoquan.gif)


暂无评论内容