HAProxy 可通过连接限制、HTTP 请求校验、速率控制和健康检查等配置缓解常见 DDoS 攻击。例如:限制单 IP 并发连接与新建速率、设置 HTTP 请求超时、校验 Host 头、限制请求体大小、对敏感路径限流、增强后端健康检查并启用熔断机制。

HAProxy 本身不是专门的抗 DDoS 设备,但在高可用架构中,它可作为第一道流量入口,通过合理配置实现对常见 DDoS 攻击(如 HTTP 慢速攻击、连接洪泛、高频请求)的初步缓解。关键不在于“完全拦截”,而在于快速识别异常行为、限制资源消耗、保护后端真实服务。
限制并发连接与连接速率
防止连接层洪泛(SYN Flood、TCP 连接耗尽)的核心手段是控制每 IP 的连接数和新建速率:
- 在 frontend 段启用连接限制:
stick-table type ip size 1m expire 30s store conn_cur,conn_rate(3s)
记录每个客户端 IP 的当前连接数(conn_cur)和 3 秒内新建连接速率(conn_rate) - 拒绝超限连接:
tcp-request connection reject if { src_conn_cur ge 50 } || { src_conn_rate(3s) ge 30 }
单 IP 当前连接 ≥50 或 3 秒内新建连接 ≥30 时直接断开 TCP 握手 - 注意:该策略对 NAT 环境(如企业出口、运营商共享 IP)较敏感,生产环境建议结合
http-request层规则做二次校验
防御 HTTP 慢速攻击与异常请求
针对 Slowloris、RUDY 等利用 HTTP 协议特性的攻击,需强化请求解析阶段的超时与校验:
- 缩短客户端请求读取超时:
timeout http-request 5s
若客户端在 5 秒内未发完完整 HTTP 请求头,HAProxy 主动关闭连接 - 强制要求标准 Host 头并拒绝空/非法值:
http-request deny if !{ hdr(host) -m reg ^[a-zA-Z0-9.-]+:[0-9]+$ } || { hdr(host) -m len lt 4 }
防止无 Host 头或畸形 Host 的扫描类请求穿透 - 限制单请求体大小(防大 payload 耗尽内存):
option http-buffer-request+http-request deny if req_len gt 102400
拒绝超过 100KB 的原始请求(含 headers + body),避免缓冲区膨胀
基于请求频率的简单限流(非替代 WAF)
对应用层高频请求(如暴力遍历、API 扫描),可在 HTTP 层做轻量级速率控制:
- 构建按 IP + URL 路径的请求速率表:
stick-table type ip size 1m expire 1m store http_req_rate(10s) - 对登录、搜索等敏感路径单独限流:
http-request track-sc0 src if { path_beg /login /api/v1/auth }http-request deny if { sc_http_req_rate(0) gt 15 }
同一 IP 在 10 秒内对登录路径发起超 15 次请求即拦截 - 注意:此方式不加密 cookie,不防伪造 IP;仅适用于低强度探测防护,不能替代真实 WAF 或云清洗服务
配合后端健康检查与自动熔断
当 DDoS 导致后端节点响应延迟或失败时,HAProxy 应主动隔离问题节点,避免雪崩:
- 增强健康检查灵敏度:
option httpchk GET /healthhttp-check expect status 200timeout check 2sfall 3 rise 2
快速发现后端异常(2 秒超时、连续 3 次失败下线) - 启用连接队列与拒绝策略,防自身被压垮:
maxconn 10000balance leastconnoption http-keep-alive
避免连接堆积导致 HAProxy 内存耗尽









