抵御隐蔽的慢速连接攻击:我用 Claude 编写 nftables 规则,精准压制 HTTP Slo

一、 痛点:不耗带宽却能瘫痪 Web 服务的"隐性杀手"

在管理 Web 托管服务器、虚拟主机集群或各类云控制面板环境时,大多数运维人员熟悉的 DDoS 攻击通常是突发的大流量 UDP Flood、NTP 放大攻击或 SYN Flood。这类攻击以"力破巧",通过短时间内灌满网卡带宽来达到瘫痪服务的目的,但它们特征显著,极易触发机房的上游黑洞清洗或云厂商的流量防御。

然而,网络空间中还存在一种极其阴险的 Layer 7 应用层攻击------Slowloris(慢速 HTTP 攻击)

与动辄数十 Gbps 的蛮力攻击不同,Slowloris 攻击者不需要庞大的带宽资源,甚至只需要使用几台低配 VPS 或少量 Bot 节点,就能轻松瘫痪一台配置精良的 Web 服务器。其攻击逻辑精妙而致命:

  1. 建立合法 TCP 连接: 攻击者向目标的 80/443 端口发起成百上千个标准的 TCP 三次握手;

  2. 极速发送不完整报文: 随后发送 HTTP 请求头(Header),但故意不发送结尾的空行(\r\n\r\n

  3. "滴灌式"维持连接: 攻击者以极慢的速度(例如每隔 10~15 秒)向服务器仅发送一个字节的无意义数据包;

  4. 耗尽 Worker 进程池: Web 服务器(如 Apache、Nginx 或 Node.js)的底层网络模型不得不将这些连接一直挂起并维持在 ESTABLISHED 状态,等待后续"永远不会完整到达"的请求头。

在极短时间内,Web 服务器的 Worker 线程池、并发连接句柄(max_clients / worker_connections)就会被彻底占满。此时,真实的合规用户访问将全部陷入无限等待,或者直接收到 508 Resource Limit Reached504 Gateway Timeout 报错,而服务器的 CPU 和带宽占用率却几乎为零。

这种攻击如同一场隐蔽的"血栓",让传统的带宽型防御沦为摆设,而运维人员想在复杂的应用层代码中逐一排查又极具滞后性。

二、 破局:借助 Claude 提炼 nftables 状态机与连接速率限制

为了在慢速连接流量深入应用层(如 Nginx、Plesk 或 Apache)之前将其切断,我决定将防护阵地直接前移到 Linux 内核的网络协议栈(Netfilter)。在 Claude 的深度架构推理辅助下,我设计并落地了一套自适应的 nftables 动态状态机防护策略

相比于传统的 iptables,现代 Linux 内核内置的 nftables 拥有更高效的数据结构(如 Set 与 Meter)、更低的 CPU 检索开销,以及原生的原子性状态更新能力。

Plaintext

复制代码
[ 慢速攻击者 (Slowloris) 发起成百上千慢速连接 ]
                       │
                       ▼
    [ Linux 内核网络协议栈 (Netfilter / nftables) ]
                       │
  ┌────────────────────┴────────────────────┐
  ▼ (检测针对 80/443 的连接建立速率)           ▼ (匹配已标记的恶意 IP 集)
[ 动态 Meter 限速与并发计数器 ]               [ nftables 内部 set 快速查找 ]
  │                                         │
  ├──► 触发 rate > 20/s 或爆表               └──► 命中匹配: 直接执行 DROP
  └──► 自动归档 IP 至 slowloris_meter (5m)
                       │
                       ▼
   [ 恶意连接在内核层被秒级撕毁 / 零 CPU 消耗 ]
                       │
                       ▼
 [ Web 进程池 (Nginx/Apache Worker) 毫秒级释放,正常访问秒进 ]

1. 基于连接状态的动态 Set & Meter 追踪

传统的 IP 封禁策略极易在多用户共享同一个出口公网 IP(如 NAT 网关、公司局域网)时造成严重的"误伤"。Claude 为我设计了基于 nftables 的动态 setmeter 联合控制架构:

  • 精准粒度识别: 专门追踪针对 80/443 端口的新建连接速率(ct state new)与并发连接总量;

  • 自适应冷却机制: 当某个源 IP 在极短时间内发起的 HTTP 连接数突破设定阈值(如每秒超过 20 个请求),nftables 会以微秒级的响应速度将该 IP 原子化加入 slowloris_meter 动态集合,并开启 5 分钟的惩罚超时。在惩罚期内,该 IP 针对 Web 端口的所有后续数据包将在内核层被瞬间 DROP,根本无法到达上层的 Web 进程。

2. 应用层与内核 TCP Socket 超时联动

除了在 Hook 层拦截新连接,Claude 还指导我重构了内核的网络参数(sysctl),针对处于 FIN_WAIT_2 或长时间处于无有效载荷传输(Payload Deadlock)状态的 TCP Socket 实施快速回收。结合 nftables 的规则,实现了对挂起慢速连接的毫秒级清理。

三、 核心规则实操:生产级 nftables 防御脚本

以下是在 Claude 结对生成并经过实际生产环境压测验证的完整 nftables 核心规则片段:

Code snippet

复制代码
# =====================================================================
# 由 Claude 辅助生成的防御 HTTP Slowloris 慢速攻击的 nftables 规则片段
# 适用场景: Web 托管服务器、多租户面板、高并发 Web 网关防护
# =====================================================================

table inet filter {
    # 1. 定义动态集合:存储触发高频连接与慢速挂起特征的恶意 IPv4 地址
    set slowloris_meter {
        type ipv4_addr
        flags dynamic, timeout
        timeout 5m
    }

    chain input {
        type filter hook input priority filter; policy accept;

        # 允许已建立的合法连接与本地回环流量
        iifname "lo" accept
        ct state established,related accept

        # 2. 检查针对 Web 端口 (80, 443) 的新建 TCP 连接速率
        # 当单个 IP 的新建连接速率超过每秒 20 个 (允许 5 个突发) 时,
        # 自动将该 IP 归入 slowloris_meter 动态集合,并立即 DROP 该数据包
        tcp dport { 80, 443 } ct state new \
            limit rate over 20/second burst 5 packets \
            add @slowloris_meter { ip saddr } drop

        # 3. 针对已经在 slowloris_meter 惩罚集合中的 IP 实施物理丢包
        ip saddr @slowloris_meter tcp dport { 80, 443 } drop
    }
}

配套内核参数优化(配合 Claude 建议,写入 /etc/sysctl.d/99-slowloris-hardening.conf):

Ini, TOML

复制代码
# 缩短孤立 TCP 连接的保活与回收超时,配合 nftables 快速清理卡死连接
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_max_syn_backlog = 4096

四、 方案部署效果对比

将这套基于 nftables 的动态防护策略部署至几台承载着上百个独立站点的 Web 托管服务器后,我们使用测试脚本对其发起了模拟的 Slowloris 慢速连接攻击,测试结果对比极其鲜明:

评估维度 原始 Nginx / Apache 默认配置 仅开启应用层超时限制 Claude 辅助调优的 nftables 策略
遭遇 Slowloris 攻击时 Worker 进程池瞬间耗尽,全站 508/504 稍微缓和,但进程池频繁打满 完全无感,恶意连接在内核层直接拦截
服务器 CPU / 内存开销 应用层内存泄漏,CPU 频繁调度阻塞 较高(应用层需维持频繁的 Timeout 轮询) 极低(Netfilter 内核态处理,几乎不占算力)
正规用户访问影响 严重被拒,响应超时 部分用户受到误伤,访问缓慢 秒级顺畅响应,未触发误伤
攻击防护响应时间 数分钟(等待应用层超时断开) 30秒~1分钟 微秒级(触发 limit 立即丢包)

在实测监控中,当模拟攻击者尝试建立数千个慢速 HTTP 连接时,nftables 规则在不到 1 秒的时间内就捕捉到了其报文特征,并将其 IP 锁定在 slowloris_meter 惩罚集中。服务器的 Nginx 进程池完全未受到任何波动,上百个站点的 HTTPS 首包响应时间(TTFB)依旧保持在几十毫秒的卓越水平。

五、 结语

在互联网安全演进的今天,攻击者的手段正在变得越来越精细与隐蔽。"大流量灌满"的时代正在被针对应用层与协议栈漏洞的"微痛精准打击"所补充。Slowloris 这种不耗带宽却能"四两拨千斤"瘫痪整台服务器的慢速攻击,就是对传统运维思维的一次严峻考验。

通过借助 Claude 深入挖掘 Linux 内核 Netfilter 架构的底层能力,我们成功构建了一套无需依赖昂贵硬件防火墙、无需侵入应用层业务代码的高效防御体系。将无意义的恶意连接阻断在网络协议栈的最前端,把珍贵的系统算力和 Worker 资源留给真实的合法用户,这才是现代系统基础设施运维追求的极致确定性与工程优雅。

相关推荐
fanxiaohui121381 小时前
2026年长效耐用磁吸充电宝推荐|南孚传应解锁安心出游
服务器·人工智能·手机·电池·南孚传应
Gauss松鼠会2 小时前
GaussDB 系统表与系统视图详解(内网运维版)
运维·服务器·网络·数据库·gaussdb·经验总结
小小de风呀2 小时前
de风——【从零开始学习Linux】(五):gcc编译器的基本使用
linux·运维·服务器
数智工坊2 小时前
RustDesk 自建服务器教程
运维·服务器
Julien20042 小时前
Docker 容器技术的本质
运维·服务器·ssh·学习方法
江屿风3 小时前
【Linux系统】【Linux 进程程序替换机制解析及自定义 Shell 核心逻辑实现 】流食般投喂
linux·运维·服务器·开发语言·笔记
好不玩呀3 小时前
一次PXE服务器上IPV6问题的记录
linux·运维·服务器
PiaoKe___5 小时前
云手机原理与 Python 自动化实战:ADB 批量控制、任务调度与落地建议
服务器·arm开发·python·自动化
Madison-No712 小时前
搭建项目测试环境
linux·运维·服务器·python