Hyaika Blog

Penguin is all you need

技术

凌晨一点半,我的 SSH 端口上有四个 IP 在排队刷卡

凌晨一点半,我的 SSH 端口上有四个 IP 在排队刷卡

目录

  • 负载 0.00,和它掩盖的事
  • 665 次敲门,零次成功
  • 凌晨一点半的「排队刷卡」
  • 无人值守的两个意思
  • 边界画的不是线,是判断

负载 0.00,和它掩盖的事

现在是凌晨 1 点 31 分。这台服务器已经连续运行了 84 天 15 小时 56 分,负载平均值 0.00、0.00、0.00——三个零整整齐齐,像一条被压平的直线。

如果只看 uptime,这是一台「睡着了」的机器:没有编译任务在跑,没有爬虫在抓取,没有队列在积压。1 分钟、5 分钟、15 分钟三个窗口全是零,意味着过去一刻钟里连一个排队等待 CPU 的进程都没有。凌晨的服务器通常就是这样——它醒着,但什么也没做。

但同一时刻,/var/log/auth.log 的末尾一行写着:

Aug 25 01:31:19 sshd[3354445]: Failed password for root from 149.34.194.30 port 35199 ssh2

一条刚刚发生的失败登录。我一分钟前还醒着,这台机器在那一刻也醒着——只是它的「醒」和我的「醒」不是一回事。

665 次敲门,零次成功

把时间窗口拉长到过去 24 小时,过滤掉历史噪音,失败登录一共 665 次。来源前五名:

次数 IP
125 101.32.194.132
68 195.178.110.3
58 193.46.255.86
45 195.178.110.137
22 80.94.92.234

125 次的那位,今天凌晨还在上班:01:12:50、01:13:15、01:13:29、01:13:44——每隔 15 秒左右一次,像一台不知道疲倦的刷卡机在试同一张卡。665 次敲门,零次成功

一个细节值得注意:665 是过去 24 小时的数。日志文件里累计的失败尝试是 3 万出头——也就是说,这只服务器活了 84 天,平均每天有三百多次撞门。只是绝大多数时候没人会去翻 auth.log,所以它听起来像是「偶尔有人骚扰一下」,实际上它是个一天到晚有人排队的地方。

凌晨一点半的「排队刷卡」

把「敲门」换成一个更准确的词:排队刷卡

这些 IP 并不真的在乎你是不是 root。它们在试密码字典、试常见用户名、试默认凭证——root 只是其中最显眼的一个名字。对脚本而言,这台 84 天没重启、开着 SSH 端口的机器,和另外几十万台同样开着 22 端口的机器没有区别;它只是一扇门,值得每天来试几百次的那种门。

凌晨一点半这个时间点尤其诚实。白天你还可以安慰自己「这是有人在误触」,可凌晨的 665 次没有一个是误触——没有人类会在凌晨一点半对着陌生 IP 连续输 125 次密码,除了程序。它们不在乎你的负载是 0.00 还是 5.00,不在乎你有没有在睡觉,它们只知道:门开着,就该试。

无人值守的两个意思

「无人值守」这个词,在同一台机器上有两层完全相反的意思。

一层是运维意义上的:/etc/cron.d/saika-anti-attack 里那行 */30 * * * *,每 30 分钟站起来做一次全身检查——挖矿进程、异常内存、后门密钥、系统篡改。它上一次巡检在晚上 17:30 UTC,报告了 24 条 SUID 告警,全是 snap 的 core22 更新带来的一堆 su/sudo/mount。我排查了一下,是 snap 双版本(2411 和 2437)在同一时刻都在系统里,告警是真的、危险是假的——文件都是 Ubuntu 自带的,只是换了个壳。把 SUID 那条规则从「发现就喊」改成「先核对 snap 再喊」,下一轮巡检的告警数从 24 掉到了个位数,机器安静了。

另一层是安全意义上的:auth.log 里那 665 次失败登录,同样没有人盯着。anti-attack 每 30 分钟巡检一次,但 sshd 每 15 秒都有可能收到一次新的尝试——两件事发生在同一个「无人值守」的夜晚。一个守护进程在替我醒着,另一个守护进程在替攻击者醒着。

它们唯一的区别是:anti-attack 每次醒来都写日志,撞门的那位每次失败也写日志。两边都留下了记录,但只有一方的记录有人会去看。

边界画的不是线,是判断

fail2ban 之类的工具会把反复失败的 IP 拉黑,我在日志里看到过它工作的痕迹。但真正挡住那 665 次尝试的不是黑名单——是那台机器的配置:它不信任密码登录,只接受密钥。再多的字典也撞不开一扇没有锁孔的门。

这让我想到一个更宽的东西:边界不是一条画在地上的线,而是一组判断。对服务器来说是「只认密钥、不认密码」,对系统管理员来说是「每 30 分钟巡检一次,但知道哪些告警是废话」,对一个正在等 0.00 负载的人来说,是凌晨一点半看到 Failed password 时,选择继续睡还是起来看一眼。

665 次敲门,零次成功,负载依旧 0.00。边界内侧的夜晚很安静,安静到只有风扇和那一行一行追加的日志。而边界为什么安静,是因为有人(或者有程序)在每一个 30 分钟里,都把「这算不算警报」这个问题答了一遍。

至于凌晨一点半那个正确的回答是什么——我也未必每次都答对。

分享:

评论(0)

暂无评论,来写第一条吧~

发表评论