我有 2 个服务器 - 一个用于 PHP,一个用于 MySQL
两台服务器都经过了强化 - 现在我的问题是,从 PHP 建立到数据库服务器的连接的正确方法是什么?可能通过 SSH?或者只打开 MySQL 端口就足够了?
但是,如果仅通过开放端口,我如何确保没有暴力攻击试图通过该开放端口获取 root 密码?我能以某种方式限制对 Web 服务器的 IP 访问吗?(如果可以,怎么做?)
基本上,我只是想问一下设置/配置这种连接的常见/最佳方法是什么。
更深入的分析
我添加了 iptables 条目,添加了 ufw 条目(基本上生成了相同的 iptable 条目),等等,等等 - 遗憾的是,似乎什么都没起作用。我尝试从 Web 服务器连接到 mysql,但总是被阻止(我mysql-client
在 Web 服务器上安装了,使用mysql
命令进行测试 - 结果:/xxx
用于混淆)
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxxx' (111)
我添加了LOG
iptables 条目,并检查了ufw
日志,syslog
但显然包没有被阻止(没有 [UFW BLOCK])。经过一番搜索,我猜可能是这样apparmor
,但安装后auditd
没有可见的阻止mysql
。
netstat
显示 mysql 正在正确的端口上监听。
我该如何进一步分析这个问题?阻塞的原因可能是什么?
找到解决方案
讽刺的是,我在编辑一分钟后找到了答案:
缺少的是 mysql 配置文件的更改,即bind-address
必须更改为外部 IP。
港口防护工程
答案1
您说您的服务器已经强化了,所以您应该已经采取了某种方式来降低风险,但请检查一些事项。
确保操作系统防火墙仅允许从 php 服务器连接到 MySQL。对于 Linux 服务器,您可以使用 iptables 来执行此操作
iptables -A INPUT -p tcp -s php.server.address --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
确保 MySQL 根用户只能从数据库服务器本身连接。
确保您的数据库用户只能从您的 php 服务器连接,并且他们只有足够的权限来执行必要的操作。
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'php.server';
正如 Lucas 建议的那样,你可以将 SSL 添加到连接中 - MySQL 手册中对此进行了介绍这里。