别让 DDoS 刷爆你的钱包:为你的VPS加一个保险丝
侧边栏壁纸
  • 累计撰写 9 篇文章
  • 累计收到 11 条评论

别让 DDoS 刷爆你的钱包:为你的VPS加一个保险丝

khalil
2026-01-12 / 7 评论 / 52 阅读 / 正在检测是否收录...

0x01 前言
作为一名 VPS 用户,最担心的不是服务器宕机,而是半夜醒来发现服务器被 DDoS 攻击,导致流量包耗尽甚至产生巨额扣费。虽然我们可以通过隐藏 IP、设置 404 等方式规避攻击,但面对大流量冲击,这些手段往往力不从心。
如果黑客针对你的 IP 发起 DDoS 攻击,即便你设置了 404 或空响应,你的流量依然会飞速消耗。
1.为什么 404 挡不住流量消耗?
流量计费通常是在机房的出口路由器上统计的。
• 下行流量(入站): 黑客发给你的 10GB 数据,即使你的服务器选择“丢弃”或“拒绝”,这些数据也已经跑过了机房的网线,算进了你的入站流量。
• 上行流量(出站): 虽然 404 返回的数据很小,但在大规模攻击下(每秒几万次请求),成千上万个 404 响应累积起来也是一笔可观的流量。
2.针对 服务器流量 的“保命”建议
为了防止流量被刷光,我们可以采取以下几阶策略:
第一阶:利用防火墙(内核级拦截)
不要让请求到达 你的各种面板 直接在系统底层把它杀掉。
• 设置 IP 白名单: 如果你只有自己用,且有固定 IP 或者能通过 DDNS 获得 IP,直接封死端口。
第二阶:套用 CDN(隐藏真实 IP)
这是防止流量被刷的终极手段。

使用 Cloudflare 等服务,将域名指向 CF,然后在服务器防火墙上只允许 Cloudflare 的 IP 访问。

效果: 黑客只能攻击到 Cloudflare 的节点,打不到你的 VPS。Cloudflare 免费版提供无上限的 DDoS 防护,你不用担心流量被刷。

第三阶:就是今天的“断路器”方案脚本自动关机(止损)
通过脚本监控实时流量,一旦超标立即触发 Formspree 邮件告警并自动关机。

0x02 核心原理
该方案基于 Linux 的轻量级流量监控工具vnstat
监控:每 2 分钟检查一次过去 1 小时的入站+出站总流量。

判断:如果流量超过预设阈值(如 50GB/小时),判定为异常攻击。

告警:利用 Formspree 的 HTTPS 接口绕过机房对 SMTP 端口的封锁,发送邮件通知。

自保:执行 shutdown 关机指令,切断流量计费。
0x03 准备工作
在开始之前,我们需要安装必要的依赖工具。以 Debian/Ubuntu 为例:
你需要安装 vnstat。


# Ubuntu/Debian
sudo apt update && sudo apt install vnstat -y

然后确认网卡名称
你需要告诉脚本监控哪张网卡。执行以下命令:

ip add

你会看到类似 eth0、ens3 或者 venet0 的名字。记住这个名字。

Debian 系统需要安装 bc 来处理数字计算,安装 jq 来解析 vnstat 的数据:

apt update && apt install bc jq -y

安装后,请确保它正在运行:

systemctl enable --now vnstat

vnstat 安装后需要一点时间来记录流量。如果提示 Not enough data available yet,不用担心,等 5 分钟数据就出来了。
这会儿你可以先运行:


vnstat -i eth0  # 把 eth0 换成你刚才查到的网卡名

0x04 思考一下我们需不需要一个流量告警关机的推送
在正式开始创建熔断脚本时候,需要思考你需要在熔断的时候让vps给你一个推送吗?

由于这两天折腾了自己的个人简历,使用了Formspree(实际就是一个表单链接,有人给这个链接发消息,他就帮你转到你邮箱去),我问了下Gemini,
实际上我目前能想到的方法有几种
1.用自己的微信公众号推送
2.用telegram推
3.用邮箱推
4.反正方法挺多,大家可以自行发散

