关闭数据库远程访问权限加固站点安全
关闭数据库远程访问权限:加固站点安全的核心操作
关闭数据库远程访问权限是防止外部暴力破解、数据泄露的最直接手段。
通过修改MySQL/MariaDB监听地址为127.0.0.1,并配合防火墙设置,可以彻底阻断所有外部IP对数据库端口的连接,只允许本机程序访问。
本文以Linux服务器为例,提供从查找配置文件、修改参数、重启服务到验证结果的完整步骤,适合所有使用云服务器或独立主机的网站管理员。
操作前的准备条件
执行以下操作前,请确认你已具备服务器root或sudo权限,并且知道数据库的root密码。
如果使用的是云服务器(例如泽御云提供的云服务器),建议先通过控制台快照或备份当前数据,以防误操作导致服务中断。
本文基于MySQL 5.7/8.0及MariaDB 10.x版本,操作基本一致。
修改MySQL配置文件禁止远程监听
第一步:找到MySQL配置文件
MySQL的主配置文件通常是/etc/mysql/my.cnf或/etc/my.cnf,也可能是/etc/mysql/mariadb.conf.d/50-server.cnf(以MariaDB为例)。
使用以下命令查看实际路径:
sudo find /etc -name "*.cnf" -type f | xargs grep -l "bind-address" 2>/dev/null
如果结果为空,说明当前未启用bind-address参数,后续需要手动添加。
第二步:修改bind-address值
用文本编辑器(如vim或nano)打开配置文件,找到[mysqld]段落下的bind-address参数,改为:
bind-address = 127.0.0.1
如果文件中没有该参数,则在[mysqld]下新增一行。
这个设置告诉MySQL只监听本地回环地址,不再接受来自其他IP的连接请求。
第三步:重启MySQL服务使配置生效
sudo systemctl restart mysql # 或 sudo systemctl restart mariadb
重启后检查服务状态是否正常运行:
sudo systemctl status mysql
同时堵住防火墙和云平台安全组的漏洞
即使MySQL绑定了本地地址,如果服务器防火墙或云平台安全组仍然放通了3306端口到0.0.0.0/0,外部扫描工具依然可能探测到端口开放。
因此需要同步收紧网络规则。
修改iptables/firewalld防火墙
如果使用firewalld(CentOS 7+),执行:
sudo firewall-cmd --remove-port=3306/tcp --permanent
sudo firewall-cmd --reload
如果使用iptables,执行:
sudo iptables -D INPUT -p tcp --dport 3306 -j ACCEPT # 先移除原有规则
sudo iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT # 仅允许本地
检查云平台安全组
对于阿里云、腾讯云或泽御云等云服务商,登录控制台进入安全组/防火墙规则,删除或拒绝来源为0.0.0.0/0的3306端口入站规则。
只保留来源为127.0.0.1或完全不放行该端口即可。
验证远程访问是否彻底关闭
本机测试本地连接
从服务器本机连接数据库,确认能正常登录:
mysql -u root -p -h 127.0.0.1
输入密码后应成功进入MySQL命令行。
远程测试连接(建议从另一台机器执行)
mysql -u root -p -h <你的服务器公网IP>
如果配置正确,
该命令会报错:ERROR 2003 (HY000):,
Can't connect to MySQL server on '...' (10060)
说明远程端口已关闭。
检查端口监听状态
sudo netstat -tlnp | grep 3306
输出应该显示127.0.0.1:3306,而不是0.0.0.0:3306。
常见问题与解决办法
Q1:修改后网站无法连接数据库,怎么办?
A:确认网站程序配置文件(如WordPress的wp-config.php)中的数据库主机是否设为localhost或127.0.0.1。如果设为服务器公网IP,改为localhost即可。
Q2:我需要在远程备份数据库,关闭远程访问后还能备份吗?
A:可以通过SSH隧道或使用云平台提供的备份服务。例如,使用mysqldump --host=127.0.0.1在服务器本地导出SQL文件,再通过scp下载。也可以开启云服务商的自定义备份功能。
Q3:重启MySQL后无法启动,如何排查?
A:检查/var/log/mysql/error.log中的错误信息。常见原因是bind-address语法错误或端口被占用。确认配置文件[mysqld]段落无误后,尝试注释掉其他非必要参数再重启。
Q4:关闭远程访问后,如何临时开放给特定IP维护?
A:可以修改bind-address为0.0.0.0,同时在防火墙中只允许特定IP访问3306端口。操作完毕后务必改回127.0.0.1并收紧防火墙。
总结
通过修改MySQL的bind-address参数并同步调整防火墙和安全组,你已成功关闭数据库远程访问权限,大幅降低被外部扫描和攻击的风险。
建议将此操作作为新服务器上线的第一道安全加固步骤。
如果你需要更精细的权限控制(如仅允许特定应用IP),可结合数据库用户Host字段设置。
坚持“最小权限”原则,站点安全性会更上一层楼。