连接控制插件库使管理员能够在可配置的连续尝试失败次数后增加服务器对连接尝试的响应延迟。此功能提供了一种威慑力,可以减缓针对 MySQL 用户帐户的暴力攻击。插件库包含两个插件:
CONNECTION_CONTROL
检查传入的连接尝试并根据需要为服务器响应添加延迟。该插件还公开了允许配置其操作的系统变量和提供基本监控信息的状态变量。CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
实现一个INFORMATION_SCHEMA
表,该表公开有关失败连接尝试的更详细的监视信息。
安装连接控制插件:
-
[mysqld]
在 MySQL 配置文件 ( ) 的选项组下添加这些选项/etc/my.cnf
:plugin-load-add=connection_control.so connection-control=FORCE_PLUS_PERMANENT connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
-
plugin-load-add=connection_control.so
connection_control.so
每次启动服务器时 加载库。 -
connection_control=FORCE_PLUS_PERMANENT
防止服务器在没有
CONNECTION_CONTROL
插件的情况下运行,如果插件未成功初始化,则服务器启动失败。 -
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
防止服务器在没有
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
插件的情况下运行,如果插件未成功初始化,则服务器启动失败。
-
-
要验证插件安装,请重新启动服务器并检查
INFORMATION_SCHEMA.PLUGINS
表或使用以下SHOW PLUGINS
语句:$> systemctl restart mysqld
$> cd /usr/local/mysql $> bin/mysqladmin -u root -p version Enter password: (enter root password here)
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'connection%'; +------------------------------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +------------------------------------------+---------------+ | CONNECTION_CONTROL | ACTIVE | | CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE | +------------------------------------------+---------------+
使用这些服务器参数为失败的连接尝试配置服务器响应延迟:
-
connection_control_failed_connections_threshold
在服务器为后续连接尝试添加延迟之前允许帐户的连续失败连接尝试次数。
-
connection_control_min_connection_delay
超过阈值的连接失败的最小延迟(以毫秒为单位)。
-
connection_control_max_connection_delay
超过阈值的连接失败的最大延迟(以毫秒为单位)。
将这些选项添加[mysqld]
到 MySQL 配置文件 ( /etc/my.cnf
) 的选项组下,以便您稍后可以根据需要进行调整。此部署中使用默认值。
connection_control_failed_connections_threshold=3
connection_control_min_connection_delay=1000
connection_control_max_connection_delay=2147483647
有关服务器响应延迟配置的更多信息,请参阅连接控制插件安装。
可以使用以下信息源监视失败的连接尝试:
Connection_control_delay_generated
status 变量指示服务器在其对连接尝试失败的响应中添加延迟的次数 。 此状态变量不计算在达到connection_control_failed_connections_threshold
系统变量定义的阈值之前发生的尝试。该 插件
INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
启用的表格CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
提供有关每个帐户(用户/主机组合)的当前连续失败连接尝试次数的信息。这会计算所有失败的尝试,无论它们是否被延迟。
测试连接控制插件并查看监控数据:
-
打开终端并以 root 身份连接到服务器:
$> cd /usr/local/mysql $> bin/mysql -u root -p Enter password: (enter the root password here)
-
打开第二个终端并以 root 身份执行四次 连接尝试,每次都指定不正确的密码。第四次连接尝试应该有一个小但明显的延迟。
$> cd /usr/local/mysql $> bin/mysql -u root -p Enter password: (enter incorrect password here)
-
在第一个终端中,发出此语句以查看
Connection_control_delay_generated
状态变量数据。connection_control_failed_connections_threshold
超过阈值 3 的 连接尝试将 被计算在内。mysql> SHOW STATUS LIKE 'Connection_control_delay_generated'; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | Connection_control_delay_generated | 1 | +------------------------------------+-------+
-
在第一个终端中,发出此语句以查看
INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
数据。所有四次失败的连接尝试都被计算在内。mysql> SELECT FAILED_ATTEMPTS FROM INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; +-----------------+ | FAILED_ATTEMPTS | +-----------------+ | 4 | +-----------------+