• 在搞MySQL安全配置的时候,有的人一上来就琢磨账号密码SSL加密啥的,甚至还在权限控制上绕来绕去,结果你猜怎么着?人家外部恶意请求一个IP扫过来,照样能访问到你的MySQL端口。这就跟你家装了三道防盗门,结果忘了关窗户一样……所以今天咱们聊点接地气的,MySQL怎么限制IP访问。

  • 说到限制IP,其实思路挺简单的:你不希望谁来访问,就从源头把它拦住。但MySQL默认装完以后,监听的是0.0.0.0,这意思就是“谁都能来”,等于把数据库裸奔放在公网了。这玩意儿别说是小公司内部系统,哪怕是阿里腾讯的测试环境,一不小心也有可能被黑。

    最简单的方法

  • 所以第一招,老生常谈的办法,就是改配置文件里的bind-address。你找到MySQL的配置文件my.cnf或者my.ini,里面改一行:

    1
    bind-address = 127.0.0.1
  • 这一招是物理断网级别的粗暴:数据库只能本机访问,别的机器压根连不进来。但你说我要从公司内网的另一台服务器连,那咋办?那你可以把bind-address设成你允许的那台机器的IP,或者更灵活点,允许局域网某个网段,比如 192.168.1.%

  • 不过说实话,这一招在大多数复杂部署里不太好用。比如你有主从复制、分布式架构、Docker容器啥的,bind-address那一套就捉襟见肘了。这时候怎么办?靠防火墙。

    Linux开启防火墙

  • 如果你服务器是Linux系统,比如CentOS或者Ubuntu,那iptables或者firewalld就是你的好帮手。你用一条命令:

1
2
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
  • 这啥意思?先允许192.168.1.100访问MySQL的端口3306,然后把剩下的全干掉。是不是有点像白名单?对了,就是这么回事。但iptables配置麻烦,还得保存规则,不然一重启就全没了,运维如果不细心,回头又开放一大片。

    本文转载自https://mp.weixin.qq.com/s/Tw1Ltx4f6IqNJ9rtjQMsFg