Database 如何保护Redis群集?
我知道Redis集群仍然不稳定,但它已经通过了很长一段时间的所有单元测试,所以我开始使用它 我想知道如果节点需要身份验证,Redis集群是否可以正常工作。我倾向于认为是的,因为他们通过不同的端口连接,使用不同的协议,但我不确定,也无法在网上找到任何文档或任何东西来证实这一点Database 如何保护Redis群集?,database,security,database-design,redis,sharding,Database,Security,Database Design,Redis,Sharding,我知道Redis集群仍然不稳定,但它已经通过了很长一段时间的所有单元测试,所以我开始使用它 我想知道如果节点需要身份验证,Redis集群是否可以正常工作。我倾向于认为是的,因为他们通过不同的端口连接,使用不同的协议,但我不确定,也无法在网上找到任何文档或任何东西来证实这一点 另外,如果redis集群协议越过了身份验证的障碍,这不是一个安全漏洞吗?外部世界可以访问我的数据库吗?(端口至少必须是可访问的,以便它可以与其他节点通信)如果任何协议在互联网上运行,则需要加密(“ssl”),例如跨数据中心。
另外,如果redis集群协议越过了身份验证的障碍,这不是一个安全漏洞吗?外部世界可以访问我的数据库吗?(端口至少必须是可访问的,以便它可以与其他节点通信)如果任何协议在互联网上运行,则需要加密(“ssl”),例如跨数据中心。这通常会影响性能。在Redis当前的安全规范中- 建议不支持ssl,您需要ssl代理。这通常会导致系统性能受到影响,例如您必须考虑的延迟 因此,理想情况下,集群节点应该位于同一位置。如果不能,那么集群的设计应该限制跨站点数据传输,或者在没有任何实时约束的情况下离线传输
我还为每个节点选择了仅在需要的基础上禁用/启用命令(请参见上述安全规范中的详细信息)。我不确定这在集群模式下是否受支持。SSH隧道可能是一个简单的解决方案:
ssh-f-L 1234:localhost:6379 server.com-NC
这将把任何到localhost:1234的传入连接路由到远程服务器。com:6379。因此,您可以在redis配置文件中将server.com:6379替换为localhost:1234
您可以查看manssh以了解更多信息。由于Redis在集群中的操作方式,不可能使用SSL的Redis集群 要使SSL在Redis部署中工作,您需要安装和配置stunnel或隧道应用程序 来自Redis文档: 请注意,要使Redis群集正常工作,每个节点都需要: 用于与客户端通信的普通客户端通信端口(通常为6379)将向需要到达群集的所有客户端以及所有其他群集节点(使用客户端端口进行密钥迁移)开放。 群集总线端口(客户端端口+10000)必须可以从所有其他群集节点访问 您可以将stunnel配置为在某个端口接收流量,并将流量重定向到6379或redis server正在侦听的任何其他端口。在集群模式下,redis服务器宣布其“集群_端口”,以便客户端和其他节点可以连接到此端口。如果覆盖设置“cluster_公告_port”,ssl客户端将成功连接到节点,但redis cli和通过cluster_port的节点间通信将失败
AWS ElastiCache/Redis Enterprise似乎支持带群集的SSL,但不支持开源Redis。该端口可能仅可供可能位于同一本地网络上的其他节点访问。您不应该对外开放。@seppo0010如果您希望跨数据中心复制节点,则必须这样做。@JoãoPintoJerónimo,如果您无法使用AWS等工具实现这一点,则只能从某些IP地址打开端口。您对性能影响有何看法?真的很糟糕吗?在群集模式下,传统redis服务器只能使用命令的一个子集,只有使用单个键的命令。我认为集群之间的通信最多的是发布/订阅,这将通过SSL代理传输…性能影响通常非常主观,取决于有多少数据流入SSL代理,ssl代理有多强大等等。最好的方法是设置一个集群,并进行一些性能和容量测试。这只适用于单节点Redis,而不适用于集群。从2016年的Redis文档中可以看出:“目前Redis群集不支持NATED环境以及IP地址或TCP端口重新映射的一般环境。”隧道将破坏它在端口10000上使用的节点间协议。