首页/安全/安全加固速查/SYN 泛洪基础防护(synproxy 与内核参数配合)
防火墙与访问控制50 条

SYN 泛洪基础防护(synproxy 与内核参数配合)

小规模 SYN 泛洪先用内核参数与 SYN cookies 卸力(属主机基线),有更高要求再上 synproxy 与上游清洗。

安全加固速查安全更新于 2026-10-13

SYN 泛洪与主机侧防护

SYN 泛洪的原理是攻击者只发 SYN 不回 ACK,把服务端的半连接队列占满,正常用户再也完不成握手。主机侧能做的三件事:开启 SYN cookies 让半连接不再占用完整队列资源、调大半连接与 accept 队列、减少 SYN-ACK 重传次数以加快释放。流量再往上一个量级就要靠 synproxy 代答握手或上游清洗,单机参数救不了带宽型攻击。

基本信息

加固项连接层抗泛洪
适用平台Linux(sysctl 与 nftables/iptables)
风险等级中
基线SYN cookies 开启、队列参数按业务调优
防护层次主机参数 低于 synproxy 低于上游清洗

典型使用场景

  • 公网入口加固:Web 与 API 服务在暴露前先核对内核参数
  • 事件响应:判断当前攻击规模是否需要走上游清洗
  • 容量评估:压测时用 ss 观察半连接数与队列溢出计数
  • 基线巡检:把 syncookies 与队列参数纳入常规核查项
  • 前后端分离架构:确认负载均衡后端不是新的队列瓶颈

内核侧核查

内核侧核查
# 逐项核对当前值(0 表示关闭,队列打满即拒绝服务)
sysctl net.ipv4.tcp_syncookies       # 期望 1
sysctl net.ipv4.tcp_max_syn_backlog  # 半连接队列上限
sysctl net.core.somaxconn            # accept 队列上限
ss -s                                # 概览:SYN-RECV 与溢出计数
# 溢出与丢弃计数可用 netstat -s 中的 listen 段辅助判断

nftables synproxy 思路

nftables synproxy 思路
# 网关代答握手:仅在后端只接收已建立连接时使用
nft add rule inet filter input tcp dport 443 'ct state new' synproxy mss 1460 wscale 7 timestamp sack-perm
# 上线前确认后端健康检查、长连接与透传地址方案不受影响

内核参数判读

参数含义关注点
tcp_syncookies队列满时用 cookie 完成握手应为 1,为 0 时队列打满即不可用
tcp_max_syn_backlog半连接队列长度过小会提前丢弃正常 SYN
somaxconnaccept 队列长度应用 listen backlog 会被它截断
tcp_synack_retriesSYN-ACK 重传次数过大延长单个半连接占用时间
synproxy 适合后端只接受已建立连接的网络,前置设备已做健康检查或连接保持时慎用;多数业务先依赖云厂商的基础防护更实际。
改 sysctl 要同时落配置文件(如 /etc/sysctl.d/ 下的文件)并 sysctl -p 验证,只改运行时值重启后即失效。

易错点

  • 只做单机参数防护应对带宽型攻击:链路被占满时内核参数毫无作用,必须依靠上游清洗
  • synproxy 与部分负载均衡、健康检查、透传地址方案不兼容:上线前要做完整回归,否则后端大量误判
  • 只调大队列不开 SYN cookies:队列总会被打满,最终还是拒绝正常用户的握手
  • sysctl 只写运行时值没落配置文件:重启后回到默认值,基线核查与整改记录对不上

数据来源与参考

  • Linux 内核文档:tcp_syncookies
  • nftables wiki:synproxy
  • 云厂商 DDoS 防护文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