我当时去问Gemini一开始让我用电报,然后用邮箱,我给他提的用 Formspree,结果Gemini说Formspree 是一个非常聪明的办法!
它完全绕过了 VPS 服务商对 SMTP(25/465/587 端口)的封锁,因为它使用的是标准的 HTTPS (443 端口) 发送数据。
这种方式本质上是把服务器的告警信息当作一个“表单提交”发给 Formspree,然后由 Formspree 转发到你的邮箱。
OK,那我这一次就用Formspree。
准备 Formspree

  1. 前往 Formspree.io 注册个账号。
  2. 创建一个新表单 (New Form),命名为“VPS Guard”。
  3. 复制它给你的 Endpoint URL,这个URL再这儿https://formspree.io/forms/xbddrngq/integration

(看起来像 https://formspree.io/f/xoqyzabc)。这个xoqyzabc就是你的ID。
正式开始写脚本,我们把脚本放在 /root/guard.sh:

nano /root/guard.sh

“邮件/Formspree版”脚本
我们利用 curl 来提交表单。编辑 /root/guard.sh:

0x05 正式开始编写这套保险丝脚本

#!/bin/bash

# --- 配置区 ---
INTERFACE="eth0"
LIMIT_GB=50
FORMSPREE_URL="https://formspree.io/f/你的id"
HOSTNAME=$(hostname)

# --- 核心逻辑 ---
# 获取过去一小时流量 (JSON 格式提取)
DATA=$(vnstat -i $INTERFACE --json h 1)
RX=$(echo $DATA | jq '.interfaces[0].traffic.hour[0].rx // 0')
TX=$(echo $DATA | jq '.interfaces[0].traffic.hour[0].tx // 0')

TOTAL_BYTES=$((RX + TX))
TOTAL_GB=$(echo "scale=2; $TOTAL_BYTES / 1024 / 1024 / 1024" | bc)

# 打印状态到日志
echo "$(date): 当前一小时已用 $TOTAL_GB GB" >> /tmp/guard.log

# 触发判断
if (( $(echo "$TOTAL_GB > $LIMIT_GB" | bc -l) )); then
   MSG="🚨【流量熔断】服务器 $HOSTNAME 流量已达 ${TOTAL_GB}GB,超过阈值,正在强制关机!"
   
   # 发送告警
   curl -s -X POST "$FORMSPREE_URL" -d message="$MSG"
   
   sleep 3
   /sbin/shutdown -h now
fi

OK,脚本编写完毕在脚本正式部署前,手动跑一行测试,看看邮箱能不能收到:

curl -X POST "https://formspree.io/f/你的ID" -d "message=测试:Formspree告警通道正常"
到这一步,如果你的邮箱能够正确的接收到推送。 Test
再等几分钟

  1. 验证日志

运行几分钟后,你可以输入以下命令查看你的VPS保镖是否在正常记录:

cat /tmp/guard.log

Test
0x06 自动化部署
赋予权限与计划任务


# 赋予执行权限
chmod +x /root/guard.sh

# 写入计划任务 (每2分钟检查一次)
(crontab -l 2>/dev/null; echo "*/2 * * * * /bin/bash /root/guard.sh") | crontab -

至此你的VPS 现在已经具备了“自动保险丝”。

⚠️ 特别提醒(如果你和我一样用的 Racknerd)
流量额度计算: Racknerd 的套餐流量通常是单向计费(入站或出站取大值),但攻击发生时,入站流量会远大于出站。脚本中计算的是 RX+TX(总流量),这比官方统计更严格,能更早触发保护。
手动开机: 一旦脚本执行了 shutdown,你必须登录 Racknerd 的 SolusVM 面板 点击 "Start" 才能重新启动。
重置计数: 开机后如果攻击停了,记得运行 vnstat -i eth0 --xml --clear,否则在当前这个小时结束前,它可能还会把你关掉。

1

评论 (7)

取消
  1. 头像
    khalil 作者
    Windows 10 · Google Chrome

    画图

    回复
  2. 头像
    yyy
    Android · Google Chrome

    抖音来的 整的可以🤩表情

    回复
    1. 头像
      khalil 作者
      Windows 10 · Google Chrome
      @ yyy

      画图

      回复
  3. 头像
    Birdy
    iPhone · Safari

    画图

    回复
    1. 头像
      khalil 作者
      Windows 10 · Google Chrome
      @ Birdy

      画图

      回复
  4. 头像
    34234
    Windows 10 · Google Chrome

    画图

    回复
  5. 头像
    建军节
    Android · Google Chrome

    好好谈谈家

    回复