![iptables - 访问端口 3306 超时](https://linux22.com/image/682189/iptables%20-%20%E8%AE%BF%E9%97%AE%E7%AB%AF%E5%8F%A3%203306%20%E8%B6%85%E6%97%B6.png)
我无法从远程服务器连接到 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
(上面我已将实际ip替换为1.2.3.4)
尝试从另一台服务器 (VPS) 连接成功。这让我相信我尝试请求的共享服务器存在问题。
答案1
问题在于规则秩序。
按该顺序输入命令将会像这样:
- 如果端口 3306降低
- 如果端口为 3306,源 IP 为 1.2.3.4接受
问题是您在检查源 IP 之前断开了连接。这是因为您输入的命令会添加规则而不是附加规则,因此输入的最后一个命令将成为第一条规则。
您可以通过以下方式解决此问题:
- 将 -I 更改为 -A (附加)+ 清除旧链/规则
- 或者反转您输入命令的顺序。
答案2
冲洗后iptables
,我用iptraf
显示端口 3306 的实时连接列表。
发出请求的服务器是共享托管服务器,与请求关联的 IP 地址与发起请求的 Web 应用程序的 IP 地址不同。它是不同的且在变化。
唯一的解决方案是将应用程序移至不使用正向代理的 VPS 或包含数据库的服务器。
特别感谢@Jnrprimo 和我一起看这个。