用证书加密保护你的Galera数据库集群

MariaDB 2016年4月12日

前言

今天发现Galera数据库集群默认状态下如果没有用iptables或者机房防火墙墙制定4567端口的访问权限,所有人都能够直接把你整个数据库给拖下来。因为默认的async同步方式不需要验证,任何人都可以向集群请求SST(传输状态存档,大概就是这个意思,可以理解为一整个数据库)而不需要验证。

Orz我的天,幸好发现了这个问题,不然到时候整个数据库被人拉下来用户密码全部暴露了就不好玩了。我上网搜了一整天,终于研究出一个有效的不用防火墙也能保护数据库的方法。

准备

首先你需要一台电脑

你需要生成一个CA,一个私匙和一个证书。这用Openssl很容易一就能搞上一份。

注意:

  1. 一定一定要用RSA的密匙,包括CA也需要使用RSA的。我才不会告诉你我在ECC的CA上浪费了一个小时寻找错误
  2. 内容(CN啊OU啊之类的)随便填,但是CA的CN(常用名)和证书的CN不能一样,不然会认为是自签名证书而无法认证。

不懂怎么用Openssl的可以参考这份文档进行配置,只需要生成server key即可。

配置数据库

  1. 打开/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需要上传到所有的集群服务器上。这个配置文件也应该在所有服务器上面改*

  2. 然后停掉所有的服务器
  3. 然后在其中一台执行service mysql start --wsrep-new-cluster
  4. 等20秒(其实应该5秒就好了),在其它的机子上执行service mysql start
  5. 至此一切配置完毕。当别人没有密匙的时候,无法与集群建立连接,所以就没法拖你的数据库了。

关联文章:

Tags

Howard Liu

在读大学生,平常使用窝窝屎提高血压和听网课使自己更快入睡。

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.