最近Mysql一直出现崩溃问题,在排查错误log文件时发现一直有非法IP进行root账号的尝试登陆,想到之前ssh也经受过类似这种无差别式攻击,所以想解决一下。这里了解到Mysql原生自带有各类插件。

这里可以通过

USE information_schema;SELECT PLUGIN_NAME,PLUGIN_STATUS FROM PLUGINS;

查看所有插件

在Mysql官网的安全插件中有两个控制会话的插件叫做CONNECTION_CONTROLCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS

这里就是通过这两个插件实现

第一步:在Mysql登入后输入以下命令安装插件

INSTALL PLUGIN CONNECTION_CONTROL SONAME ‘connection_control.so’;

INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME ‘connection_control.so’;

第二步:修改my.cnf文件(Mysql配置文件,若不知道位置可以whereis my.cnf),加入以下选项

plugin-load-add=connection_control.so#插件预加载

connection-control=FORCE_PLUS_PERMANENT#强制打开插件

connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT#强制打开插件

connection_control_failed_connections_threshold=4#超过这个值就开起延时

connection_control_min_connection_delay=1500#失败后等待1500毫秒

检查:

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE ‘connection%’;

可查看插件打开情况

这里注意的是delay的值并不是说每次都是1500毫秒,而是以(当前失败总次数-失败阈值)*1500,所以假如当前设定为上,当我失败登陆第6次时,我的等待时间不是1.5秒而是3秒,还有就是想不让尝试登陆超过一次,可以把阈值改为0。

开启插件后自己登陆失败的解决方法:

1.重启服务,重启服务后会刷新CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS表下账号的对应失败登录错误次数

2.修改上述的表内容,前提是你有其他对应权限的账号登录进行

这个插件的使用官方文档

KAI 网站搭建