如何在 Ubuntu 上设置 MySQL 连接次数过多封 IP

在这篇文章中,我们将学习如何在 Ubuntu 上配置 MySQL,使其在连接次数过多时自动封禁 IP 地址。这个过程主要涉及编辑 MySQL 配置文件和使用 fail2ban,它是一个监控系统,能够自动检测和封禁恶意行为。

流程概述

以下是整个流程的步骤概述:

步骤 描述
1 安装 fail2ban
2 配置 MySQL 以记录连接信息
3 创建 fail2ban 过滤器
4 配置 fail2ban 监控 MySQL 日志
5 启动并测试 fail2ban

步骤详解

1. 安装 fail2ban

使用以下命令在 Ubuntu 上安装 fail2ban

sudo apt update         # 更新包列表
sudo apt install fail2ban  # 安装 fail2ban

这两行命令分别更新软件包列表并安装 fail2banfail2ban 可以防止暴力破解和其它恶意攻击。

2. 配置 MySQL 以记录连接信息

接下来,我们需要确保 MySQL 记录连接失败的事件。编辑 MySQL 配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 

在文件中添加或设置以下内容:

log_error = /var/log/mysql/error.log  # 指定错误日志文件位置

这行代码将错误日志设置为 MySQL 的日志文件,以便我们可以跟踪任何连接问题。

3. 创建 fail2ban 过滤器

fail2ban 中创建针对 MySQL 的过滤器,确保 fail2ban 能够识别恶意连接尝试。创建一个新的过滤器文件:

sudo nano /etc/fail2ban/filter.d/mysql-auth.conf

在文件中添加以下内容:

[Definition]
failregex = access denied for user <USER>.* from <HOST>
ignoreregex =

这段配置告知 fail2ban 识别 MySQL 日志中的错误连接信息。<USER><HOST> 是占位符,分别表示用户名和主机。

4. 配置 fail2ban 监控 MySQL 日志

接下来,我们需要配置 fail2ban 监控 mysqld 的连接警告。编辑 jail.local 文件。

sudo nano /etc/fail2ban/jail.local

添加以下内容:

[mysql-auth]
enabled = true  # 启用 MySQL 监控
port    = mysql  # 指定 MySQL 使用的端口
filter = mysql-auth  # 使用之前创建的过滤器
logpath = /var/log/mysql/error.log  # 指定 MySQL 日志路径
maxretry = 5  # 最大尝试次数
bantime = 600  # 封禁时间 (10分钟)

这段配置启用了 MySQL 的监控,指定了使用的日志文件,并设置了最大尝试次数和封禁时间。

5. 启动并测试 fail2ban

现在,可以启动 fail2ban 服务并检查状态。

sudo systemctl start fail2ban  # 启动 fail2ban
sudo systemctl enable fail2ban  # 设置为开机自启动
sudo fail2ban-client status mysql-auth  # 查看 mysql-auth 的状态

通过这几行命令,你可以启动服务,使其在开机时自启动,并查看 MySQL 监控的状态。如果设置没有问题,将显示当前监控的 IP 地址。

状态图

为了更直观地理解这个过程,我们可以用状态图来表示工作流程:

stateDiagram
    [*] --> 安装Fail2ban
    安装Fail2ban --> 配置MySQL
    配置MySQL --> 创建过滤器
    创建过滤器 --> 配置监控
    配置监控 --> 启动并测试
    启动并测试 --> [*]

结尾

通过上述的步骤,我们成功地设置了 MySQL 在连接次数过多时自动封禁 IP 地址的机制。这样可以有效地保护数据库免受恶意攻击。希望这篇文章对你有帮助,祝你在开发的道路上越走越顺!如果有任何疑问,欢迎随时提问。