我尝试连接到 Ubuntu 机器上的端口 3306,但无法连接。当我连接时,iptables -L -n | grep 3306
我看到了以下内容:
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:3306
所以看起来我应该能够连接。
我应该寻找哪些规则来撤消这些?我粗略地看了一眼,没有看到任何规则。另外,当我这样做时,grep 80
我grep 443
看到的内容与上面的内容几乎相同,但使用 80 和 443 而不是 3306。即使无法连接到端口 3306,我也可以连接到端口 80 和 443。
网络服务器托管在 Rackspace 的云上。我知道 AWS 有独立于操作系统的额外防火墙规则可以设置 - Rackspace 有吗?我在菜单中找不到任何规则,我的 Google 搜索也没有结果。
答案1
一般来说,你应该考虑 1) MySQL 绑定地址,以及 2) 防火墙。
由于你无法与 建立连接telnet SERVER_IP 3306
,防火墙阻止了连接,或者 MySQL 没有监听该端口。
防火墙
您应该将防火墙规则作为一个整体进行检查,而不通过管道传输到 grep,以查看是否有任何匹配的规则多于您在问题中粘贴的那个。
关于防火墙的话题,向公共互联网开放 :3306 通常是一个坏主意™。我更喜欢使用SSH 隧道连接到我的远程数据库。
MySQL 绑定地址
在您的 MySQL 配置中查找“bind_address”,或者尝试netstat -plnt
在列表中查找 MySQL。要接受远程连接,bind_address 必须是“127.0.0.1”以外的其他地址(SSH 隧道可解决这个问题!)。
答案2
我的解决方案是重新安装 ufw。
apt purge ufw
apt install ufw
然后添加端口3306。
答案3
我不用 ipbles,虽然它是一个系统管理器,但你需要知道,但必须非常小心,如何使用防火墙 ufw 。如果你已经拥有它,我建议你卸载防火墙:sudo apt-get ufw remove
然后重启服务器并清除所有现有的 iptables。认为它的iptables -
F ** then reinstall ufw then open port 3306. **
sudo ufw 允许 3306/协议`
这将打开端口。如果你仍然可以通过 telnet 连接,那么你需要检查你的 MySQL 绑定地址