网络丛林法则:我的博客服务器 7 天被爆破 4.5 万次

网络丛林法则:我的博客服务器 7 天被爆破 4.5 万次

2026-09-28 · WordPress

网络丛林法则:我的博客服务器 7 天被爆破 4.5 万次

📖 本文共 2,795 字,阅读需要 10 分钟

起因很普通:我想知道那台小服务器的磁盘为什么越来越紧。

顺手翻了一眼系统日志,然后看到了一份让我沉默的账单 —— 7 天里,SSH 服务留下了 9 万多行日志,其中 4.5 万行是扫描和撞库的痕迹。

不是有人跟我有仇。是全网撒网,我只是被网住的那一个。

一、账单长什么样

指标 数值(近 7 天)
SSH 日志总量 91,237 行
其中爆破 / 扫描行 45,645 行(约 50%)
攻击来源 IP(去重) 538 个
累计失败记录(历史) 67,663 条
单独针对 root 的失败 20,208 次
仅”今天”一天的失败 3,594 次

一台只有 2 核 2G、跑了两个博客和几个自用小工具的机器,什么都没做错,每天要挨大约 6,500 次敲门。

最刺眼的不是数字,是被猜的用户名清单:

被猜的用户名 次数
ubuntu 387
admin 27
test 14
user 12
deploy 11
ftpuser 10
ec2-user 8
git 7

ubuntu、ec2-user、ftpuser —— 这些名字跟我的服务器一点关系都没有。它们只是云主机最常见的默认账号名。

这就是第一条关键结论:没有人针对你。 你只是被无差别扫到了而已。

二、它是一条流水线,而且”有人上班”

把失败记录按小时排出来,会看到一个很有意思的形状:

时间(小时) 失败次数
00 ~ 03 6 ~ 15
04 117
05 227
06 680
07 859
08 474
09 476
10 481
11 181
12 ~ 20 4 ~ 12

凌晨四点开始爬坡,早上七点达到峰值(一小时 859 次),中午前后断崖式回落,整个下午和晚上安静得像另一个世界。

这不是人的作息,也不完全是机器的作息 —— 这是别人排班表上的工时。某个”团队”在它的白天把我的 IP 段排在队列里,跑完就换下一批。

flowchart LR
    A["全网 IP 段扫描器"] -->|"探测 22 端口"| B["你的服务器"]
    B -->|"回了一个 SSH 握手"| C["进入目标清单"]
    C --> D["通用字典逐个撞库"]
    D -->|"失败(99.9%)"| E["换个 IP,继续下一个"]
    D -->|"口令弱,撞开了"| F["服务器易主"]

来源 IP 集中在少数几家云服务商和 IDC 的网段里 —— 也就是说,这些机器自己多半也是被控制的受害者。整条链条上,从肉鸡到发起者,没有一个人见过我的服务器。

三、先别慌:怎么判断”有没有真的被攻破”

这是整件事里我觉得最值得写下来的一段。

45,645 行失败记录看着吓人,但失败日志再多都没有意义。真正需要回答的只有一个问题:有没有成功的外来登录?

我用四条证据交叉验证了一遍:

1. 成功登录记录里,认证方式全都是公钥;"用密码登录成功"的次数 = 0
2. 成功登录的来源 IP 只有两个 —— 都是我自己家的宽带出口
3. 服务器的公钥授权清单里,没有任何一个陌生公钥
4. 没有异常进程、没有莫名计划任务;其他可以登录的账号口令都是锁定状态

四条全部指向同一个结论:没有被攻破。

自建服务的人请把这条排查顺序抄下来:

第一步看”成功登录”(谁进来的、用什么方式进来的、从哪进来的),
第二步看公钥授权清单(有没有多出一条不属于你的),
第三步再看失败日志的规模。

顺序反过来,你会被 4.5 万行失败记录吓到;顺序弄对了,你会知道该不该着急。

四、为什么一定是 22 端口

因为公网就是一条街,开放端口就是门牌号。

