挑战 ACK 与限速参数
当内核收到落在接收窗口之外的 ACK 时,无法判断是真实乱序还是伪造报文,于是回送一个挑战 ACK 要求对端带上正确的序号。攻击者可以构造大量这类报文诱导内核持续响应,net.ipv4.tcp_challenge_ack_limit 就是给单位时间内的挑战 ACK 数量设上限,属于安全侧参数。
基本信息
| 参数名 | net.ipv4.tcp_challenge_ack_limit |
|---|---|
| 文档默认值 | 100,实际以本机 sysctl 查询为准 |
| 查看命令 | sysctl net.ipv4.tcp_challenge_ack_limit |
| 功能开关 | net.ipv4.tcp_challenge_ack 控制是否启用挑战 ACK 机制 |
| 持久化位置 | /etc/sysctl.d/ 下的配置文件 |
典型使用场景
- 安全基线核查:确认该值与发行版文档一致,而不是长期空置
- 排查 SYN 或 ACK 洪泛类告警时,核对响应放大是否受到限制
- 内核升级后回归安全参数,确认默认值变化是否符合预期
- 变更前的现状留档,便于出问题时快速回滚
查看与配置
查看与配置
sysctl net.ipv4.tcp_challenge_ack_limit # 查看当前生效值
sysctl net.ipv4.tcp_challenge_ack # 确认挑战 ACK 机制是否启用
echo 'net.ipv4.tcp_challenge_ack_limit = 100' > /etc/sysctl.d/99-net-sec.conf
sysctl --system # 重新加载并让配置持久化与相邻参数的区别
| 参数 | 限制对象 | 典型用途 |
|---|---|---|
| tcp_challenge_ack_limit | 单位时间内挑战 ACK 的发送数量 | 抑制伪造 ACK 引发的响应放大 |
| tcp_invalid_ratelimit | 对无效报文回送 RST 的速率 | 缓解盲重置类攻击 |
| tcp_syncookies | 半连接队列满时的 SYN 处理方式 | 抵御 SYN 洪泛 |
吞吐与延迟问题通常与该参数无关,不要把它当成网络调优对象。改动前先记录初始值,不同内核版本与发行版的默认值存在差异,对比要以本机实测为准。
把该参数调得过大等于放大响应能力,可能在伪造 ACK 场景下被利用;调整必须基于明确的安全评估,并在变更记录中写清理由与回滚方法。
核查与变更顺序
- 先用 sysctl 读取本机实际取值,不要用文档默认值代替实测结果
- 结合 tcp_challenge_ack 开关判断机制是否处于启用状态
- 怀疑存在响应放大时,抓包统计单位时间内回送的 ACK 数量
- 任何修改都写入配置文件并记录回滚方法,避免只改运行态