搭建基于spiped代理的加密Redis Master/Slave服务


背景

由于业务的需求,线上的Redis服务需要部署到公网上。考虑到数据的敏感性,因此不希望数据在公网上是明文传输的。

所以需要引入SSL/TLS来加密传输的数据,从而保证数据在一定程度上的安全性。

鉴于目前的Redis并没有官方支持的ssl/tls通信功能。所以只能通过SSL代理来实现。在这里选择了Spiped作为SSL的代理工具。

Spiped的项目地址是:https://github.com/Tarsnap/spiped

官方地址是:http://www.tarsnap.com/spiped.html

部署

Redis2台机器,IP、端口分别为:

1. 192.168.1.100:36379(Master)
2. 192.168.1.101:36379(Slave)

分别在2台机器上执行如下安装操作:

下载redis

下载地址为:http://download.redis.io/releases/redis-3.2.3.tar.gz

编译redis

编译&安装的命令为:

tar zvxf redis-3.2.3.tar.gz && cd redis-3.2.3 && make && make install

启动redis

启动Master:

启动master的命令为: cd src/ && ./redis-server ../redis.conf

启动Slave:

启动slave的操作为:

  1. 修改redis.conf。在 redis-3.2.3目录下。添加slaveof,对应结构是: slaveof 192.168.1.100 36379
  2. 启动Slave,启动命令为:cd src/ && ./redis-server ../redis.conf

验证

在服务端启动redis-cli并写入测试数据:

# 登录redis-cli
./redis-cli -p 36379

# 写入测试数据
set "TEST_KEY" "FOO"

在客户端启动redis-cli并检查是否有测试数据正确同步

# 在slave端启动redis-cli
./redis-cli -p 36379

# 检查字段是否同步过来
KEYS *

部署Spiped

下载spiped

spiped的下载链接为:https://github.com/Tarsnap/spiped.git

安装spiped

安装命令为:

cd spiped && make

配置spiped

生成对应的key 生成key的命令为:dd if=/dev/urandom bs=32 count=1 of=spiped.key

服务端启动spiped

在服务端机器上执行如下命令:

cd spiped
./spiped -d -s [0.0.0.0]:46379 -t [192.168.1.100]:36379 -k /root/tools/etc/spiped.key

该命令表示启动一个spiped代理,监听46379端口,并转发到192.168.1.100的36379端口。

客户端启动spiped

首先需要从服务端scp回来生成的spiped.key 之后启动spiped的命令为:

cd spiped
./spiped -e -s [0.0.0.0]:46379 -t [192.168.1.100]:46379 -k ../../etc/spiped.key

该命令表示启动一个spiped代理,监听46379端口,并转发到192.168.1.100上的46379端口上。

验证spiped

  1. 修改slave的redis.conf的slaveof,改为: 12.0.0.1 46379。
  2. 重启slave的redis-server。
  3. 在Master上的redis中写入新的测试数据:set "TEST_KEY3" "bla"
  4. 打开slave上的redis-cli。检查对应的key是否存在:KEYS *

如果在客户端能正确同步服务端新增加的key,则表示spiped配置正确。