如何保护Redis群集?

问题描述 投票:7回答:3

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

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

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

database security database-design redis sharding
3个回答
3
投票

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

http://redis.io/topics/security

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

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

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


6
投票

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

  1. 您不需要将redis端口暴露给外部世界。只有ssh一个。
  2. SSH支持数据压缩,可以减少数据中心之间的传输。

快速示例:ssh -f -L 1234:localhost:6379 server.com -NC

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

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


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.