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