如何在 centos 中的 iptables 中允许端口 3306

如何在 centos 中的 iptables 中允许端口 3306

我无法在端口 3306 上进行远程连接。我的托管公司说我必须使用 iptables 允许在端口 3306 上进行连接。

在终端上输入什么命令

Chain INPUT (policy DROP)
target     prot opt source               destination
...
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql
ACCEPT     tcp  --  eth2947.rt.adsl.internode.on.net  anywhere            state NEW tcp dpt:mysql
...

答案1

尝试使用tcptraceroute hostname.fqdn 3306来查看连接是否在某处受到防火墙保护。

最有可能的问题是 mysql 的默认配置是不监听 IP 连接(旧默认skip-networking选项),或者只监听环回(bind-address选项)。如果存在这些选项,请尝试将其注释掉,然后重新启动 mysql。

答案2

嗯,这很大程度上取决于你当前的 iptables 规则集是什么样的。类似这样的内容应该在你的 /etc/sysconfig/iptables 文件中起作用:

-A INPUT -m state --state NEW -m tcp -p tcp -s 1.2.3.4 --dport 3306 -j ACCEPT

...其中 1.2.3.4 是您正在连接的 IP 地址。

如果不起作用,请发布 /etc/sysconfig/iptables 的内容,我会修改我的答案。

另一个选项是通过 ssh 隧道连接到 mysql 服务器。要做到这一点,请使用以下命令连接到您的服务器:

$ ssh user@host -L3306:localhost:3306

然后将本地 mysql 客户端指向 localhost:3306,它将通过隧道连接到服务器。请记住,您还需要在 mysql 中为适当的用户/主机组合授予访问权限。

我应该补充一点,除非绝对需要,否则将 mysql 端口暴露给互联网通常不是一个好主意。ssh 隧道选项是更好的远程连接方式。

相关内容