防御tcp序列号预测攻击需提升isn随机性、启用syn cookies兜底验证、缩短半连接超时(如tcp_synack_retries=2)、配合rp_filter=1等网络层过滤。

防御TCP序列号预测与欺骗攻击,核心在于提升初始序列号(ISN)的不可预测性、阻断伪造连接的建立路径,并增强连接状态验证能力。Linux内核提供多项关键参数,配合合理配置可显著提高攻击门槛。
启用强随机化初始序列号(ISN)
现代Linux内核默认已启用基于时间戳和加密哈希的ISN生成机制(RFC 6528),但需确保相关基础功能未被禁用:
- 确认 net.ipv4.tcp_timestamps = 1(默认开启):为ISN生成提供高精度熵源,是强随机化的前提
- 避免关闭 net.ipv4.tcp_sack = 1 和 net.ipv4.tcp_window_scaling = 1:虽然SYN Cookies启用时可能限制部分选项,但正常连接中它们有助于更精细的状态跟踪
- 不手动设置固定ISN或使用老旧补丁——内核原生实现已足够健壮
强制启用SYN Cookies作为兜底验证机制
SYN Cookies不仅防SYN Flood,更是对抗IP欺骗和序列号伪造的关键防线:它不依赖内存保存半连接,而是将客户端信息(如时间戳、MSS)加密编码进SYN+ACK的初始序列号中;只有收到合法ACK并成功解码,才真正分配连接资源。
- 临时启用:echo 1 > /proc/sys/net/ipv4/tcp_syncookies
- 永久生效:在 /etc/sysctl.conf 中添加 net.ipv4.tcp_syncookies = 1,运行 sysctl -p 加载
- 注意:该机制与 tcp_timestamps=1 协同工作效果最佳,且对标准HTTP/HTTPS等服务无感知影响
缩短半连接生命周期,压缩攻击窗口
伪造SYN包若无法快速触发状态清理,就可能堆积资源或干扰正常连接。减少重试轮次能加快释放可疑半开连接:
- 设 net.ipv4.tcp_synack_retries = 2 或 3(默认5):降低SYN+ACK重传次数,使无效SYN-RECV状态更快超时
- 慎用 net.ipv4.tcp_synack_retries = 0:虽极致缩短等待,但在高丢包或NAT环境中易误伤真实用户,建议先测试
- 配套检查 net.ipv4.tcp_max_syn_backlog(建议 ≥4096):避免队列过小导致早期丢包,掩盖真实攻击信号
结合网络层过滤强化源地址可信度
内核参数无法替代网络层对IP源的真实性校验。需与底层防护联动:
- 启用严格反向路径过滤:net.ipv4.conf.all.rp_filter = 1(逐接口配置更稳妥),丢弃“入接口非最优返回路径”的包,大幅增加IP欺骗成本
- 关闭源路由:net.ipv4.conf.all.accept_source_route = 0,防止攻击者绕过路由策略
- 防火墙层面限制SYN速率(如iptables限速),不是替代内核防护,而是前置分流,减轻内核处理压力










