MySQL 8.0 安全部署指南  /  第 9 章安装连接控制插件

第 9 章安装连接控制插件

连接控制插件库使管理员能够在可配置的连续尝试失败次数后增加服务器对连接尝试的响应延迟。此功能提供了一种威慑力,可以减缓针对 MySQL 用户帐户的暴力攻击。插件库包含两个插件:

  • CONNECTION_CONTROL检查传入的连接尝试并根据需要为服务器响应添加延迟。该插件还公开了允许配置其操作的系统变量和提供基本监控信息的状态变量。

  • CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS 实现一个INFORMATION_SCHEMA表,该表公开有关失败连接尝试的更详细的监视信息。

安装连接控制插件:

  1. [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 插件的情况下运行,如果插件未成功初始化,则服务器启动失败。

  2. 要验证插件安装,请重新启动服务器并检查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        |
    +------------------------------------------+---------------+

配置连接延迟

使用这些服务器参数为失败的连接尝试配置服务器响应延迟:

将这些选项添加[mysqld]到 MySQL 配置文件 ( /etc/my.cnf) 的选项组下,以便您稍后可以根据需要进行调整。此部署中使用默认值。

connection_control_failed_connections_threshold=3
connection_control_min_connection_delay=1000
connection_control_max_connection_delay=2147483647

有关服务器响应延迟配置的更多信息,请参阅连接控制插件安装

监控失败的连接尝试

可以使用以下信息源监视失败的连接尝试:

测试连接控制插件并查看监控数据:

  1. 打开终端并以 root 身份连接到服务器:

    $> cd /usr/local/mysql 
    $> bin/mysql -u root -p
    Enter password: (enter the root password here)
  2. 打开第二个终端并以 root 身份执行四次 连接尝试,每次都指定不正确的密码。第四次连接尝试应该有一个小但明显的延迟。

    $> cd /usr/local/mysql 
    $> bin/mysql -u root -p
    Enter password: (enter incorrect password here)
  3. 在第一个终端中,发出此语句以查看 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     |
    +------------------------------------+-------+
  4. 在第一个终端中,发出此语句以查看 INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS 数据。所有四次失败的连接尝试都被计算在内。

    mysql> SELECT FAILED_ATTEMPTS FROM INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
    +-----------------+
    | FAILED_ATTEMPTS |
    +-----------------+
    |               4 |
    +-----------------+