Centos

為什麼 iptables 不允許 MySQL 連接?

  • August 4, 2014

由於某種原因,不允許來自特定 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 設置為 yes。

執行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是 to to off

首先,您是否已更改my.cnf為將 MySQL 配置為偵聽伺服器 IP 地址上的連接?您的文件應包含以下行:

bind-address = <public_ip_address_of_your_machine>

其次,您是否允許從該 IP 地址連接的使用者在 MySQL 中進行連接?

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

如果您收到類似於以下的錯誤消息,這將解決問題"Access denied for user: 'someuser@12.34.56.78' (Using password: YES)"

最後,確保您的路由器具有埠轉發和防火牆規則,允許傳入連接到 MySQL 伺服器。

引用自:https://serverfault.com/questions/617564