iptables connlimit模块可实时限制单IP并发连接数,精准防御低频慢速爬虫;需确认内核支持、合理设阈值(如Web服务25、API 60–80、后台≤4),配合recent模块可补防短时高频建连试探。

用 iptables 的 connlimit 模块限制单 IP 并发连接数,是防御低频慢速爬虫攻击最直接有效的方式。这类爬虫不靠高频请求压垮服务,而是维持大量长连接(如 HTTP Keep-Alive、未及时关闭的 TCP 会话),悄悄耗尽服务器连接池或文件描述符。connlimit 在内核层面实时统计每个源 IP 的 ESTABLISHED + SYN_RECV 连接数,无需日志解析、无延迟,正好掐住这类行为的命门。
确认 connlimit 模块已加载并可用
该模块依赖内核支持,不是所有系统默认启用:
- 运行 lsmod | grep xt_connlimit,有输出说明已加载
- 若无结果,执行 modprobe xt_connlimit 尝试手动加载
- 检查内核配置是否支持:zcat /proc/config.gz | grep CONFIG_NETFILTER_XT_MATCH_CONNLIMIT,应返回 =y 或 =m
- 若不支持,仅升级 iptables 无效,需更新内核或重新编译模块
针对 Web 服务设置合理并发阈值
低频慢速爬虫常伪装成正常用户,但真实访问极少长期维持大量并发连接。关键在设对阈值,避免误伤:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 普通官网/博客类站点:建议 --connlimit-above 25(兼顾多标签页、图片/JS 并行加载)
- API 接口服务:可设为 60–80,因客户端普遍复用连接
- 后台管理或敏感端口(如 3306、6379):必须严格,≤4 即可
- 规则要放在放行已建连接(-m state --state ESTABLISHED,RELATED -j ACCEPT)之后,否则会拦截合法回包
正确书写防护规则(含关键细节)
以限制 HTTP(80 端口)为例,推荐写法如下:
- iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 25 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
- --connlimit-mask 32 显式指定按单个 IPv4 地址计数(不可省略,尤其在脚本中)
- 用 REJECT --reject-with tcp-reset 而非 DROP,让客户端立刻断开,不卡在超时等待
- 若服务跑在 HTTPS(443),阈值可略高(如 30),因 TLS 握手开销更大
搭配 recent 模块补防短时建连试探
connlimit 防“多连接”,recent 可补防“快建连”——有些慢速爬虫虽不维持长连接,但会在几十秒内反复新建多个会话试探:
- iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name http_new --set
- iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --name http_new --update --seconds 30 --hitcount 12 -j REJECT
- 含义:同一 IP 在 30 秒内新建连接 ≥12 次即拒绝,不影响正常用户点击跳转
- 需提前调大 recent 模块容量:echo 'options xt_recent ip_list_tot=1024 ip_pkt_list_tot=200' > /etc/modprobe.d/xt_recent.conf,再重载模块

















