我无法从远程服务器连接到 mysql。我已经bind-address
注释掉了,但是当我在 iptables 中添加规则以阻止其他连接时,请求服务器的连接超时。
我试过这个建议:
iptables -I INPUT 1 -p tcp -s 1.2.3.4 --dport 3306 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 3306 -j DROP
但我的连接仍然超时。我输入这两行的顺序无关紧要。当我尝试连接时,我正在回显远程服务器 IP 地址,它确实是我在 iptables 中使用的 IP 地址。没有这DROP
条线,连接可以正常工作,就像我的 iptables 中没有任何内容一样。
打印出来的echo -e "target prot opt source destination\n$(iptables -L INPUT -n | grep 3306)"
:
target prot opt source destination
ACCEPT tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:3306
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
(上面我已经用1.2.3.4替换了实际ip)
尝试从另一台服务器 (VPS) 连接成功。这让我相信我尝试请求的共享服务器存在问题。
问题是规则顺序。
按该顺序输入命令最终将如下所示:
问题是您在检查源 IP 之前断开连接。这是因为您输入的命令在规则之前而不是在规则之后,因此最后输入的命令成为第一条规则。
您可以通过以下方式解决此问题:
刷新后
iptables
,我曾经iptraf
显示连接到端口 3306 的实时列表。请求服务器是共享托管服务器,与请求关联的 IP 地址与发起请求的 Web 应用程序的 IP 地址不同。这是不同的和变化的。
唯一的解决方案是将应用程序移动到不使用转发代理的 VPS 或包含数据库的服务器。
特别感谢 @Jnrprimo 和我一起看这个。