第218篇:网络攻击基础:SYN Flood、ICMP Flood
关键词:SYN Flood、ICMP Flood、DDoS攻击、TCP三次握手、半连接队列、 syn-cookies、速率限制、攻击检测、流量清洗
一、引言
在第217篇中,我们学习了 DNS 过滤与防域名劫持的安全防护技术。DNS 攻击只是网络攻击的一个侧面。在网络安全的广阔领域中,拒绝服务攻击(Denial of Service, DoS)及其分布式变体(DDoS)是最直接、最常见的攻击方式之一。
SYN Flood 和 ICMP Flood 是两种经典的 DoS 攻击手段。它们分别利用了 TCP 协议的三次握手机制和 ICMP 协议的特性,通过消耗目标服务器的资源(连接队列、带宽、CPU)使其无法正常服务。理解这些攻击的原理和防护机制,是网络安全的必修课。
二、核心概念
2.1 TCP 三次握手回顾
TCP 连接的建立需要三次握手:
| 步骤 | 报文 | 标志位 | 说明 |
|---|---|---|---|
| 第 1 步 | SYN | SYN=1 | 客户端发送 SYN,进入 SYN_SENT 状态 |
| 第 2 步 | SYN-ACK | SYN=1, ACK=1 | 服务端回复 SYN-ACK,进入 SYN_RCVD 状态 |
| 第 3 步 | ACK | ACK=1 | 客户端发送 ACK,连接建立,进入 ESTABLISHED 状态 |
2.2 SYN Flood 攻击原理
SYN Flood 攻击利用 TCP 三次握手中"半连接"(Half-Open Connection)的状态维持机制。攻击者向目标服务器发送大量伪造源 IP 的 SYN 报文,服务器为每个 SYN 分配资源并回复 SYN-ACK,但由于源 IP 是伪造的,SYN-ACK 无法到达攻击者,第 3 步的 ACK 永远不会到达。服务器的半连接队列被耗尽,无法接受新的合法连接。

