我正在尝试在 Debian 系统的 iptables 中打开端口 3306,以允许访问 MySQL 服务器。为此我输入了这个命令:
root@debian:/# sudo iptables -A INPUT -p tcp --dport 3306 ACCEPT
root@debian:/# iptables-save
我输入了新连接,它已保存在 iptables 中,因为我可以在 iptables-save 命令生成的 iptables 列表中看到新规则。
但是,这个 debian 系统在 Windows7 上的虚拟机上运行,我无法从 Windows 远程登录到此端口。不知道我应该在哪里检查这个问题的解决方案。
关于您的命令行:
root@debian:/# sudo iptables -A INPUT -p tcp --dport 3306 --jump ACCEPT
root@debian:/# iptables-save
您已经通过身份验证为
root
,因此 sudo
在那里是多余的。
您在
-j
参数之前缺少 --jump
或 ACCEPT
(只是认为这是一个拼写错误,而您正确插入了它)。
关于你的问题:
如果您按照问题中的指示正确插入了
iptables
规则,则问题可能与您正在使用的虚拟机管理程序(虚拟机提供商)有关。
如果您提供虚拟机管理程序名称(VirtualBox、VMWare?),我可以进一步指导您,但您可以先尝试以下一些建议:
检查您的虚拟机网络设置并:
如果设置为 NAT,那么您将无法从基础计算机连接到虚拟机。
如果将其设置为托管,则必须首先配置其网络设置,通常为它们提供 192.168.56.0/24 范围内的 IP,因为这是管理程序用于此目的的默认设置。
如果它设置为桥接,与托管相同,但只要 IP 范围对您的配置有意义,您就可以配置它。
(我认为您已经通过完全删除防火墙(iptables -P INPUT ACCEPT;iptables -P OUTPUT ACCEPT;iptables -F)得出结论这是 iptables 问题,并确认您可以从 Windows 机器连接到 MySQL 服务器?)
INPUT 表中的某些先前规则可能会拒绝或丢弃数据包。您可以通过在顶部插入新规则来解决这个问题,尽管您可能需要检查现有规则以查看这是否合理:
iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
请注意,iptables-save 不会持久保存新规则(即重新启动后) - 您需要为此找出其他方法。我通常的路线是将 iptables-save 输出存储在文件中(/etc/network/iptables.rules 或类似文件),然后使用 /etc/network/interfaces 中的 pre-up 语句加载。