扫描全网 IPv4 的 22 端口,对今天的算力来说是很廉价的事。一旦你回应了 SSH 握手,就等于在门口挂了一块牌子:这里有一扇 SSH 门,可以来试试。

而历史上失败的组合只有一个:允许 root 用密码登录 + 端口开在公网。

密码是唯一可能”被猜中”的东西。7 天 2 万次撞 root 的密码,只要你的口令是弱口令、或者跟别处复用过的口令,被撞开就只是时间问题 —— 攻击者不需要聪明,只需要一直在。

五、我做的三件事

按性价比排序,第一条就解决了 90% 的问题。

措施 耗时 实际效果
① 关掉密码登录 2 分钟 爆破彻底失效:门锁从”猜口令”变成”必须持有我的私钥”
② 装 fail2ban 自动封禁 10 分钟 5 次失败封 1 小时,挡住高频段,日志量进一步下降
③ 后台 / 面板别对公网开 5 分钟 关掉另一个入口(各类服务器的面板默认端口,是第二个最常被撞的地方)

第一条的具体做法,本质上只是把 SSH 配置里的两个开关改掉:

PasswordAuthentication no          # 不再接受任何密码认证
PermitRootLogin prohibit-password  # root 也只能用公钥进

改完之后的即时验证很干净 —— 一个纯密码的尝试会被服务器直接回绝:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

括号里那个列表,就是服务器现在愿意接受的认证方式。它里面已经没有 password 了。

有意思的副作用是:日志立刻安静下来。因为攻击者连”撞密码”这一步都走不到,日志里不再出现大片的密码失败记录,只剩”连接被关闭”这种毫无杀伤力的行。

至于 fail2ban,顺手记两个我自己踩过的坑,省得你重复:

  • 它写入的是 iptables,但链名不是你以为的那个(我第一次去查,找不到规则,以为没生效,白排查了一轮);
  • 默认的封禁动作可能指向 firewalld —— 如果你的机器没跑 firewalld,必须显式指定用 iptables,否则规则根本落不下去。

六、丛林法则

处理完这件事,我最大的感受不是”技术不够”,而是结构性的。

我们平时对”上网”的想象是:我有个房子,我关好门窗,世界是文明的,会讲道理。

真实的情况是:公网是一片没有路灯的丛林。 没有警察会巡逻到你的网段,没有邻居会替你报警,而丛林里永远有机器人在挨家挨户推门 —— 它们不看门牌上写的是”个人博客”还是”银行”,只看哪扇门回了一句”我在”。

所谓”朗朗乾坤”,是文明社会给我们的一种错觉。它靠制度、执法和大量看不见的成本在维持。而网络协议层没有这层东西 —— 你的 22 端口开在公网上,本质上和把一台没锁的机器放在公共走廊里没有区别。

所以在丛林里,安全的目标不是”打赢”,而是让自己不值得被打:

  • 把门锁换成”没有钥匙就绝对进不来”(公钥认证),而不是”我的口令很难猜”;
  • 把不必要的门窗堵上(只监听本机、面板别对外);
  • 承认没有一劳永逸 —— 扫描是持续的,防护也必须是持续的;
  • 最后,别只盯着吓人的失败数字,要学会找”成功”的痕迹。

七、如果你也在自建东西

一份可以照着做的清单:

  1. 现在就去翻一次成功的登录记录,确认来源和认证方式全是自己的
  2. 检查公钥授权清单,删掉不认识的那几条
  3. 关掉 SSH 的密码认证(前提是你已经能用公钥登录,且改之前先备份配置)
  4. 装一个自动封禁工具,并设好自己 IP 的白名单
  5. 检查一遍所有对公网开放的端口,问自己”这个真的需要吗”
  6. 给系统日志设个上限,别让它悄悄吃掉你的磁盘
  7. 改配置的当天做一次新连接验证,别在唯一一条会话里改完就关窗口

第 3 条和第 7 条都关乎同一件事:你不会想在自己改配置的过程中,把自己也关在门外。

丛林里没有人来救你,所以每一步都得留一条回来的路。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部