











今天打算给手里这几台服务器更新一下系统,并清理一下系统垃圾,但是这台服务器今天抽风,SSH 时好时坏,连不上的时候就报 connection is closed by foreign host。你说气不气人,它又不是一直坏,ping 是通的,端口也开着,过几分钟再试,嘿,又好了。这种毛病最磨人,我第一反应就是网络不行,或者机房抽风。
一开始我还怀疑是不是自己 IP 被 fail2ban 给封了,或者路上哪台设备在捣鬼。折腾半天才发现,跟网络半毛钱关系没有。服务器好着呢,负载几乎为零,大半年没重启过,稳得一批。
后来我好不容易挤进服务器,翻了一眼 sshd 日志,傻眼了。有一个 IP 是 5.231.242.201,同时挂着十几个连接,在那儿一个劲试 root 密码,短短两小时失败了两千多次。旁边还有一整个网段的机器在轮着爆破,主要是 77.83.39.x 这一段,什么 77.83.39.60、77.83.39.89、77.83.39.101、77.83.39.118、77.83.39.235、77.83.39.239 这些,十几个地址换来换去地试。另外还冒出个 92.118.39.59,也在那儿跟着凑热闹。量太大了,直接把 sshd 的一个保护开关给顶爆了。
这个开关叫 MaxStartups,默认值是 10:30:100,意思就是同时没认证的连接一旦超过 10 个,新进来的连接就会被随机踢掉。人家攻击者把这个额度占满以后,我这个正常用户的连接也跟着遭殃,随机就被丢了,客户端看着就是 connection is closed by foreign host。等攻击缓一缓,额度空出来,我又能连上了。所以才是这么个时好时坏的鬼样子。
找到病根,剩下就好办了。先把攻击来源在防火墙里手动封了,5.231.242.201 这个单 IP,还有 77.83.39.0/24 整个网段,加上 92.118.39.59,全给它关进去。然后就是把 fail2ban 修好,让机器以后自己会封,省得每次都得我手动来。
修 fail2ban 的时候又踩了个坑,这里多说两句。这机器是 Debian 12,日志走的是 systemd 的 journald,默认压根没有 /var/log/auth.log 这个文件,fail2ban 默认配置找不到日志,服务一直就是挂着的。更坑的是,sshd 日志在 journal 里的单元名是 ssh.service,不是 fail2ban 默认匹配的 sshd.service。这俩地方不改对,fail2ban 永远读不到日志,封 IP 更是没门。
改完配置重新把 fail2ban 拉起来,它当场就从历史日志里揪出十几个攻击 IP,全给自动封了。再回头看日志,攻击直接清零,SSH 也老实了,连着试了几十次都不带掉线的。
最后把这次碰到的可疑 IP 贴出来,看到的兄弟自己服务器里留意一下,能封就早点封:
5.231.242.201
77.83.39.0/24 这一整段(里面 77.83.39.17、60、89、95、99、101、112、118、119、122、147、217、226、235、238、239、240 都在轮着扫)
92.118.39.59
回头想想就一句话,SSH 报 connection is closed by foreign host,先别急着怪自己网络,看看服务器是不是正被爆破。防护工具光装没用,得确认它真在跑。再有余力,密码登录换成密钥,默认端口改一改,这两下能挡掉一多半的麻烦。
好吧,我承认这一次是 AI(DeepSeek) 的功劳。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。