2.3 ICMP Flood 攻击原理
ICMP Flood 攻击通过向目标发送大量 ICMP 报文(通常是 Echo Request,即 ping 请求),消耗目标服务器的带宽和处理能力。与 SYN Flood 不同,ICMP Flood 是一种带宽消耗型攻击,攻击效果取决于攻击流量大小与目标带宽的比例。
| 攻击类型 | 消耗资源 | 攻击特征 |
|---|---|---|
| SYN Flood | 服务器连接队列、CPU | 大量半连接、源 IP 伪造 |
| ICMP Flood | 带宽、CPU | 大量 ICMP Echo Request |
| UDP Flood | 带宽、UDP 端口 | 大量 UDP 报文到随机端口 |
| HTTP Flood | 应用层资源 | 大量 HTTP 请求(模拟正常用户) |
2.4 DoS 与 DDoS 的区别
| 维度 | DoS(拒绝服务) | DDoS(分布式拒绝服务) |
|---|---|---|
| 攻击源 | 单一来源 | 多个来源(僵尸网络) |
| 攻击规模 | 小(单点) | 大(TB 级别) |
| 防护难度 | 较低(封锁源 IP) | 较高(源 IP 分散且伪造) |
| 常见工具 | 自制脚本 | Botnet、僵尸网络 |
| 检测方式 | 源 IP 流量突增 | 整体流量突增、模式异常 |
三、技术细节
3.1 SYN Flood 攻击参数
| 参数 | 说明 |
|---|---|
| 半连接队列长度 | 默认约 128-1024 个(系统相关) |
| SYN-ACK 重试次数 | 通常 5 次,每次间隔加倍 |
| SYN-ACK 重试超时 | 总计约 3 分钟 |
| TCB 资源占用 | 每个半连接约 256 字节 |
| 攻击效果 | 每秒数千 SYN 即可耗尽队列 |
3.2 SYN Flood 防护机制
| 防护机制 | 原理 | 优缺点 |
|---|---|---|
| 增大半连接队列 | 扩大 syn-backlog 队列长度 | 简单但治标不治本 |
| 减小 SYN-ACK 重试超时 | 快速释放无效半连接 | 可能影响正常慢速客户端 |
| Syn-Cookie | 不使用队列,通过哈希计算验证 SYN | 最有效但增加 CPU 开销 |
| 速率限制(Rate Limit) | 限制单位时间内的 SYN 报文数量 | 可能误伤正常高并发用户 |
| 状态检测防火墙 | 仅允许有完整 TCP 三次握手的连接 | 需要状态检测能力 |
| 流量清洗 | 在云端或网络边缘清洗恶意流量 | 需要专门的清洗设备 |
3.3 Syn-Cookie 工作原理
Syn-Cookie 是应对 SYN Flood 最有效的单机防护机制。其核心思想是不使用半连接队列,而是通过加密哈希算法将连接信息编码到 SYN-ACK 的序列号中:
- 服务器收到 SYN 后,不分配 TCB,而是计算一个基于源 IP、源端口、目标 IP、目标端口和密钥的哈希值
- 将哈希值作为 SYN-ACK 的初始序列号发送
- 当客户端回复 ACK 时,服务器验证 ACK 的确认号是否匹配预期的哈希值
- 验证通过后才分配 TCB 建立连接
3.4 ICMP Flood 防护机制
| 防护机制 | 原理 |
|---|---|
| ICMP 速率限制 | 限制单位时间内 ICMP 报文的数量 |
| ICMP 类型过滤 | 仅允许必要的 ICMP 类型(Echo Reply、Time Exceeded 等) |
| 黑名单封锁 | 检测并封锁攻击源 IP |
| 流量镜像清洗 | 将流量镜像到清洗设备进行深度分析 |
| CDN/Anycast 分流 | 通过 CDN 分散流量,稀释攻击效果 |
四、实战配置/案例分析
4.1 华为 USG 防火墙:SYN Flood 防护配置
# ========== SYN Flood攻击防护配置 ==========
system-view
sysname HQ-Firewall
# 1. 启用状态检测防火墙的SYN Flood防护
security-policy
rule name Anti-SYN-Flood
source-zone untrust
destination-zone dmz
action permit
service tcp
attack-defense syn-flood
mode auto
enable
# 设置SYN速率阈值(每5秒的SYN报文数)
threshold 1000
# 超过阈值后的动作
action deny
# 学习模式时长(秒)
learning-time 120
quit
quit
quit
# 2. 配置TCP Syn-Cookie
tcp syn-cookies enable
# 3. 调整TCP参数
tcp syn-retry-count 3
tcp syn-keep-interval 500
# 4. 配置连接数限制
security-policy
rule name Connection-Limit
source-zone untrust
destination-zone dmz
action permit
service tcp
limit-connection
max-connection 50000
new-connection-rate 1000
quit
quit
quit
# 5. 配置IP频率限制
anti-attack
ip-frequency
syn
enable
reference-time 5
threshold 200
action black-list
black-list-time 300
quit
quit
quit
4.2 华为 USG 防火墙:ICMP Flood 防护配置
# ========== ICMP Flood攻击防护配置 ==========
# 1. 配置ICMP速率限制
security-policy
rule name ICMP-Rate-Limit
source-zone untrust
destination-zone trust
action permit
service icmp
attack-defense icmp-flood
enable
threshold 100
reference-time 5
action deny
quit
quit
quit
# 2. 限制ICMP类型(仅允许必要类型)
acl 3000
# 允许ICMP Echo Reply(0)
rule 5 permit icmp icmp-type echo-reply
# 允许ICMP Time Exceeded(11) - 用于traceroute
rule 10 permit icmp icmp-type time-exceeded
# 允许ICMP Destination Unreachable(3)
rule 15 permit icmp icmp-type unreachable
# 允许ICMP Echo Request(8)但限制速率
rule 20 permit icmp icmp-type echo
# 拒绝其他ICMP类型
rule 100 deny icmp
quit
# 3. 配置安全策略应用ICMP过滤
security-policy
rule name ICMP-Filter
source-zone untrust
destination-zone trust
action permit
service custom-icmp-filter
quit
quit
# 4. 配置ICMP Flood攻击检测告警
anti-attack
icmp
echo-flood
enable
reference-time 5
threshold 500
action black-list
black-list-time 600
quit
quit
quit
4.3 故障排查案例:Web 服务器遭受 SYN Flood 攻击
故障现象:企业 Web 服务器突然无法响应,用户访问网站超时。服务器 CPU 占用率正常,但新建连接数极高。
排查步骤:
- 检查服务器连接状态
# 在服务器上检查TCP连接状态
netstat -an | grep SYN_RCVD | wc -l
# 输出: 4096(半连接队列已满)
netstat -an | grep ESTABLISHED | wc -l
# 输出: 50(正常连接数很少)
- 检查防火墙攻击日志
display security log attack-defense
发现大量 SYN Flood 攻击告警,来源 IP 分布在全球多个地区。
- 分析攻击流量
display attack-defense syn-flood statistics
显示每秒 SYN 报文数量超过 10000 个,远超正常水平(正常约 100-500 个/秒)。
-
根因分析 这是一次典型的 SYN Flood DDoS 攻击,攻击者利用僵尸网络从多个 IP 地址发起 SYN Flood 攻击,攻击流量超过企业出口带宽的 3 倍。防火墙的状态检测功能已开始工作,但攻击流量过大,部分恶意 SYN 仍到达服务器。
-
解决方案
# 立即措施:启用最严格的SYN防护
tcp syn-cookies enable
# 提高SYN速率限制的严格度
anti-attack
ip-frequency
syn
threshold 100
reference-time 5
action black-list
black-list-time 600
quit
quit
quit
# 长期措施:配置流量清洗联动
traffic-director
anti-ddos enable
threshold 80
action scrub
scrub-server 203.0.113.100
quit
# 联系云服务商启用DDoS清洗服务
启用 Syn-Cookie 后,服务器的半连接队列不再被消耗,Web 服务在 2 分钟内恢复正常。长期部署了流量清洗服务后,后续的攻击流量在进入企业网络前已被清洗。
五、总结
| 知识点 | 要点 |
|---|---|
| SYN Flood | 利用 TCP 三次握手半连接队列耗尽服务器资源 |
| ICMP Flood | 通过大量 ICMP 报文消耗带宽和 CPU |
| Syn-Cookie | 最有效的单机 SYN Flood 防护机制 |
| 速率限制 | 限制单位时间内的 SYN/ICMP 报文数量 |
| 状态检测 | 防火墙通过 TCP 状态检测丢弃异常连接 |
| DDoS 清洗 | 大规模攻击需在云端或网络边缘进行流量清洗 |
| 黑名单 | 自动封锁高频攻击源 IP |
| 综合防护 | 多层防护(防火墙 + 清洗 + CDN)才能应对大规模 DDoS |
思考
- Syn-Cookie 机制不需要维护半连接队列,理论上可以抵御任意规模的 SYN Flood 攻击。但为什么 Syn-Cookie 不是所有操作系统的默认配置?它有什么局限性?
- 如果攻击者使用真实的源 IP 地址发起 SYN Flood 攻击(不伪造 IP),Syn-Cookie 和速率限制还能有效防护吗?攻击效果会有什么变化?
- 在区分 SYN Flood 攻击流量和正常的高并发 TCP 连接建立时,有哪些统计特征可以用于精确识别?
下篇预告:第219篇:Anti-DDoS 防护机制