【问题标题】:How to secure a MySQL server running on Linux?如何保护在 Linux 上运行的 MySQL 服务器?
【发布时间】:2017-09-30 05:16:07
【问题描述】:

我在 Debian 8 上的 Nginx 服务器上安装了 MySQL 服务器。

服务器上的生产页面,比如example.com 已安装 SSL。

此 MySQL 服务器将与 PHP 一起用于设置和检索数据。

现在我很困惑是否要为客户端和 MySQL 服务器之间的连接添加 SSL?最佳做法是什么?

【问题讨论】:

  • 由于 http 和 mysql 服务器在同一个系统上,因此没有网络通信需要保护。理想情况下,无论如何您都使用基于文件系统的套接字。
  • Client > Nginx/PHP (HTTP server) > MySQL ...客户端从不直接与 MySQL 对话 ...还是我误解了这个问题?
  • 由于我以前使用过托管服务器,请原谅我对服务器术语缺乏了解。我有一个 ssl 加密的 nginx 服务器,说“example.com”中有一个文件,比如“example.com/connect.php”,它将连接到安装在同一台 nginx 服务器上的 mysql 服务器并运行查询。我需要 mysql_server 的 ssl 吗?

标签: php mysql linux ssl nginx


【解决方案1】:

如果流量通过应用程序在本地运行到 MySQL,则您的流量是安全的(只要您的 linux 服务器是安全的)。

如果应用只在本地访问 MySQL,则不需要 ssl for MySQL。

如果有人要远程访问 MySQL 或者您的应用服务器是远程的,您需要 ssl。

【讨论】:

  • 感谢您的评论。关于'linux服务器是安全的',我不确定。请参考我的另一个问题>stackoverflow.com/questions/43741824/…,其中公共 ip 地址打开默认主机页面并且其中没有 ssl。同一服务器中指向此 IP 地址的另一个页面中包含 ssl。我有兴趣将此页面用于 mysql 连接。由于 mysql_server 运行在同一台服务器上,它有一个带有 ssl 的页面和一个没有 ssl 的默认页面。有什么影响?
【解决方案2】:

你最需要担心这两件事。

运输安全。 MySQL 流量是否会离开您的本地网络?如果是这样,它在传输过程中是否加密?如果您在本地做所有事情,那么您无需担心。如果您的数据库连接通过 Internet,请确保使用 SSL。

系统安全。您的 MySQL 服务器可以从 Internet 访问吗?有必要吗?如果没有,只需将规则添加到 iptables 以阻止所有非来自本地主机的传入流量到 3306。还要确保您使用强 SSH 密码并实施 fail2ban,或仅允许基于密钥的身份验证。

【讨论】:

  • 关于“传输”,它不会离开本地网络,我已经对服务器名称进行了 ssl 加密,例如“example.com”和“www.example.com”,但不确定 IP 地址。请参考我在堆栈stackoverflow.com/questions/43741824/… 上的另一个问题,关于“系统”,它只能从服务器上的 php 文件中访问。我正在使用 ufw 来阻止所有流量并只允许 ssl 端口。够了还是我应该去fail2ban?
【解决方案3】:

SSL 有助于保护您的客户。 SSL 可能会阻止嗅探数据包。例如,如果有人进行信用交易,信用卡数据将不会在明显的视图中,因为数据在客户端和服务器之间移动。但是,SSL 不是保护您的 SQL 资源的方法,它是 Web 服务器和 SQL 数据库服务器之间的后端。例如,您需要为 mysql 数据库运行“mysql_secure_installation”,并设计您的 PHP 代码以防止 SQL 注入问题。所以,是的,SSL 对于保护您的客户端非常重要,但需要其他设计因素来保护您的后端服务器资产。

【讨论】:

  • 我已经完成了“mysql_secure_installation”。我在一些在线资源中看到了关于将 ssl 添加到 mysql 服务器 > xmodulo.com/enable-ssl-mysql-server-client.html 和 mysql 页面也提到了关于保护连接 > dev.mysql.com/doc/refman/5.7/en/secure-connections.html 并且也在 cipherli.st 中提到。让我很困惑。
  • 是的,我明白你在说什么。例如,如果您的用户位于 Intranet 中……例如公司业务,那么 SSL 可能会有所帮助。但是在 Internet 设置中,您的 Web 服务器应该是您的客户端可以连接到您的唯一方式。如果他们可以访问您的 MySQL 数据库,那么您需要重新设计防火墙。通常,在 Intranet 中,您不需要使用 SSL。但是,如果某些黑客确实安装了数据包嗅探器,那么他们可以获得更多的东西。如果他们能做到这一点,那已经很糟糕了。
  • 正如您所说,“Web 服务器应该是您的客户可以连接到您的唯一方式”。我不太熟悉这些术语。如果我从 vps 获得了一个公共 ip x.x.x.x 并且当我安装了 nginx 时,它会转发到默认的欢迎页面。我在同一台服务器上创建了一个新站点,例如带有 ssl 的 example.com。当我加载example.com 时,它会加载一个带有绿色地址栏的页面。当我加载x.x.x.x 时,它会加载没有绿色地址栏的同一页面。因此,如果我有一个在 example.com 上运行 mysql 查询的 php 脚本,是否可以从 x.x.x.x 访问它?
  • 请参考我的其他问题。谢谢您的帮助。 stackoverflow.com/questions/43741824/…
猜你喜欢
  • 2020-06-21
  • 2015-07-18
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多