如何安全地启用对 MySQL/MariaDB 的远程访问?
在本更新版(2025 年)指南中,我们将探讨启用对 MySQL 和 MariaDB 服务器远程访问的实用且安全的方法。我们的目标是为网站管理员、DevOps 团队、数据库团队和开发人员提供一份实用的清单,以便在不损害安全性的前提下,仅允许授权用户和应用程序访问服务器。.
一般步骤和安全原则
步骤概要:
- 建筑设计: 绝不 除非必要,否则不要将数据库直接放置在公共互联网上。.
- 使用专用网络(VPC/VLAN)、VPN 或 SSH 隧道。.
- 基于 IP 地址限制访问并创建用户 最低分数.
- 对数据库流量进行 TLS/SSL 加密,并使用强身份验证(*caching_sha2_password* / *X.509*)。.
- 启用日志记录和速率限制,使用防火墙和入侵检测系统(IDS/IPS)。.
- 根据应用场景评估性能和延迟,并选择合适的数据中心位置。.
为什么MySQL不应该直接暴露在互联网上?
数据库包含敏感数据和凭证,因此极易成为黑客攻击的目标。在没有任何限制或加密的情况下向互联网开放 3306 端口会增加数据泄露、暴力破解和 DDoS 攻击的风险。.
逐步指南:配置 MySQL 进行远程访问(实用指南)
1)编辑配置文件
常用配置文件:
- MySQL(Debian/Ubuntu):
/etc/mysql/mysql.conf.d/mysqld.cnf - MariaDB:
/etc/mysql/mariadb.conf.d/50-server.cnf
默认情况下,该行可能 绑定地址 到 127.0.0.1 已设置。接受来自特定 IP 地址或所有地址的连接:
受到推崇的: 允许特定 IP 地址:
bind-address = 192.0.2.10除专用网络外,不建议使用:
bind-address = 0.0.0.0更改后:
systemctl restart mysql
2)创建具有限制的安全用户
绝不会来自用户 根 请勿用于远程连接。示例命令:
mysql -u root -p
CREATE USER 'appuser'@'203.0.113.45' IDENTIFIED WITH caching_sha2_password BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'203.0.113.45';
FLUSH PRIVILEGES;要点:
- 使用特定的 IP 地址('203.0.113.45')比使用 '%' 安全得多。.
- 决心 最低权限 (最小特权)。.
- 对于来自私有网络内部的连接,请使用私有地址(例如 10.xxx)。.
3) 为 MySQL 启用 SSL/TLS
使用 OpenSSL 创建 CA 和证书的简要示例:
openssl genrsa 4096 -out ca-key.pem
openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem -subj "/CN=MyDB-CA"
openssl genrsa 4096 -out server-key.pem
openssl req -new -key server-key.pem -out server-req.csr -subj "/CN=db.example.com"
openssl x509 -req -in server-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650
openssl genrsa 4096 -out client-key.pem
openssl req -new -key client-key.pem -out client-req.csr -subj "/CN=dbclient"
openssl x509 -req -in client-req.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650将证书放置 我的.cnf:
[mysqld]
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem重启后,可以要求用户使用证书:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE X509;
-- یا فقط TLS بدون client cert:
ALTER USER 'appuser'@'203.0.113.45' REQUIRE SSL;来自客户端的安全连接:
mysql -u appuser -p -h db.example.com --ssl-mode=REQUIRED --ssl-ca=ca.pem
4) 使用 SSH 隧道
适用于管理员和受限访问权限,尤其是在 TLS 不可用的情况下。在客户端计算机上:
ssh -fN -L 3306:127.0.0.1:3306 [email protected]此方法将您连接到本地端口 3306,该端口通过隧道连接到远程服务器。.
5)防火墙设置
使用 ufw 的示例(仅允许指定的 IP 地址):
ufw allow from 203.0.113.45 to any port 3306 proto tcp使用 firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" port protocol="tcp" port="3306" accept'
firewall-cmd --reload端口检查:
ss -tlnp | grep 3306
telnet db.example.com 3306
更多保护——先进且推荐的解决方案(2025)
使用私有网络、VPC 和 VPN
请勿将数据库端口暴露于互联网,而应在应用程序和数据库之间使用专用网络。如果您使用我们的服务,则可以使用专用网络和 BGP/VRF 来实现安全连接。.
对于分布式用户,建议使用 VPN 或 IPsec,以便数据库流量仅通过加密通道传输。.
堡垒主机和零信任
部署具有双因素身份验证 (MFA) 和完整会话日志记录功能的堡垒主机比直接开放端口更安全。零信任模型意味着每个连接都必须经过身份验证,并且只允许访问特定的资源。.
身份验证和算法
- MySQL 8: 使用
缓存 sha2 密码而不是mysql_native_password这样更安全。. - 在敏感情况下,请使用 X.509客户端证书 受到推崇的。.
- 使用 Secret Manager 或 Vault(如 HashiCorp Vault、AWS Secrets Manager)管理密码比将密码放在文件或代码中要好。.
抵御攻击和限制
- 保持 max_connect_errors 值较低,
跳过名称解析启用此功能可避免基于 DNS 的延迟。. - 使用 fail2ban 和特殊的 mysql-auth 过滤器来阻止恶意 IP。.
- 总体连接速率限制和适当的连接超时设置。.
监控和日志记录
启用审计日志、常规日志和慢查询日志,并使用 Prometheus + Grafana 或 Percona Monitoring 等工具,对于识别恶意模式和性能问题至关重要。.
根据应用场景选择数据中心位置和配置的实用技巧
根据申请类型提供的指导:
- 交易(外汇/加密货币): 到达交易所/交易服务器的最低往返时间 (RTT) 至关重要;建议选择靠近交易所的地点。我们的服务提供超过 85 个地点,可满足这一需求。.
- 赌博: 游戏数据库需要低延迟;优化的BGP路由和低延迟网络至关重要。游戏VPS服务器和防DDoS服务器也很有用。.
- 人工智能/渲染: 对于高 I/O 和计算负载,将 GPU 和数据库服务器放在同一个专用网络区域中可以降低延迟。.
- 网站和应用程序: 在私有网络中使用 CDN 和应用层缓存(Redis/Memcached)以及数据库,可以实现速度和成本的最佳平衡。.
针对各种用途的 my.cnf 配置示例建议
中等负载服务器(Web/应用程序)配置:
[mysqld]
bind-address = 10.0.1.5
max_connections = 200
innodb_buffer_pool_size = 2G
skip-name-resolve = 1
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem适用于高负载的专用AI/渲染服务器:
innodb_buffer_pool_size = 16G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000始终根据内存、I/O 和应用程序的需求调整设置。.
启用远程访问前的最终安全检查清单
- 使用专用网络或 VPN 传输数据库流量
- 限制防火墙中允许的 IP 地址
- 创建权限最小的用户,并使用安全的哈希算法
- 启用TLS/SSL,必要时启用客户端证书。
- 远程连接未使用 root 权限
- 启用日志记录;将日志发送到外部系统
- 设置连接限制并使用 fail2ban
- 监控并发出异常流量增加或错误警报
- 定期备份和恢复测试
结论和最终建议
到 2025 年,远程访问 MySQL 应该既快速又安全。最佳方案是:首先考虑使用私有网络或 VPN,然后添加 TLS 和 IP 限制,并将访问权限限制在最低限度。.
使用堡垒主机、多因素身份验证 (MFA) 和高级日志记录功能将提升您的安全性。如果您需要高度稳定的服务器、低延迟网络和安全功能,我们的服务涵盖全球 85 多个数据中心、GPU 服务器、计算服务器、DDoS 防护服务器、交易和游戏 VPS、CDN 和 BGP 网络,提供现成的和可定制的选项。.









