2025 年启用 MySQL 远程访问的安全指南
本文提供了实现对 MySQL 和 MariaDB 服务器远程访问的安全方法。.

2025 年启用 MySQL 远程访问的安全指南

本文将教您如何在 2025 年安全、实用地实现对 MySQL 和 MariaDB 服务器的远程访问。通过遵循安全提示并使用 VPN 和 SSH,您可以轻松、自信地访问您的数据库。.
0 股票
0
0
0
0

 

如何安全地启用对 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 网络,提供现成的和可定制的选项。.

 

常见问题解答

您可能也喜欢