有一天,我发现我的 VPS 被悄悄吃掉了 700 多 GB 流量(以及我后来是怎么一台一台把 VPS“养乖”的)

内容纲要

事情的起点其实非常日常。

那天我只是随手点开 VPS 面板,看了一眼状态,然后整个人停住了。

Bandwidth Used:738.62 GB

不是那种“哎呦用多了点”,
而是那种——我根本不记得我什么时候干过任何配得上 700GB 的事

第一反应不是慌,而是有点不服:

不可能吧?我最近也没跑模型,也没下什么东西。


先别急着怪世界,看看系统自己怎么说

我做的第一件事很简单,上服务器,直接问内核:

ip -s link

我想看的不是“感觉”,而是系统账本

结果很干净:

  • RX / TX 加起来,只有几十 MB
  • 和面板上的 738GB 完全对不上

这一步直接把问题缩小到了一个范围:

700GB 不是“现在正在发生的事”
而是某个我没注意到的过去

这时候,事情就已经开始不对劲了。


接下来,系统自己开始“说漏嘴”

我重新 SSH 登录了一次。

然后终端里开始冒出一些不该出现的东西

  • 登录就报错
  • /etc/profile 里反复尝试执行一个隐藏程序
  • 失败了就 sleep,然后又被 kill
  • 输出里还有一句怎么看都不像 Ubuntu 的话

那一刻其实不用再查太多了。

经验告诉我,这已经不是:

  • “我之前装了什么忘了”
  • “环境有点乱”

而是:

这台系统,本身已经不干净了


一个当下不太爽,但事后很庆幸的决定

我没有继续深挖 cron、systemd、隐藏进程。

原因很简单:

我不是在做安全取证
我是要用这台机器继续干活

被入侵过的 VPS,有一个很残酷的事实:

你永远无法 100% 确定你清干净了

所以我直接做了一个决定:

不清理了,直接重装系统

说实话,点下“Reinstall OS”的那一刻,人反而轻松了。


重装之后,我做的第一件事:先止血

我干的第一刀:不再用 22 端口

我以前也知道 22 会被扫,但总觉得:

“我密码也不弱,应该没事吧。”

现在回头看,这就是侥幸。

我上来就改 SSH 端口:

nano /etc/ssh/sshd_config

加一行:

Port 30222

然后重启:

systemctl restart sshd

注意:这时候我没断开当前连接。

我在本机新开一个窗口试了一下:

ssh -p 30222 root@<IP>

能进,才继续。

接着,才把 22 真正关掉。


第二刀,才是真正的分水岭:我关掉了密码登录

说实话,这一步我以前是拖着不做的。

但这次 700GB 直接给我上了一课。

先在本地生成 key(Windows)

ssh-keygen -t ed25519

把公钥贴到服务器

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

然后,我在本机重新连了一次:

ssh -p 30222 root@<IP>

没有要密码,直接进。

这一步确认完,我才动手关密码:

nano /etc/ssh/sshd_config

改成:

PasswordAuthentication no
ChallengeResponseAuthentication no

重启:

systemctl restart sshd

那一刻的感觉很明确:

这台机器,终于只认“我这把钥匙”了


中间踩了个小坑:vnstat

我想把“流量到底去哪了”这件事,从此变成可追溯的,所以装了 vnstat。

apt install -y vnstat

结果我习惯性敲了句:

vnstat -u

系统回我:

-u is not supported in this version

我当时:“???”

后来才发现,这是 Ubuntu 22.04 + vnstat 2.x 的正常行为——
新版根本不需要初始化,服务一跑就开始记账

确认它在跑就行:

systemctl status vnstat
vnstat
vnstat -d

从这一刻开始,我知道:

以后再出现 700GB,我至少知道它是怎么来的


回头看,这次事故其实一点都不神秘

现在再复盘,组合拳非常经典:

  • root + password
  • 22 端口暴露
  • 没防火墙
  • 没 fail2ban
  • 没任何流量监控

每一条单看都“好像还能用”,
但叠在一起,就是一个迟早会被扫到的配置


现在我初始化每一台 VPS,几乎是条件反射

后来我发现,我已经不需要“提醒自己”了。

新机器一来,我几乎是肌肉记忆地做这些事:

# 改端口
# 上 key
# 关密码
# ufw allow 新端口
# fail2ban
# vnstat

这些命令本身不复杂,
但它们带来的变化很实在:

我重新对机器有了掌控感


最后说一句,可能比技术更重要

这次 700GB 教会我的,其实不是某条命令,而是一个判断原则:

当一个系统已经不可信时,修修补补只是在安慰自己
真正理性的选择,往往是推倒重来

这不只适用于 VPS。
对架构、对项目、甚至对人生决策,都是一样的。

close
arrow_upward