我在网上搜索完整的答案,但并没有找到任何答案。我的问题:当我使用MySQL的实现SSL时,允许直接从互联网访问我的服务器上的MySQL是否安全?
我的观点是:MySQL SSL加密所有通信,并且可以通过强制SSL(GRANT ALL PRIVILEGES ON <database> TO '<external_user>'@'%' IDENTIFIED BY 'pass' REQUIRE SSL
)来限制对数据库的访问,以允许仅对具有公钥的用户访问数据库。一切都好。
但是,我必须允许从任何IP地址访问MySQL(删除bind-address 127.0.0.1
),我必须在我的防火墙中打开端口3306(在我的情况下,我使用ufw作为iptables的前端)。这两个步骤对我来说似乎非常不安全(特别是当我计算在fail2ban日志中攻击我的端口22的尝试时)。
有没有人为什么我错了,另类的想法或一组设置让这个安全?
注意:我不想使用SSH隧道。它当然非常安全,但据我所知,它可以大大降低性能。
注意II:我想用PHP PDO类连接到数据库。
答案 0 :(得分:1)
您的设置中使用的SSL可以保护传输免受嗅探和修改 - 仅此而已。您对require SSL
的设置仅要求客户端使用SSL(与您对&#34的声明相反;仅允许具有公钥&#34; 的用户访问数据库)。它根本不强制使用特定的客户端证书甚至客户端证书。这意味着任何知道密码的人都可以连接。
因此,对数据库进行适当的访问控制仍然只取决于保密的所有密码。虽然SSL有助于防止从连接中嗅探密码并防止修改流量(即更改语句),但它无法帮助已经知道密码的攻击者。
TLS无助于防止客户端出现问题,例如攻击者能够使用SQL注入注入自己的SQL语句。并且,无论是否使用SSL,将数据库直接暴露给互联网都会使其容易受到拒绝服务攻击以及暴力破解密码的攻击。</ p>