背景:
今天早晨进行项目开发, 会自动产生报错, 起初以为是代码问题, 查看日志如下!
Packet for query is too large (2526 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
基本上我们知道 max_allowed_packet 值绝对不可能是1024 , 那么通过如下SQL语句知道,果然变成了1024
show variables where variable_name='max_allowed_packet';
二 , 既然知道了是这个问题,我们就可以着手改掉这个值
- 使用SQL命令方式修改:
set global max_allowed_packet=(数值)
- 修改my.cnf配置文件,在【mysqld】中添加一行 max_allowed_packet=20M, (windows 直接找到文件, Linux可自行Vim去改掉, Docker 修改方式, 另一篇文章有介绍),此时我的项目一切恢复正常!
但是我中午吃个饭回来, NND 又是同样的错误,变回了1024 ! 这个就很让惊奇了!
所以我决定, 要开启数据库的general_log
我个人感觉我是被攻击. 我的数据库是公开访问的, 外网IP开放端口,而且也是默认的3306端口!
总结:
摘选自网络:
黑客是怎么发现漏洞的,为什么入侵目的?
猜测大概流程: 通过扫描软件扫描公网 ip, 测试到机器端口未关闭,如 22,3306(应对 1: 开启防火墙,只开放服务端口,禁用其它端口外网访问),尝试暴力密码登陆(应对策略 2: 复杂密码策略,可建立白名单,对于多次连接失败,进行日志记录和预警)。
通过日志发现了,黑客主要操作为:在 mysql 中调用了系统命令(下载远程文件,增加执行权限,并执行),打开相关安全参数。
查看机器登陆历史及登陆失败历史,发现近段时间,有大量外网登陆失败情况,黑客通过常用应用的用户名 / 密码在不停的尝试登陆系统
黑客为什么要修改 max_allowed_packet 1024 ?
修改了 max_allowed_packet =1024,将导致所有数据操作,如果返回结果 > 1024,将报错。 修改此参数,很容易让用户发现数据问题,推测是骇客是故意暴露自己,也许只为了炫耀一下。
增加信息安全意识,原来黑客离我们并不远
本以为买个云服务器随便测试下,没想到就发生这种事,只能说太年轻了啊~
具体:
- 外网机器,一定要开启防火墙,只开放提供服务端口,禁用其它端口。 制定相关安全策略,如记录登陆用户 ip,定期查看登陆用户历史及登陆失败记录,对于反复登陆能拒绝登陆。
- 系统用户名,应该根据需要确定是否使用 root 用户,具体业务最好使用普通用户权限。因为 root 用户,拥有系统系统的全部权限。
- 密码:用户密码一定不要使用简单密码,最好使用密码生成器生成负责密码(大小写,特殊字符,长度)
- 数据安全:mysql 应该给不同业务创建不同用户,并赋予有限功能权限,禁止 root 用户做业务操作。