Linux系统无法彻底阻止DDoS攻击,但通过启用tcp_syncookies、收紧tcp_fin_timeout/tw_reuse/max_syn_backlog、屏蔽ICMP广播、限制file-max和somaxconn等内核参数调优,可显著提升Java服务抗压能力,为上层防护争取响应时间。

Linux 系统本身无法彻底阻止 DDoS 攻击,但对 Java 服务运行其上的服务器来说,合理调整内核网络参数能显著增强抗压能力,尤其在面对 SYN Flood、ICMP Flood 或连接耗尽类攻击时。关键不是“防住全部”,而是让系统更健壮、更难被拖垮,并为上层防护(如 Nginx 限流、WAF、CDN)争取响应时间。
启用 SYN Cookie 防御 SYN Flood
SYN Flood 是最常见也最易触发的 DDoS 类型,Java 应用常暴露在 HTTP 端口(如 8080),一旦底层 TCP 连接队列被占满,即使 JVM 健在,新请求也无法抵达应用层。 启用 SYN Cookie 后,内核不再为每个半连接分配内存,而是用加密 Cookie 完成三次握手校验: - 编辑 `/etc/sysctl.conf`,添加或确认:net.ipv4.tcp_syncookies = 1
- 执行 `sysctl -p` 生效。 ⚠️ 注意:该参数仅在 `tcp_max_syn_backlog` 溢出时自动激活,不是万能开关,但对中小规模攻击非常有效。收紧 TCP 连接生命周期与队列容量
Java 服务若长期维持大量空闲连接(如未正确关闭 HTTP keep-alive),会加速资源耗尽。通过缩短超时、限制队列、复用 TIME_WAIT 连接,可提升连接周转率: - 设置更激进的 FIN 超时和 TIME_WAIT 复用:net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
立即学习“Java免费学习笔记(深入)”;
这些参数尤其适合高并发 Java Web 场景(如 Spring Boot + Tomcat/NIO),避免因堆积大量半开连接导致 `accept()` 阻塞。屏蔽 ICMP 广播与恶意错误报文
ICMP 类攻击(如 Smurf、Ping Flood)虽不直接打 Java 进程,但会挤占带宽、触发内核中断风暴,间接拖慢整个系统响应: - 关闭对广播 ping 的响应:net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
- 启用反向路径过滤(RP Filter),防止 IP 欺骗包进入:net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
限制全局连接与资源占用
Java 应用常依赖大量 socket 和文件描述符,需防止攻击者耗尽系统级资源: - 提高最大文件句柄数(配合 JVM 的 `-XX:MaxFDLimit`):fs.file-max = 819200
- 控制连接跟踪表上限(若启用了 netfilter):net.netfilter.nf_conntrack_max = 131072
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 16384
不复杂但容易忽略


















