远程Mysql删除所有连接并仅允许localhost和IP地址

时间:2016-11-27 12:20:33

标签: mysql ubuntu remote-access iptables

我通过编辑启用了远程MySQL

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

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

我想要的是禁用与IP表连接到MySQL的所有连接,并且只允许从localhost和一个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

以下代码将删除所有连接,并且不接受localhost或远程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 个答案:

答案 0 :(得分:1)

规则的顺序不正确。

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

应该是最后一次。

答案 1 :(得分:0)

规则

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

看起来不对。看起来源和目标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