Linux怎么开启net.ipv4.tcp_syncookies有效防御SYNFlood攻击

梦芳君_5644

梦芳君_5644

2026-10-15

344人浏览

原创

必须开启net.ipv4.tcp_syncookies=1并同步调大tcp_max_syn_backlog和somaxconn,缩短synack_retries至2,配合iptables前置限速规则,才能使syncookies真正生效。

linux怎么开启net.ipv4.tcp_syncookies有效防御synflood攻击

必须开启 net.ipv4.tcp_syncookies=1,但光开这个没用——它只在半连接队列真正溢出时才触发,而默认队列太小(常为 1024),攻击一来就直接丢包,根本轮不到 syncookies 生效。

确认当前状态和是否真被调用

别只看参数值,得验证它是不是在干活:

  • sysctl net.ipv4.tcp_syncookies 返回 1 只说明已启用,不等于正在工作
  • 运行 netstat -s | grep -i "syncookies",观察 Syncookies sent 计数是否随流量增长;为 0 说明队列还没满,或规则被 iptables 提前拦了
  • 检查半连接队列是否真溢出:ss -s 看 SYNs 行的 incomplete 数,持续 > net.ipv4.tcp_max_syn_backlog 值才是 syncookies 触发条件

同步调大两个关键队列上限

syncookies 是“保命机制”,不是“防攻击开关”。它需要先让系统撑到溢出那一刻,才有机会出手:

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载
  • net.ipv4.tcp_max_syn_backlog:半连接队列大小,建议设为 4096~65535;低于 2048 在高并发下基本形同虚设
  • net.core.somaxconn:全连接队列上限,必须 ≥ 应用层 listen() 的 backlog 参数;Nginx 要配 listen 80 backlog=65535,Node.js 启动时显式传 65535,Golang 默认适配但需确认未被 ulimit -n 或容器限制压制
  • 改完必须 reload 服务(如 systemctl reload nginx),否则新值对应用无效

缩短 tcp_synack_retries 加速释放无效连接

默认值 5 意味着服务器最长等约 63 秒才放弃一个伪造 SYN+ACK,这等于给攻击者送资源窗口:

  • 设为 2:总等待时间压缩至约 1–3 秒,大幅降低队列积压压力
  • 设为 0 会禁用重传,导致真实弱网用户(如跨境、云厂商 LB 后端)建连失败,不推荐
  • 该参数不影响正常三次握手,只压缩无效连接的存活时间

iptables 必须前置限速,不能依赖 syncookies 单打独斗

syncookies 是内核兜底,iptables 是第一道过滤网。把高频异常 SYN 包拦在进协议栈前,才能避免内核被打满:

  • 规则必须放在 INPUT 链靠前位置(早于 -m state --state ESTABLISHED 类放行规则),否则会被绕过
  • 推荐组合:iptables -A INPUT -p tcp --syn -m limit --limit 10/sec --limit-burst 20 -j ACCEPT,之后紧跟 iptables -A INPUT -p tcp --syn -j DROP
  • 不要用 recent 模块做高频封禁——高并发下性能差;改用 ipset + fail2ban 动态管理封禁 IP

最容易被忽略的是:应用层 listen() 的 backlog 值和 net.core.somaxconn 不匹配,或者改完内核参数没 reload 服务。这时候你看到的不是防护生效,而是连接失败率突然上升——误以为 syncookies 失效,其实是它根本没机会启动。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

11719

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

1086

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

804

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1886

14

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4030

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3433

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2613

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6370

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6002

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习