为什么 iptables 不允许 MySQL 连接?

为什么 iptables 不允许 MySQL 连接?

由于某些原因,不允许来自特定 IP 地址的 mysql 连接。这是我制定的规则(摘自iptables-save):

-A INPUT -s 12.34.56.78/32 -p tcp -m state --state NEW -m multiport --dports 22,80,3306 -j ACCEPT

有趣的是,SSH 连接和 HTTP 页面加载完美,没有问题。我后来为 MySQL 连接添加了 3306,但它们似乎被忽略了。为什么?

我在 CentOS 上。我已重新启动 iptables 服务,并将 IPTABLES_SAVE_ON_STOP/RESTART 设置为是。

跑步netstat -tunelp让我看到了这一点:

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      27         8849593    10712/mysqld

以下是我的完整规则列表iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  192.168.1.0/24       anywhere            state NEW multiport dports ssh,http,mysql
ACCEPT     tcp  --  some-resolved-hostname-1.com  anywhere            state NEW multiport dports ssh,http,mysql
ACCEPT     tcp  --  some-resolved-hostname-2.com  anywhere            state NEW multiport dports ssh,http,mysql
ACCEPT     tcp  --  some-resolved-hostname-3.com  anywhere            state NEW multiport dports ssh,http,mysql
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

笔记:服务器端没有日志(包括错误日志)。我尝试连接时收到的错误是:

D:\>mysql -u username -p -h 12.34.56.78
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '12.34.56.78' (10060)

此外(因为这是来自尝试连接的Windows机器)我尝试了这个:

D:\>telnet 12.34.56.78 3306
Connecting To 12.34.56.78...Could not open connection to the host, on port 3306: Connect failed

还要注意的是,skip_networking是到到off

答案1

首先,您是否已更改my.cnf配置 MySQL 以监听服务器 IP 地址上的连接?您的文件应包含以下行:

bind-address = <public_ip_address_of_your_machine>

其次,在 MySQL 中,您是否已授权从该 IP 地址连接的用户进行连接?

GRANT ALL ON example.* TO someuser@'12.34.56.78' IDENTIFIED BY 'PASSWORD';

如果您收到类似以下错误消息,这将解决问题"Access denied for user: '[email protected]' (Using password: YES)"

最后,确保您的路由器具有端口转发和防火墙规则,允许传入连接到 MySQL 服务器。

答案2

我看到的是--dports而不是--dport,也许22和80有效,因为它们在另一条规则上被允许,而它只是不能应用这一行?

相关内容