Centos
為什麼 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 設置為 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 tooff
。
首先,您是否已更改
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 伺服器。