您现在的位置是:网站首页 / 大后端大后端

自由书无故挂了!!!

自由达人2021-04-10 1000人围观

简介 本篇文章分享了年前自由书网站无故404异常,一步一步还原真相,最终定位是redis没有设置密码被攻击了当成肉鸡被挖矿了。

最近自由书出了点问题,无缘无故挂掉了,访问地址提示404。能出404提示证明nginx还是在工作的并且我能肯定我启动后能正常访问,于是找程序的问题。

这里我的思路是因为出404,而不是什么响应缓慢或者接口异常什么的,我估计是程序进程都掉了,所以什么arthas,jstack这个工具都用不上,所以我先从我的程序日志入手,看了下log日志,如下图:

程序的日志
程序的日志

从日志上可以看出执行redis命令超时了,有点意思。那为什么redis超时自由书程序进程会被杀掉呢?后面会给答案。
初步怀疑是redis进程挂了?于是查看redis容器运行状态,我使用docker ps -s查看正在运行的容器,Redis容器是正常运行的,也能正常的进入redis容器,于是我耍了个小聪明,既然程序取Redis内容超时,会不会容器间网络隔离之类的,于是我在Redis容器内启动客户端来测试Redis服务,发现无响应。如图

Redis容器
Redis容器

正常情况下执行redis-cli是能进入到redis的命令行的。于是我肯定是redis异常了,但是我能知道的linux命令也不多呀,一时半会不知道如何排查,有点尴尬!!。因为我有过一段网吧管理员的经历,在高中毕业假期为了能免费玩游戏去打过两个月暑假工,当网管有个奇技,90%的电脑出了问题重启都有笑~于是我把redis容器重启了下再重启了程序,发现自由书正常运行了。
隔了一天,404在再现,状况和之前一摸一样,没有程序进程,Redis运行正常就是连不上客户端。突然脑子里转了个命令top,心想我tm咋没想道这个命令,敲了top出现进程列表,发现cpu了一个近乎100%占用cpu的进程

top进程列表
top进程列表

咋一看只觉得是一个redis占用100%cpu,因为我已经排插到redis异常了呀,但一个redis能占用100%也是很奇怪哈,因为我服务器上只有自由书的程序会使用redis,思来想去的我眼睛一亮发现命令是redis2,有木有?顿时可疑这个进程是不是真的redis进程,我重启了另一个redis容器命令是redis-server,于是肯定是被攻击了,目标是我的redis。于是我ps -ef | grep 18239 查看这个命令相关的目录
./redis2 –donate-level 1 -o ve01.kieuanilam.me:5555 -u n7re -p n7re -k -B很诡异。使用find找redis2目录,
,我全部删掉了。既然redis被攻击了肯定有薄弱环节,想到我的redis没有设置密码当时我那个心啊,一个字,不爽。后来我把容器清理了,重建容器,并且设置了redis密码,而且还改了默认端口。

docker run -d –name redis-dev -p 6310:6379 redis –requirepass “xxxx” 对外服务一定要保护好,就像男孩子在外也要保护好自己一样

后来我查了下异常的程序是
好了,一篇线上程序被攻击的真实例子以及解决步骤给大家了,在这过程中我总结了下
第一:线上服务一定要尽可能的保护好,比如关掉多余的端口,修改默认端口,设置密码等
第二:我的linux知识还比较浅,比如查找异常进程,进程目录等还有其他更好的方式
第三:重启不是最终办法,问题只有解决不能掩盖

  • 9 点赞
  • 3 收藏
  • 分享

作品评论