iptables – 访问端口3306超时

我无法从远程服务器连接到mysql。 我有bind-address注释掉,但是当我在iptables中添加规则来阻止其他连接请求服务器的连接超时。

我试过这个build议 :

 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 

但我的联系仍然超时。 input这两行的顺序并不重要。 我试图连接时回显远程服务器的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.4replace了实际的ip)

试图从另一台服务器(VPS)连接成功。 这导致我相信有一个问题,我试图请求从共享服务器。

问题是规则顺序。

按照这个顺序input命令将会像这样结束:

  1. 如果端口3306 DROP
  2. 如果端口3306和源IP是1.2.3.4 ACCEPT

问题是您在检查源IP之前删除连接。 这是因为您input的命令是前置的,不会附加规则,因此input的最后一条命令成为第一条规则。

你可以通过以下方法解决

  • 将-I更改为-A(追加)+清除旧链/规则
  • 或者反转你input命令的顺序。

在刷新iptables ,我使用iptraf来显示到端口3306的实时连接列表。

请求服务器是共享托pipe服务器,与请求关联的IP地址与发起请求的Web应用程序的IP地址不同。 这是不同的和改变。

唯一的解决scheme是将应用程序移动到不使用转发代理的VPS或包含数据库的服务器。

特别感谢@Jnrprimo和我一起看这个。