Mysql max_allowed_packet自动重置为1024(黑客入侵?)

背景:
最近在腾讯云买了一台测试机,安装了mysql5.7.20作为测试数据库,谁知道一直发生这个错误:

Caused by: com.mysql.jdbc.PacketTooBigException: 
Packet for query is too large (79968 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

最后发现是被黑客入侵了!(怪我太年轻)


解决步骤:

一、定位错误

首先查看数据库报错截图:
这里写图片描述
很清晰地看到是 max_allowed_packet 变量的值不够大!
查看:show VARIABLES like ‘%max_allowed_packet%’;
这里写图片描述
果然!只有1024!

二、修改max_allowed_packet变量值

可以直接执行sql命令: set global max_allowed_packet=2*1024*1024*10 (重启后无效)
或修改my.cnf配置文件,在【mysqld】中添加一行 max_allowed_packet=20M,再重启数据库,即永久修改(我最开始是这么想的。。)
再查看:
这里写图片描述
我觉得到这里应该就OK了! orz

三、修改无效?错误源头为黑客

几个小时后我再测试项目,发现数据库又报错?依旧是那个错误,然后我一脸懵逼地再次修改 max_allowed_packet 变量,再查,ok了。
一段时间后… 数据库再次报错!还是辣个错误!!!what?!
第二天依旧这样。。。
然后各种百度、google,发现居然可能是黑客入侵

四、寻找黑客足迹

先看云服务器的登录日志:last -n 20
以及登录失败的日志:lastb -n 20,发现居然这么多ip在尝试登录自己的服务器,感受到了网络世界的汹涌恐怖。。

注:
单独执行last指令时,它会读取位于/var/log/wtmp的文件,并把该给文件的内容记录的登录系统的用户名单全部显示出来。
单独执行lastb指令,它会读取位于/var/log/btmp的文件,并把该文件内容记录的登入系统失败的用户名单,全部显示出来。

上面只是看登录服务器的IP用户,这个防火墙是由腾讯云负责的,密码也比较复杂。虽然有很多登陆失败的,但最近登录成功的没有陌生IP,所以排除服务器被直接入侵。
所以现在可以基本确定黑客是通过我这个外网IP开放的端口入侵的。
我的数据库端口用默认的3306,密码也是root,简直毫无遮拦。任何人都可以IP加端口进入到我的数据库肆意操作一把。。hh

开启数据库general_log:
先执行sql指令:show variables like ‘%log%’;
这里写图片描述

可以看到默认general_log是OFF的,我们直接开启:set global general_log = ON;(永久修改需要在my.cnf的【mysqld】中添加:general_log = 1

这里写图片描述

OK,现在mysql就会在general_log_file显示的路径文件里记录general日志了!(从现在开始记录)我默认的路径是 /usr/local/mysql/data/VM_0_17_redhat.log

于是我等了一段时间再来看日志,果不其然,发现:
cat /usr/local/mysql/data/VM_0_17_redhat.log |grep max_allowed_packet > bbb
这里写图片描述

我辛辛苦苦修改,你给我重新set回去是什么意思???

于是乎修改下数据库密码,并重新设置远程登录权限
之前权限是:
这里写图片描述

现在重新删除不必要的用户,并执行:

grant all privileges on *.* to 'root'@'%' identified by '!@110¥@¥y%¥j';
flush privileges;

这密码应该不好破解吧。。明天再看有没有人再set了。。


五、总结

下面是一位老哥写的,直接拿来看看吧:

1.黑客是怎么发现漏洞的,为什么入侵目的?

猜测大概流程: 通过扫描软件扫描公网ip, 测试到机器端口未关闭,如22,3306(应对1: 开启防火墙,只开放服务端口,禁用其它端口外网访问),尝试暴力密码登陆(应对策略2: 复杂密码策略,可建立白名单,对于多次连接失败,进行日志记录和预警)。
通过日志发现了,黑客主要操作为:在mysql中调用了系统命令(下载远程文件,增加执行权限,并执行),打开相关安全参数。

查看机器登陆历史及登陆失败历史,发现近段时间,有大量外网登陆失败情况,黑客通过常用应用的用户名/密码在不停的尝试登陆系统

2.黑客为什么要修改 max_allowed_packet 1024 ?

修改了max_allowed_packet =1024,将导致所有数据操作,如果返回结果>1024,将报错。 修改此参数,很容易让用户发现数据问题,推测是骇客是故意暴露自己,也许只为了炫耀一下。

3.增加信息安全意识,原来黑客离我们并不远

本以为买个云服务器随便测试下,没想到就发生这种事,只能说太年轻了啊~

具体:
1.外网机器,一定要开启防火墙,只开放提供服务端口,禁用其它端口。 制定相关安全策略,如记录登陆用户ip,定期查看登陆用户历史及登陆失败记录,对于反复登陆能拒绝登陆。

2.系统用户名,应该根据需要确定是否使用root用户,具体业务最好使用普通用户权限。因为root用户,拥有系统系统的全部权限。

3.密码:用户密码一定不要使用简单密码,最好使用密码生成器生成负责密码(大小写,特殊字符,长度)

4.数据安全:mysql应该给不同业务创建不同用户,并赋予有限功能权限,禁止root 用户做业务操作。


猜你喜欢

转载自blog.csdn.net/abysscarry/article/details/79714114