起因
之前Linux服务器上面一直启的Redis单机,并设置了密码。也没出现过问题。对安全这方面也不太敏感。
前天重新搭建了Redis集群(一主两从三哨兵),都只是做了最简单的配置,期初master配置中是有密码的,但是在配置slave时,没有添加配置项(因为无知,- -!),导致主从复制一直失败,索性就把master中的给注释掉了。再次重启主从复制成功了,哨兵的配置也成功启动,发现模拟故障转移也莫得问题,就认为万事大吉了。
昨天重新搭建的时候,master设置了密码(),那么salve新增配置(),哨兵新增配置()。这个在上篇博客中已经更新了最新配置。
经过
然而昨天中午的时候,收到了阿里云的邮件。通知我的服务器出现了紧急安全事件:恶意脚本代码执行。
一看到这里,拉闸。没有配置Redis密码,bind设置的0.0.0.0,阿里云的安全组又开放了Redis端口,那简直就是请别人来攻击。对方轻轻松松获取了我的root权限。
接下来就开始去下载对方的脚本在我的服务器上面挖矿了。
看到这里,首先想到的是登录上服务器,先把这几个进程给kill。发现还是晚了一步。使用top命令查看,CPU的使用率已经快满了。果然已经开始搞大动作了,查看了服务器的定时任务列表,发现果然被添加了定时任务。定时去执行一个新的shell脚本。
找到了执行的脚本位置,查看了一下。瞬间懵逼了,作为一个Linux菜鸡,只能看懂简单的shell,这么长这么复杂的脚本瞬间就不想看了。心生一计,你不是要执行吗把你这些入侵文件全部rm -rf掉不就好了吗被啪啪的打脸,我使用root用户删除居然都被拒绝了。
既然这样,那就。。。哼!玉石俱焚互相伤害吧。
赶紧去备份了一些安装包文件,下载完毕后,直接在阿里云的控制台关闭掉服务器,重新安装了。
结果,因为自己的愚蠢,昨天一下午的时间都在屁颠屁颠的重新安装东西。0.0
服务器
我前后使用过腾讯云,阿里云的服务器。这里倒不是在打广告,简单的谈一谈两款服务器。
之前腾讯云的是基础版(1核1G)的,阿里云的是(2核4G)的,使用上不说了。两个服务器都被入侵过,腾讯云的被植入了木马,阿里云的被用来挖矿。因为菜(毕竟咱就是一个搞Java的死程序员,不够专业),最终的结果都是重新安装系统,重新安装软件。
从开放端口来说,阿里云是要比腾讯云安全的多。我是去年租的1年的腾讯云基础版,中途搭过MySQL数据库,Tomcat啥简单的东西,启动后无需设置,本地就可以直接访问了。这种意识直到今年趁双十一租了3年的阿里云服务器,等Tomcat启动之后,发现我本地如何都访问不了,后来才发现,还需要在阿里云的控制台-》 络与安全-》安全组中添加访问规则(端口啊,授权对象ip等等)后才能被我本地的访问到。
呐,不知道腾讯云的控制台有没有加,毕竟距离上次处理腾讯云的服务器木马也有一年了,从那之后我就再也没登录过腾讯云控制台。大概是平时也不太重视。哈哈 = =
这里就简单说一说。没有打广告的意思。挑选服务器还是看个人喜好呗。
安全意识
今天有去看了一下安全意识方面的,做个简单的总结,并不全。这种事情总不是遇到了,虽然很烦,但是也学了东西,还是可以接受的。
以下有些设置参考自阿里云控制台-》安全防范-》基线检查
-
密码
密码不要再使用简单的常规密码。密码很多地方,比如Linux系统登录,MySQL,Redis,等等。
-
MySQL
-
禁用symbolic-links选项
禁用符合链接以防止各种安全风险。
在文件中设置(5.6以下版本设置)
-
删除’test’数据库
测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少MySQL服务器的攻击面。
-
修改默认3306端口
降低被扫描的风险,避免使用熟知端口
-
禁用local-infile选项
降低通过SQL注入漏洞器读取敏感文件的能力
-
为MySQL服务使用专用的最低特权账户
安装MySQL时创建mysql用户(不使用root用户)
-
禁止使用–skip-grant-tables选项启动MySQL服务
使用此选项,导致所有客户端对所有数据库具有不受限制的访问权限
-
确保配置了log-error选项
启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,例如,如果错误日志未启用,则连接错误可能会被忽略。
-
确保log-raw选项没有配置为ON
当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。
-
确保没有用户配置了通配符主机名
避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公 。
执行SQL更新语句,为每个用户指定允许连接的host范围。 1. 登录数据库,执行 ; 2. 执行语句查看HOST为通配符的用户; 3. 删除用户或者修改用户host字段,删除语句: 。更新语句:。 4. 执行SQL语句:
-
匿名登录检查
-
确保MYSQL_PWD环境变量未设置
MYSQL_PWD环境变量的使用意味着MYSQL凭证的明文存储,极大增加MySQL凭据泄露风险。
-
-
Redis
-
打开保护模式
redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。
-
禁止监听在公
bind 0.0.0.0,极易被入侵。
bind 127.0.0.1或内 IP
-
禁止使用root用户启动
使用root用户权限去运行 络服务有风险(nginx,apache都有独立的work用户)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的
-
修改默认6379端口
降低被扫描的风险
-
限制redis 配置文件访问权限
redis密码存储在配置文件中,禁止不想关的用户访问修改是必要的。
-
禁用或者重命名危险命令
线上使用命令也是非常危险的。
-
上面的配置可能不全,但对于入门的小白(我)来说,暂时就收集了这些。再遇到入侵问题,继续学习呗,总不是斗智斗勇。虽然最后都是我被打败。哈哈
附
犹豫了很久,要不要把shell脚本给发布上来。这里就截图一下代码片段吧。有兴趣的可以私下分享。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24689 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!