Skip to content

MariaDB 连接控制

连接控制概述

连接控制是 MariaDB 提供的一项安全功能,用于限制和监控数据库连接,防止暴力破解和连接滥用。通过连接控制插件,可以实现:

  • 限制失败连接尝试次数
  • 对多次失败连接的用户进行临时锁定
  • 监控连接尝试情况
  • 防止暴力破解密码攻击

连接控制插件

插件类型

MariaDB 提供了两个连接控制插件:

  • connection_control:基本连接控制插件,限制失败连接尝试次数
  • connection_control_password_validation:扩展插件,结合密码验证功能

安装插件

安装连接控制插件

sql
INSTALL SONAME 'connection_control';

安装密码验证连接控制插件

sql
INSTALL SONAME 'connection_control_password_validation';

检查插件状态

sql
SHOW PLUGINS LIKE 'connection_control%';

配置连接控制

核心配置参数

参数名描述默认值适用版本
connection_control_failed_connections_threshold失败连接尝试阈值,超过此值将延迟下一次连接3MariaDB 10.1+
connection_control_min_connection_delay第一次延迟时间(毫秒)1000MariaDB 10.1+
connection_control_max_connection_delay最大延迟时间(毫秒)2147483647MariaDB 10.1+
connection_control_delay_growth延迟增长因子,每次失败连接后延迟时间乘以此值1MariaDB 10.1+
connection_control_auto_reset_timeout自动重置超时时间(秒),超过此时间后重置失败计数0(不自动重置)MariaDB 10.4+

配置示例

my.cnfmy.ini 文件中添加以下配置:

ini
[mysqld]
# 连接控制配置
plugin-load-add = connection_control.so
connection_control = FORCE
connection_control_failed_connections_threshold = 5
connection_control_min_connection_delay = 2000
connection_control_max_connection_delay = 30000
connection_control_delay_growth = 2
connection_control_auto_reset_timeout = 300

动态修改配置

可以通过 SET GLOBAL 语句动态修改连接控制配置:

sql
SET GLOBAL connection_control_failed_connections_threshold = 5;
SET GLOBAL connection_control_min_connection_delay = 2000;

使用连接控制

监控连接控制状态

查看连接控制配置

sql
SHOW VARIABLES LIKE 'connection_control%';

查看连接控制状态

sql
SHOW GLOBAL STATUS LIKE 'Connection_control%';

查看失败连接尝试记录

sql
SELECT * FROM information_schema.connection_control_failed_attempts;

手动重置失败计数

对于特定用户,可以手动重置其失败连接计数:

sql
-- MariaDB 10.4+ 支持
RESET GLOBAL connection_control_failed_attempts;

防暴力破解策略

基本策略

  1. 设置合理的阈值:根据实际情况调整 connection_control_failed_connections_threshold 参数
  2. 递增延迟:使用 connection_control_delay_growth 参数实现递增延迟
  3. 自动重置:设置 connection_control_auto_reset_timeout 自动重置失败计数
  4. 结合防火墙:在数据库层面和网络层面同时实施连接限制

高级策略

结合 Fail2ban

可以结合 Fail2ban 工具实现更强大的防暴力破解功能:

  1. 安装 Fail2ban
  2. 配置 Fail2ban 监控 MariaDB 错误日志
  3. 设置 Fail2ban 规则,禁止多次失败连接的 IP

Fail2ban 配置示例

创建 /etc/fail2ban/filter.d/mariadb.conf 文件:

ini
[Definition]
failregex = ^\s*\d+\d+ \d+:\d+:\d+ \S+ \[Warning\] Access denied for user '[^']+'@'\S+' (using password: (YES|NO))?\s*
ignoreregex =

/etc/fail2ban/jail.d/mariadb.conf 中添加:

ini
[mariadb]
enabled = true
filter = mariadb
logpath = /var/log/mysql/error.log
maxretry = 3
bantime = 3600
findtime = 600

连接控制最佳实践

生产环境配置建议

参数名建议值说明
connection_control_failed_connections_threshold3-5平衡安全性和可用性
connection_control_min_connection_delay1000-3000初始延迟 1-3 秒
connection_control_max_connection_delay30000-60000最大延迟 30-60 秒
connection_control_delay_growth2-3每次失败延迟翻倍或三倍
connection_control_auto_reset_timeout300-6005-10 分钟后自动重置

监控建议

  1. 定期检查连接控制状态:监控 Connection_control_delay_generated 状态变量
  2. 查看失败连接记录:定期查询 information_schema.connection_control_failed_attempts
  3. 设置告警:当失败连接次数超过阈值时触发告警
  4. 分析连接模式:识别异常连接模式,调整配置策略

性能考虑

  • 连接控制插件会增加一定的性能开销,尤其是在大量失败连接尝试时
  • 合理设置阈值,避免不必要的延迟
  • 定期清理失败连接记录,减少内存占用

常见问题

如何启用连接控制插件?

使用 INSTALL SONAME 'connection_control' 命令安装插件,然后在配置文件中添加相应配置。

连接控制插件会影响正常连接吗?

正常连接不受影响,只有失败连接尝试会触发延迟机制。

如何查看当前的连接控制配置?

使用 SHOW VARIABLES LIKE 'connection_control%' 命令查看当前配置。

如何手动重置失败连接计数?

在 MariaDB 10.4+ 版本中,可以使用 RESET GLOBAL connection_control_failed_attempts 命令重置所有用户的失败计数。

连接控制插件支持哪些版本?

连接控制插件从 MariaDB 10.1 版本开始支持,部分高级功能(如 connection_control_auto_reset_timeout)在 MariaDB 10.4+ 版本中支持。

如何结合防火墙实现更强大的连接控制?

可以在防火墙层面设置 IP 白名单,只允许特定 IP 访问数据库端口,同时在数据库层面启用连接控制插件。

故障排除

插件安装失败

症状:执行 INSTALL SONAME 'connection_control' 命令失败

解决方法

  1. 检查 MariaDB 版本是否支持连接控制插件
  2. 检查插件文件是否存在于插件目录中
  3. 查看错误日志,了解具体失败原因

连接延迟不生效

症状:多次失败连接后没有出现延迟

解决方法

  1. 检查插件是否已正确安装和启用
  2. 检查连接控制配置参数是否正确设置
  3. 查看 Connection_control_delay_generated 状态变量,确认延迟是否已生成

连接被锁定无法恢复

症状:用户被锁定后无法恢复连接

解决方法

  1. 等待 connection_control_auto_reset_timeout 时间后自动恢复
  2. 手动重置失败连接计数
  3. 临时修改 connection_control_failed_connections_threshold 参数

结论

连接控制是 MariaDB 重要的安全功能,通过合理配置连接控制插件,可以有效防止暴力破解和连接滥用。在生产环境中,建议结合防火墙、Fail2ban 等工具,实施多层次的连接安全策略。

定期监控连接控制状态,分析连接模式,调整配置参数,是确保连接控制功能有效运行的关键。通过综合运用连接控制和其他安全措施,可以显著提高 MariaDB 数据库的安全性。