HAProxy 如何防止 CC 攻击限制单一 IP 请求频率?
基于 2025 年 11 月 9 日发布的 HAProxy 1.9.6 版本实战数据,配置timeout http-request 5s可在 5 秒内自动断开未完成请求的连接,有效防御 Slowloris 类 CC 攻击。
原因分析
CC 攻击(Challenge Collapsar)通过模拟大量合法用户请求耗尽服务器资源,典型特征为 CPU 使用率突然飙升至 90% 以上且无法通过扩容缓解。攻击者利用僵尸网络从全球不同 IP 发起请求,若通过日志分析发现单个 IP 每秒请求超过 100 次,即可判定为异常流量。
解决方案
1. 内核层防护:编辑/etc/sysctl.conf,设置net.ipv4.tcp_max_syn_backlog=1024并执行sysctl -p,防止 TCP syn flood 攻击。
2. HAProxy 连接限制:在 backend 配置中为每台服务器设置maxconn 100,例如server srv1 192.168.1.2:80 check cookie srv1 maxconn 100,限制单节点并发连接数。
3. 请求超时控制:在 defaults 段配置timeout http-request 5s,当用户请求时间超过设定值时断开连接,测试验证返回HTTP/1.0 408 Request Time-out。
4. 实时日志监控:使用命令awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20统计单位时间内请求量最高的 IP,识别攻击源。
注意事项
编译 HAProxy 时建议开启--enable-debug选项,运行时可通过echo "show info" | socat stdio /var/run/haproxy.sock获取线程状态,曾发现有实例因正则表达式匹配陷入 ReDoS 陷阱导致 CPU 占用异常高。
参考来源
来源:HAProxy 1.9.6 源码包高性能负载均衡实战 - 2025 年 11 月 9 日发布
来源:配置 Haproxy 防止 DDOS 攻击 - 2016 年 11 月 23 日资料
来源:服务器被 CC 攻击怎么办:全方位防御与应急指南 - 2025 年 10 月 24 日撰