最直接有效的方式是使用mod_qos模块,它专为连接层限流设计,能真实统计并拦截established或keepalive状态的tcp连接;需配置qs_srvmaxconnperip限制单ip并发数、qs_srvmaxconn设全站上限,并同步加固内核syn队列。

最直接有效的方式是使用 mod_qos 模块,它专为连接层限流设计,能真实统计并拦截处于 ESTABLISHED 或 KEEPALIVE 状态的 TCP 连接,对慢速长连接(如 Slowloris 类攻击)真正有效。
推荐方案:mod_qos(精准控制连接态)
Apache 自身不支持原生单 IP 并发连接数限制,mod_qos 是生产环境验证过、轻量且可靠的首选方案。它工作在请求接入层,不依赖请求内容,直接管控 socket 级连接。
- 启用后配置两个核心指令:
QS_SrvMaxConnPerIP 10—— 全局限制每个客户端 IP 最多维持 10 个并发连接(含 Keep-Alive)QS_SrvMaxConn 200—— 同时设置服务器总连接上限,防止单 IP 被限但其他 IP 突增挤占全部资源 - 注意:该模块统计的是 Apache worker 中真实活跃的 TCP 连接数,不是 HTTP 请求次数,因此比“每秒请求数”类方案更贴近资源耗尽风险场景
- 安装后务必重启 Apache,并确认模块已加载:
apachectl -M | grep qos
备选方案:mod_limitipconn(简单易用,适合下载类场景)
如果只需基础限制(如防止多线程下载打爆带宽),mod_limitipconn 更轻量、配置更直观,但它仅在 Apache 的请求处理阶段生效,对空闲长连接无感知。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Debian/Ubuntu:直接安装
libapache2-mod-limitipconn;CentOS/RHEL 需从源码编译或启用 EPEL - 配置示例(写入虚拟主机或主配置):
<ifmodule mod_limitipconn.c><br> <location></location><br> MaxConnPerIP 5<br> NoIPLimit image/*<br> <br></ifmodule> - 效果:超限时返回
503 Service Unavailable,适用于静态资源、下载目录等明确路径的限制
必须同步加固内核网络栈
仅靠 Apache 层限制不够——攻击者可能绕过应用层,直接填满 TCP 半连接队列(SYN-RECV),导致 accept() 阻塞。需配合以下内核参数:
-
net.ipv4.tcp_synack_retries = 3—— 减少 SYN-ACK 重试次数,加速半连接释放 -
net.ipv4.tcp_syncookies = 1—— 开启 SYN Cookie,抵御 SYN Flood - (可选)结合
iptables -m limit限制新建连接速率,如:iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 20/sec --limit-burst 50 -j ACCEPT
验证是否真正生效
不要只看日志或配置是否加载,要实测连接态:
- 用
ab -n 100 -c 50 http://your-site/发起高并发请求 - 立即执行:
ss -tn src <client-ip> | grep :80 | grep ESTAB | wc -l</client-ip>(替换为你的测试 IP) - 结果应稳定在
QS_SrvMaxConnPerIP或MaxConnPerIP设定值附近,而非持续增长









