为什么我输入一些 iptables 命令后 mySQL 停止工作?

为什么我输入一些 iptables 命令后 mySQL 停止工作?

我在 Debian Linux 终端中输入了以下命令:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport Port2 -j DNAT --to-destination yyy.yyy.yyy.yyy:Port1
iptables -t nat -A POSTROUTING -j MASQUERADE

不久之后,mySQL 出现故障,无法连接任何服务器。其中一个错误是

“主机 xxx-xxx-xxx-xxx.static.xyzxyzxyz.xyz' 不允许连接到此 MYSQL 服务器”

xxx-xxx-xxx-xxx 是我上面输入 Iptables 命令的 IP。

答案1

在没有全面了解的情况下回答这个问题确实不太容易,但我可以猜测,由于您正在使用 NAT,并且根据您提供的错误,客户端主机在服务器上的出现方式与以前不同。

例如,服务器允许来自 10.10.10.10 的连接。现在您有 NAT 并且客户端似乎是 20.20.20.20,因此服务器不允许连接。

我会这样做:

1)检查 MySQL 配置并查看它允许连接哪些主机。

2)打开 MySQL 日志并查看尝试连接的客户端的 IP 地址。

3)MySQL 配置是否允许该 IP 地址?

答案2

对于 NAT 规则,您需要指定输入接口之类的东西。否则,所有类型的流量都将应用 NAT 规则。特别是,指定没有任何过滤器的伪装目标可能会导致奇怪的行为。

我假设您已设置规则以仅允许某些指定主机连接到 mysql。最有可能的情况是,您的无针对性伪装规则导致允许连接的 IP 地址被替换为另一个地址,这种情况只能令人困惑地描述,从而破坏了基于 IP 的访问控制。

相关内容