如何保护Redis群集?

时间:2012-08-18 06:21:31

标签: database security database-design redis sharding

我知道Redis Cluster仍然不稳定,但是很久以来它已经通过了所有的单元测试,所以我开始使用它。

我想知道如果节点需要身份验证,Redis群集是否可以正常工作。我倾向于认为是,因为它们通过不同的端口连接并使用不同的协议,但我不确定并且无法在spec上找到任何文档或任何内容来确认这一点。

此外,如果redis群集协议飞过身份验证障碍,那么它不是安全漏洞吗?我的数据库可以被外界访问吗? (该端口至少必须是可访问的,以便它可以与其他节点通信)

3 个答案:

答案 0 :(得分:6)

SSH隧道可能是一个简单的解决方案:

  1. 您无需将redis端口暴露给外界。只有ssh一个。
  2. SSH支持数据压缩,可以减少数据中心之间的传输。
  3. 快速示例: ssh -f -L 1234:localhost:6379 server.com -NC

    这会将任何传入连接路由到localhost:1234到远程server.com:6379。因此,您可以在redis配置文件中将local.com:6379替换为localhost:1234。

    您可以查看man ssh以获取更多信息。

答案 1 :(得分:3)

如果任何协议通过互联网飞行,您将需要加密(“ssl”),例如跨数据中心。这通常会影响性能。在Redis的当前安全规范中 -

http://redis.io/topics/security

建议不支持ssl,您需要SSL代理。这通常会导致系统性能下降,例如您必须考虑的延迟。

理想情况下,群集节点应该位于同一位置。如果它们不能,那么集群的设计应该限制跨站点数据传输,或者在没有任何实时约束的情况下离线。

我还选择在每个节点的基础上禁用/启用命令(请参阅上面的安全规范中的详细信息)。我不确定它是否支持群集模式。

答案 2 :(得分:0)

由于Redis在群集中的运行方式,因此无法使用SSL进行Redis群集。

要使SSL在Redis部署中起作用,您需要安装和配置tunnel或隧道应用程序。

来自Redis文档: 请注意,对于每个节点,要使Redis群集正常工作,您需要: 普通客户端通信端口(通常为6379)用于与客户端通信,以向需要访问群集的所有客户端以及所有其他群集节点(使用客户端端口进行密钥迁移)开放。 群集总线端口(客户端端口+ 10000)必须可以从所有其他群集节点访问。

您可以将通道配置为在某个端口接收流量,并将流量重定向到6379或redis-server侦听的任何其他端口。在群集模式下,redis-server会宣布其“ cluster_port”,以便客户端和其他节点可以连接到与此端口相连的端口。如果您覆盖设置“ cluster_announce_port”,则ssl-clients将成功连接到节点,但是redis-cli和通过cluster_port进行的节点间通信将失败。

似乎AWS ElastiCache / Redis Enterprise支持带群集的SSL,但不支持开源Redis。