【问题标题】:How do I open up port 3306(MySQL) for a whitelisted IP address using Iptables?如何使用 Iptables 为列入白名单的 IP 地址打开端口 3306(MySQL)?
【发布时间】:2025-11-30 04:15:01
【问题描述】:

我有一位同事是我们公司的成员,他需要从他家访问我们的 MySQL 服务器,在标准端口 3306 上。他将使用 mysqli 连接通过 PHP 脚本访问它。即使我通过 mysql 为他添加了访问权限,他也无法连接以获取可怕的“连接被拒绝”消息。我暂时禁用了 iptables 并让他尝试并且他能够连接。但是当然我必须重新打开 iptables,现在他又无法连接了。

我将 iptables 规则保存到一个文件并检查,其中唯一引用端口 3306 的行是这样的:

-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT

我不是 iptables 专家,但我假设由于 3306 没有“INPUT”规则,这意味着端口 3306 对任何传入流量都关闭了。所以我的问题很简单也很直接:我怎样才能让那个端口对除了他之外的所有人都关闭?换句话说,我怎样才能让他的 IP 地址只使用端口 3306 上的 INCOMING 流量而不使用其他流量,同时保持服务器为 OUTPUT 流量工作?还值得注意的是,他的 IP 地址是动态的,并且会经常更改,所以我也想知道如何删除对 IP 地址的访问,并用新的替换它。谢谢。

【问题讨论】:

  • 不寒而栗。听起来像“我怎样才能小心地将我的工作 MySQL 服务器设置为从互联网上被黑客入侵”。你的工作 MySQL 数据有价值吗?如果是,请购买网络安全人员的服务,他们可以为您组织 VPN 以保护家庭工作连接,并正确配置和测试您的安全设置。哦,请确保您对所有有价值的数据都有良好的备份。而且您已经更改了默认的 MySQL 管理员密码,不是吗?您可以通过移动到非标准端口(即 NOT 3306)来减少被自动黑客攻击的机会。
  • @barny 查看通用日志中的黑客尝试真是太棒了。很吓人。
  • 确实如此。保重。

标签: mysql iptables


【解决方案1】:

试试这个,接受来自同一 IP 的所有 tcp 连接: sudo iptables -A INPUT -s [IP_ADDRESS_FROM] -p tcp --destination-port 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

而且,您必须将您的 IP 地址绑定到:

/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address=[IP_ADDRESS_FROM]

最后,在 mysql 中授予权限以从其他主机连接(不是本地主机,将其更改为 [IP_ADDRESS_FROM] 或“%” - 对于所有 IP)。

【讨论】:

  • 哦,请确保 所有 mysql 密码都是强密码。反对开放互联网的想法是可怕的。