Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何保护Redis群集?_Database_Security_Database Design_Redis_Sharding - Fatal编程技术网

Database 如何保护Redis群集?

Database 如何保护Redis群集?,database,security,database-design,redis,sharding,Database,Security,Database Design,Redis,Sharding,我知道Redis集群仍然不稳定,但它已经通过了很长一段时间的所有单元测试,所以我开始使用它 我想知道如果节点需要身份验证,Redis集群是否可以正常工作。我倾向于认为是的,因为他们通过不同的端口连接,使用不同的协议,但我不确定,也无法在网上找到任何文档或任何东西来证实这一点 另外,如果redis集群协议越过了身份验证的障碍,这不是一个安全漏洞吗?外部世界可以访问我的数据库吗?(端口至少必须是可访问的,以便它可以与其他节点通信)如果任何协议在互联网上运行,则需要加密(“ssl”),例如跨数据中心。

我知道Redis集群仍然不稳定,但它已经通过了很长一段时间的所有单元测试,所以我开始使用它

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


另外,如果redis集群协议越过了身份验证的障碍,这不是一个安全漏洞吗?外部世界可以访问我的数据库吗?(端口至少必须是可访问的,以便它可以与其他节点通信)

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

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

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


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

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

  • 您不需要向外界公开redis端口。只有ssh一个
  • 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上使用的节点间协议。