记录一次服务器被攻击,导致的一系列连锁的问题

image-20230116220916177

作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、JAVA底层、面试、职业成长相关资料等更多精彩文章在公众号「小牛呼噜噜

大家好,我是呼噜噜。今天发现网站发布文章无法发布,由于我网站是用hexo框架生成的静态网站,在我执行完
hexo clean && hexo g && hexo d后发现,之前一直都没问题,竟然报错了:

1
2
3
4
5
6
7
8
Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (D:\GitBog3.0\node_modules\_hexo-util@2.7.0@hexo-util\lib\spawn.js:51:21)
at ChildProcess.emit (events.js:315:20)
at ChildProcess.cp.emit (D:\GitBog3.0\node_modules\_cross-spawn@7.0.3@cross-spawn\lib\enoent.js:34:29)
at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)

这异常信息提示不靠谱,点开链接和这个问题没有太大相关,由于之前从没有遇到过hexo这类问题,笔者第一反应是node_modules缺少依赖?

  1. 进入站点根目录 cd D:\GitBog3.0
  2. 先把node_modules目录删除,重新下载依赖
  3. 清除缓存npm cache clear --force
  4. 重新安装依赖包npm install

重新执行hexo clean && hexo g && hexo d,发现还是这种异常信息,那应该不是依赖的问题

遇事不决直接上网去百度查Error: Spawn failed,网上的解决方案:

  1. 进入站点根目录 cd D:\GitBog3.0
  2. 删除git提交内容文件夹 rm -rf .deploy_git
  3. 执行命令: git config --global core.autocrlf false
  4. 最后hexo clean && hexo g && hexo d

但试了一下,很不幸还是不行,不能乱折腾了,我们得分析一下问题,突然发现异常信息上面还有一段信息被忽略了

1
2
3
4
5
6
7
8
9
10
11
12
ssh: connect to host 121.xx.xx.xx port 22: Connection timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (D:\GitBog3.0\node_modules\_hexo-util@2.7.0@hexo-util\lib\spawn.js:51:21)
at ChildProcess.emit (events.js:315:20)
at ChildProcess.cp.emit (D:\GitBog3.0\node_modules\_cross-spawn@7.0.3@cross-spawn\lib\enoent.js:34:29)
at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)

虽然不知道下面这段异常信息是什么东东,但是上面这2句,很明显说的就是ssh连接失败!

这就让我想到了最近服务器一直被频繁攻击,24号那天还被恶意登陆,短短2分钟给我塞了一堆木马文件


当时呼噜噜还在快乐地和平精英吃着鸡,被腾讯一顿提醒,手机短信微信邮箱全是警告,手机响个不停

呼噜噜当时丝毫不慌,直接登录服务器后台,不管三七二十一,直接选择关闭服务器,然后继续打游戏去了

等和小伙伴那把游戏结束了,再开始着手处理这件事:

  1. 查看登录日志,发现登录的是root账户,还是国外这种可疑的ip地址,问题还是非常严重的。
  2. 首先把root账号的密码给升级了
  3. 由于服务器里有一堆木马文件,如果直接去服务器里面找的话,是找不到的,他们被恶意攻击者隐藏了。但是笔者推荐一个简单的常规处理方法,呼噜噜这里以腾讯云举例,其他服务商类似:

登录腾讯云(服务器是腾讯云的),进入控制台 -> 搜索 “主机安全” ->点击左侧”主机列表”,选择你的主机->点击左侧导航菜单“入侵检测”>文件查杀,把所有可疑的文件全部隔离就可以了


都是挖矿什么的,我服务器配置那么垃圾,也看到上?

然后就是,检查服务器其他端口,cpu,内存,磁盘等各项指标,都没啥问题了,开始慢慢恢复网站服务,还有重启各种中间件的容器服务,折腾了一晚上。如果还不行的话,可以参考Linux 入侵类问题排查思路https://cloud.tencent.com/document/product/296/9604

但是过了几天,服务器又被人在国外ip异常登录了,这时候我发现攻击者电脑性能太好了,密码都加了20几位了,还是没几天被破解了。能够想象到服务器的常用端口一直被扫描,特别是ssh默认22端口,稳一手,直接把默认的22端口给禁了,换了一个不常用的端口

  1. 以root权限登陆系统,输入vim /etc/ssh/sshd_config
  2. 找到 #Port 22
  3. 在其下面输入新的端口号如:Port 9999(这个自己定,最大不能超过65535,也不要把端口泄漏出去)
  4. 编辑好,先按ESC键,再输入 wq 保存退出。
  5. 接着重新启动ssh ,systemctl restart sshd.service #删除或新增都需重启SSH服务,否则不生效。
  6. 最后不要忘了,在防火墙上放开这个端口9999

大家为了安全可以进一步把root用户给禁了,权限太高有时也很麻烦。

这时候呼噜噜意识到了,我之前把ssh默认端口给改了,hexo d通过git将网站部署到服务器上时,会去访问ssh登录端口的,我服务器ssh登录端口改了,但是我网站里面的配置文件没同步更改,那我们直接去电脑网站根目录下修改_config.yml

1
2
3
4
deploy:
type: git
repository: git@111.11.1.11:/home/git/hexo.git
branch: master

由于我们使用hexo-deployer-git插件来确保git部署,但是它无法直接修改ssh默认登录端口,我们需要使用下面这种写法

1
2
3
4
5
deploy:
type: 'git'
repo:
site: ssh://git@111.11.1.11:port/home/git/hexo.git,master
branch: master

其中:

  • git就是用户名
  • 111.11.1.11是服务器的ip地址
  • port就是端口
  • master是git私有库的分支
  • /home/git/hexo.git是服务器上git仓库路径

保存配置文件的修改后,最后我们执行hexo clean && hexo g && hexo d,发现网站内容正常推送到服务器上了!

其实本文各个解决方案并不复杂,如何找到原因才是更重要的;找到问题的原因,解决起来就事半功倍。另外当我们服务器被攻击后,不用慌张,按照流程一步步就解决问题,校验服务器资源,最后恢复服务。
遇到问题,就一步步的分析异常信息,实在看不出来,可以去尝试尝试,再根据反馈进一步分析,直到找到原因,从而解决问题。最后善于搜索,但是不能完全依赖搜索引擎。

相关阅读:
https://cloud.tencent.com/document/product/296/9604
https://mp.weixin.qq.com/s/whSckb0H9xhKMt-DFgp4TA
https://mp.weixin.qq.com/s/O_-dAgKxk64hiClul0vDQw


本篇文章到这里就结束啦,很感谢靓仔你能看到最后,如果觉得文章对你有帮助,别忘记关注我!
计算机内功、JAVA源码、职业成长、项目实战、面试相关资料等更多精彩文章在公众号「小牛呼噜噜