用证书加密保护你的Galera数据库集群
前言
今天发现Galera数据库集群默认状态下如果没有用iptables或者机房防火墙墙制定4567端口的访问权限,所有人都能够直接把你整个数据库给拖下来。因为默认的async同步方式不需要验证,任何人都可以向集群请求SST(传输状态存档,大概就是这个意思,可以理解为一整个数据库)而不需要验证。
Orz我的天,幸好发现了这个问题,不然到时候整个数据库被人拉下来用户密码全部暴露了就不好玩了。我上网搜了一整天,终于研究出一个有效的不用防火墙也能保护数据库的方法。
准备
首先你需要一台电脑
你需要生成一个CA,一个私匙和一个证书。这用Openssl很容易一就能搞上一份。
注意:
- 一定一定要用RSA的密匙,包括CA也需要使用RSA的。
我才不会告诉你我在ECC的CA上浪费了一个小时寻找错误 - 内容(CN啊OU啊之类的)随便填,但是CA的CN(常用名)和证书的CN不能一样,不然会认为是自签名证书而无法认证。
不懂怎么用Openssl的可以参考这份文档进行配置,只需要生成server key即可。
配置数据库
- 打开
/etc/mysql/conf.d/mariadb.cnf
(如果你是用我这篇文章所介绍的方法安装的话,不是的话可以直接在conf.d
里面新建一个文本wsrep.cnf
(名字随便,只要cnf
后缀即可),添加进这么一行:[mysqld] ... wsrep_provider_options="socket.ssl_key=/etc/mysql/你的私匙.key; socket.ssl_cert=/etc/mysql/你的证书.crt; socket.ssl_ca=/etc/mysql/你的CA.crt; socket.ssl_compression=YES";
*注意,私匙、证书和CA需要上传到所有的集群服务器上。这个配置文件也应该在所有服务器上面改*
- 然后停掉所有的服务器。
- 然后在其中一台执行
service mysql start --wsrep-new-cluster
- 等20秒(其实应该5秒就好了),在其它的机子上执行
service mysql start
- 至此一切配置完毕。当别人没有密匙的时候,无法与集群建立连接,所以就没法拖你的数据库了。
关联文章: