我已经让 ubuntu 服务器作为我的 php 网站的 lamp 服务器。
mysql 服务器已安装并打开 localhost 端口。
我已经阅读了有关如何通过 ssh 隧道连接到我的 mysql 服务器的信息。
但我不明白为什么这比直接打开 mysql 服务器的互联网端口更好。
因为无论哪种方式,黑客都可以暴力破解端口密码。如果向公众开放,则是 mysql 端口 (3306),如果使用隧道,则是 ssh (22)。
那么为什么对 mysql (以及许多其他服务器应用程序) 使用 ssh 隧道更好?
答案1
如果您使用 SSH 隧道,则您的 SSH 和 MySQL 密码在通信过程中都会被加密——通过隧道的所有数据也是如此。如果您不使用 SSH 隧道,也不使用 MySQL 的 SSL 支持,则不会进行加密,恶意的第三方可能会使用数据包嗅探或其他恶意手段窃听您的通信。
此外,如果您使用 SSH 隧道,那么当远程计算机的 SSH 密钥发生更改时,您将收到警报。标准 MySQL 不会发生这种情况,这意味着攻击者可以使用 IP 欺骗或中间人攻击破坏/干扰/窃听您的通讯。
有关详细信息,请参阅:For more information, see:
答案2
但我不明白为什么这比直接打开 mysql 服务器的互联网端口更好。因为无论哪种方式,黑客都可以暴力破解端口密码
简单的答案是,有一种文化相信 SSH 比 MySQL 更安全。SSH 方法的支持者可能会认为 MySQL 的密码交换协议在过去曾被破解过,所以最好还是依赖 SSH。
不过你说得对。SSH 密码几乎和 MySQL 密码一样容易被暴力破解。
幸运的是,SSH 支持多种身份验证方法,密码只是其中一种。对于面向互联网的主机,我见过系统管理员完全禁用密码身份验证,而是选择更强大的方法,例如公钥身份验证。有关公钥身份验证的更多信息,请参阅 sshd_config(5) 中的 RSAAuthentication 以及 ssh-keygen(1)。
希望这可以帮助!
答案3
除非有充分理由,否则我不会使用 SSH 隧道传输应用程序流量。如果应用程序与数据库在同一台服务器上运行,则可能应该使用 MySQL 套接字并禁用 MySQL 的网络。如果服务器直接在 Internet 上运行,则尤其如此。
如果您有多台服务器,您可以在 MySQL 中原生使用 SSL 来加密传输中的流量。
我怀疑您指的是大型环境中使用 SSH 隧道进行客户端连接的开发人员。通常,这是因为防火墙访问权限不直接授予 MySQL,但允许 SSH 访问,其中 SSH 可以实现一种变通方法,而不会增加 MySQL 的占用空间。
答案4
因为您可以在 MySQL 身份验证之前使用证书身份验证。