我的服务器被黑了

服务器自述

我是一台8核,16G内存,4T的Linux (centOS 7)服务器… 还有两台和我一起被买来的苦主,我们一同长大,配置一样,都是从香港被贩卖到国外,我们三个组成了分布式爬虫框架,另两位苦主分别负责异步爬取连接,多进程爬取连接和scrapy-redis分布式爬取解析。


而我比较清闲,只负责存储. 网页链接放在我的redis中,而解析好的文章信息放在我的MySQL中。然而故事的开始,就是在安装redis的那天,主人的粗心大意,为了节省时间,从而让他今天花费了小半天来对我进行维修!!😢

为什么黑我的服务器

这样一台配置的服务器,一个月的价格大概在1000RMB一个月,怎么说呢… 这个价格的服务器对于个人用户搭建自己玩的环境还是有些小贵的。例如我现在写博客,也是托管在GitHub上的,我也可以租用一台服务器来托管的博客,但是目前我的这种级别,也是要考虑到投入产出比是否合适,哈哈哈。


但是对于,服务器上运行的任务和服务产出的价值要远远大于服务器价值的时候,这1000多RMB就可以忽略不计了。同时,还有黑衣人,他们需要大量的服务器,来运行同样的程序,产出的价值他们也无法衡量,有可能很多有可能很少。。


那么这时候,他们为了节约成本,降低成本,就会用一些黑色的手法,例如渗透,sql注入,根据漏洞扫描等方法来 抓“肉鸡”,抓到大量的可侵入的服务器,然后在你的服务器上的某一个角落,放上他的程序,一直在运行,一直在运行,占用着你的cpu,占用着你的带宽…


那么上面提到的黑衣人,就有那么一类角色,“矿工”!!!!
1.png


曾经,我也专注过区块链,我也短暂的迷失在数字货币的浪潮中,但是没有吃到红利👀👀👀 就是这些数字世界的矿工,利用我服务器的漏洞黑了我的服务器

如何发现被黑

回到这篇博客的正题,我是如何发现,我的服务器被黑了呢??


最近我在做scrapy分布式爬虫方面的工作,准备了三台服务器,而这台被黑的服务器是我用来做存储的,其中用到了redis和mysql。其中引发这件事情的就是redis,我在安装redis的时候,可以说责任完全在我,我为了安装节约时间,以后使用方便等,做了几个很错误的操作


1.关闭了Linux防火墙


2.没有设置redis访问密码


3.没有更改redis默认端口


4.开放了任意IP可以远程连接


以上四个很傻的操作,都是因为以前所用的redis都是有公司运维同事进行安装以及安全策略方面的配置,以至我这一次没有注意到安装方面。


当我的爬虫程序已经平稳的运行了两天了,我就开始放心了,静静地看着spider疯狂的spider,可是就是在随后,redis服务出现异常,首先是我本地客户端连接不上远程redis-server,我有想过是不是网络不稳定的问题。在我重启redis后,恢复正常,又平稳的运行了一天。


但是接下来redis频繁出问题,我就想,是不是爬虫爬取了大量的网页链接,对redis造成了阻塞。于是,我开启了对redis.conf,还有程序端的connect两方面360度的优化,然并卵。。。

1
lsof -i tcp:6379


使用上面的命令后,发现redis服务正常运行,6379端口也是开启的。我陷入了深深地迷惑。。。。。


但是这时其实就应该看出一些端倪了,因为正常占用 6379 端口的进程名是 : redis-ser 。但是现在占用 6379 端口的进程名是 :xmrig-no (忘记截图了),但是这时我也没有多想
直到我运行:

1
top


2.png
发现了占用 6379 端口的进程全名称xmrig…,我才恍然大悟,我的端口被占用了。我在google上一查,才发现。。我被黑了

做了哪些急救工作

这时,感觉自己开始投入了一场对抗战


1.首先查找植入程序的位置。
在/tmp/目录下,一般植入程序都会放在 /tmp 临时目录下,其实回过头一想,放在这里,也是挺妙的。


2.删除清理可疑文件


杀死进程


删除了正在运行的程序文件还有安装包
3.查看所有用户的定时任务

1
cat /etc/passwd |cut -f 1 -d:crontab -uXXX -l


4.开启防火墙


仅开放会使用到的端口
5.修改redis默认端口


redis.conf中的port
6.添加redis授权密码


redis.conf中的requirepass
7.修改绑定远程绑定ip


redis.conf中的bind
最后重启redis服务!

从中学到了什么

明明是自己被黑了,但是在补救的过程中,却得到了写程序给不了的满足感。感觉因为这件事情,上帝给我打开了另一扇窗户~~~
最后说下,这个木马是怎么进来的呢,查了一下原来是利用Redis端口漏洞进来的,它可以对未授权访问redis的服务器登录,定时下载并执行脚本,脚本运行,挖矿,远程调用等。所以除了执行上述操作,linux服务器中的用户权限,服务权限精细化,防止再次被入侵。