远程Mysql如何断开所有连接并仅允许本地主机和IP地址连接?

3

我通过编辑 my.cnf 文件启用了远程 MySQL。

 /etc/mysql/mysql.conf.d/mysqld.cnf 
    bind-address = 0.0.0.0

现在我可以通过任何远程IP访问MySQL。

我想要的是使用IP表禁用所有对MySQL的连接,只允许从本地主机和一个IP地址访问。我进行了以下操作:

/sbin/iptables -A INPUT -p tcp -d 127.0.0.1 --dport 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -d 16x.xxx.xx.xx --dport 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

以下代码将断开所有连接,并且不接受本地主机或远程IP。我使用的是Ubuntu 16.10。
编辑:我也尝试了一个链。
iptables -N mysql 
iptables -A mysql --src 127.0.0.1 -j ACCEPT
iptables -A mysql --src 14x.xxx.xx.xx -j ACCEPT
iptables -A mysql -j DROP 
iptables -I INPUT -m tcp -p tcp --dport 3306 -j mysql   

在任何可能的方式下DROP行之后,端口都将被阻止。

2个回答

1

规则的顺序不正确。

Line

/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

应该放在最后。

请问您能否将 iptables-save 命令的输出粘贴在这里? - Marko
Rijeka在这里,@Marko帮忙:D - user1769322
临时清除所有规则并重新测试。如果仍然无法正常工作,则路由上的某些内容正在阻止您。 - Marko
如果不起作用,则您已将错误的IP地址列入白名单。 - Marko
我完全是一知半解,规则是错误的。“-d”表示目标地,应该换成“-s”。 - Marko
显示剩余5条评论

0

规则

2 ACCEPT tcp -- 14x.xxx.xxx.xx 14x.xxx.xxx.xx tcp dpt:3306

看起来不对。源IP地址和目标IP地址似乎相同。您必须将连接服务器的IP地址加入白名单。

为了识别IP地址,请在拒绝规则之前添加以下iptables规则

iptables -I INPUT -m tcp -p tcp --dport 3306  -m limit --limit 5/min -j LOG --log-prefix "Mysql access log: " 

日志记录在 dmesg 和 syslog 中(Ubuntu 上的 /var/log/syslog),并且看起来像这样

Nov 28 08:55:57 myServer kernel: Mysql access log: IN=eth0 OUT= MAC=00:19:99:ce:15:cb:b0:c6:9a:67:d6:81:08:00 SRC=1.2.3.4 DST=5.6.7.8 LEN=60 TOS=0x10  PREC=0x00 TTL=56 ID=63880 DF PROTO=TCP SPT=40807 DPT=3306 WINDOW=14600 RES=0x00 SYN URGP=0 

在我的示例中,应该被列入白名单的源IP地址是1.2.3.4。


接受 tcp -- 144.xx.xx.xx 213..xx.xx.xx tcp dpt:3306 接受 tcp -- 144..xx.xx.xx 127.0.0.1 tcp dpt:3306 拒绝 tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 我按照你说的做了,但还是不起作用 SRC=144.xx.xx.xx DST=213.xx.xx.xx LEN=54 TOS=0x02 PREC=0x00 TTL=52 ID=7163 DF PROTO=TCP SPT=62891 DPT=3306 W$ - user1769322

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接