防重放窗口的机制
ESP 报文头部带一个 32 位序列号,发送端每发一个包递增。接收端维护一个滑动窗口:窗口内的序列号只接受一次,重复的判定为重放并丢弃;落在窗口之前的老序列号同样丢弃。这样能防止攻击者抓包重放。窗口大小决定了能容忍多大的乱序:链路存在多路径或负载均衡时,报文到达顺序可能被打乱,窗口过小会把还没到齐的包误判为过期而丢掉,表现为零星丢包。窗口越大抗乱序能力越强,但需要维护的状态也更多。关闭防重放能解决个别场景的丢包,但会削弱安全属性,必须经过评审。
基本信息
| 机制 | 滑动窗口校验序列号,重复或过期报文被丢 |
|---|---|
| 默认窗口 | 多数实现默认取值较小(常见 64) |
| 可调范围 | 按平台支持,常见可调到 1024 或更大 |
| 乱序链路 | 多路径场景可评估放大窗口 |
| 关闭方式 | replay disable,谨慎使用并走评审 |
| 查看 | show crypto ipsec sa 中的 replay 相关计数 |
典型使用场景
- 多路径或负载均衡链路:丢包疑似乱序导致时调整窗口
- 排障确认丢包类型:SA 计数显示 replay 丢弃增长
- 安全评审:说明窗口取值与业务需求的关系
- 验收测试:打流时观察 replay 丢弃计数是否为零
- 高吞吐场景:窗口状态开销与设备能力的评估
配置与统计
配置与统计
# 放大防重放窗口
crypto ipsec security-association replay window-size 1024
! 查看窗口与实际被丢弃的计数
show crypto ipsec sa | include replay|pkts
show crypto ipsec sa detail | include anti-replay
! 华为侧对照
display ipsec sa | include anti-replay
! 变更后打流验证丢包是否消失
iperf3 -c 10.2.2.10 -u -b 20M -t 60窗口大小取舍
| 窗口设置 | 收益 | 代价 |
|---|---|---|
| 较小 | 状态开销低,安全属性强 | 乱序链路易丢包 |
| 较大 | 容忍更多乱序,减少误丢 | 状态与处理开销上升 |
| 关闭防重放 | 彻底避免乱序误丢 | 丧失重放防护,需评审 |
| 改动未验证 | — | 可能掩盖真实的链路质量问题 |
replay 丢弃计数增长不等于链路质量问题:先确认是否存在多路径与乱序,再决定是否调整窗口。
关闭防重放会削弱 IPsec 的安全属性,可能不满足合规要求;如确实需要,应保留变更记录与评审结论。