如果我们需要允许远程访问自己的MySQL服务器,一个好的安全做法是只允许从一个或多个特定IP地址进行访问。这样,我们就不会不必要地将攻击向量暴露给整个互联网。
默认情况下,MySQL服务器被配置为只接受来自同一台计算机的连接。换句话说,绑定地址设置为本地环回地址127.0.0.1.在我们可以接受来自任何其他IP地址的连接之前,我们需要在MySQL配置文件中更改此设置。因此,允许从特定IP地址远程连接到我们的MySQL数据库是一个三步过程。
首先,我们需要通过在 MySQL 配置文件中配置公共绑定地址,将 MySQL 服务设置为可从远程机器访问。
其次,我们需要允许通过我们的系统防火墙进行远程访问。默认情况下,MySQL在端口3306上运行,因此需要允许到该端口的连接通过,并且只允许来自我们指定的IP地址的那些连接是没有问题的。
最后,我们需要创建一个新用户或编辑现有用户,使其可以从特定IP 地址访问。
一、配置MySQL绑定地址
我们将从打开/etc/mysql/mysql.cnf文件开始。使用root权限,在nano 或我们最喜欢的文本编辑器中打开它。
$ sudo nano /etc/mysql/mysql.cnf
bind-address找到该部分下方的设置[mysqld]。默认情况下,当前应将其配置为环回地址127.0.0.1.删除该地址并将服务器的公共 IP 地址放在原处。我们只是10.1.1.1为了示例而使用。
[mysqld]
绑定地址 = 10.1.1.1
如果需要,我们可以改为使用0.0.0.0绑定地址,这是一个通配符,应该将服务绑定到所有可访问的接口。不建议这样做,但如果我们以后遇到问题,这对故障排除很有帮助。
[mysqld]
绑定地址 = 0.0.0.0
进行更改后,将更改保存到文件并退出。然后,我们将需要重新启动 MySQL服务以使更改生效。
$ sudo systemctl 重启 mysql
在某些发行版上,可能会调用该服务mysqld:
$ sudo systemctl 重启 mysqld
二、允许通过防火墙进行远程访问
假设我们的MySQL服务器使用端口3306.我们需要允许它通过系统防火墙。我们需要执行的命令将取决于我们使用的发行版。请参阅下面的列表或根据需要调整命令以符合我们自己系统的防火墙语法。
在下面的示例中,我们允许从IP地址进行远程访问10.150.1.1.只需将自己的IP地址放入我们要允许远程访问的位置。
在Ubuntu系统和其他使用ufw(简单防火墙)的系统上:
$ sudo ufw 允许从 10.150.1.1 到任何端口 3306
在使用firewalld的Red Hat、CentOS、Fedora和衍生系统上:
$ sudo firewall-cmd --zone=public --add-source=10.150.1.1 --permanent
$ sudo firewall-cmd --zone=public --add-service=mysql --permanent
$ sudo firewall-cmd --reload
iptables以及适用于任何系统的好旧命令:
$ sudo iptables -A INPUT -p tcp -s 10.150.1.1 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
三、允许从特定IP远程连接到特定用户
现在MySQL服务可以接受传入连接并且我们的防火墙将允许特定IP 通过,我们只需要配置我们的用户以接受来自该IP的远程连接。
首先使用root帐户打开MySQL。
$ 须藤 mysql
或者,在某些配置中,我们可能需要输入以下命令并提供自己的root 密码:$ mysql -u root -p
如果我们已经创建了一个用户,并且需要将该用户配置为可以从远程 IP 地址访问,我们可以使用MySQL命令RENAME USER。在下面的示例命令中, 我们将使我们的linuxconfig用户可以从 IP 地址访问,但根据您自己的配置需要对其进行调整。10.150.1.1
mysql> 将用户 'linuxconfig'@'localhost' 重命名为 'linuxconfig'@'10.150.1.1';
或者,如果我们是第一次创建此用户,我们将使用该CREATE USER命令。请务必将以下用户名、IP地址和密码替换为自己的。
mysql> 创建用户 'linuxconfig'@'10.150.1.1' IDENTIFIED BY 'password_here';
这里的所有都是它的。授予我们的用户访问一个或多个数据库后,我们将能够使用帐户凭据从自己指定的IP远程访问数据库。
以上是在Linux系统上的特定IP远程连接到MySQL服务器三部分过程。由于MySQL在所有发行版中的工作原理基本相同,因此这些步骤应该适用于所有人。