如何使用Iptables为白名单IP地址打开端口3306(MySQL)?

时间:2016-12-02 08:39:23

标签: mysql iptables

我有一个同事,他是我们公司的一员,需要从他家里的标准端口3306上访问我们的MySQL服务器。他将使用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地址的访问,并将其替换为新地址。感谢。

1 个答案:

答案 0 :(得分:0)

试试这个,接受来自同一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中授予权限以从其他主机(不是localhost,将其更改为[IP_ADDRESS_FROM]或“%” - 连接所有IP)。