iptables限制单ip并发连接数是防御cc攻击最直接有效的手段,通过connlimit模块控制每个源ip的established/related状态连接数,需结合业务设合理阈值(如官网20–30、api 50–100),并可配合recent模块防短时高频建连。

用 iptables 限制单一 IP 并发连接数,是防御 CC 攻击最直接有效的手段之一。核心在于控制每个 IP 当前活跃的 TCP 连接数量,而不是请求次数或速率——因为 CC 攻击常伪装成合法 HTTP 流量,只靠限速难以识别,而真实用户极少同时维持大量长连接。
确认系统支持 connlimit 模块
该功能依赖内核模块 xt_connlimit,多数现代发行版(CentOS 7+/Ubuntu 18.04+、内核 ≥3.10)已默认启用。验证方式:
- 运行 lsmod | grep connlimit,有输出即表示已加载
- 若无结果,需检查内核配置:zcat /proc/config.gz | grep CONFIG_IP_NF_CONNLIMIT(或查看 /boot/config-$(uname -r)),确认值为 y 或 m
- 不支持时不能仅靠升级 iptables,必须更新内核或重新编译模块
基础防护规则写法与含义
典型规则如下(以 Web 服务 80 端口为例):
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 15 -j DROP- -m connlimit:调用连接数限制扩展模块
- --connlimit-above 15:对当前已建立的并发连接数进行统计,超过 15 即触发动作
- 统计维度是“每个源 IP”,且只计算处于 ESTABLISHED 或 RELATED 状态的连接(不包含 SYN_RECV 等半开状态)
- 该规则应放在允许 SSH、放行已建连接(ESTABLISHED,RELATED)等规则之后,避免误拦
按业务场景合理设置阈值
硬套“10 连接”可能误伤正常用户。需结合实际访问模型调整:
- 普通企业官网/博客:建议 20–30(兼顾移动端多标签页、图片懒加载等)
- API 服务(如 RESTful 接口):可设为 50–100,因客户端常复用连接(Keep-Alive)
- 后台管理或数据库端口(如 3306、6379):强烈建议 ≤ 3–5,非运维 IP 几乎不该持续连入
- HTTPS(443 端口):通常比 HTTP 更高,因 TLS 握手开销大,可设为 25–40
配合 recent 模块做时间窗口补充防护
connlimit 防并发,recent 可防短时密集新建连接(比如 1 秒内建 20 个新会话)。两者互补:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name http_new --setiptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name http_new --update --seconds 5 --hitcount 8 -j DROP
- 第一行标记每个新连接的源 IP
- 第二行检查:同一 IP 在 5 秒内新建连接 ≥ 8 次,即丢弃
- 这种组合能覆盖“低并发但高频建连”的绕过行为,比单用 connlimit 更健壮










