我有一个公开可审计投票的数据库,在一个实例中实时更新redis
。该实例中没有其他内容redis
。它已与第二个redis
实例中的相关数据分开。虽然我可以使用指令将其公开到互联网上bind
,但据我所知,这行不通,因为没有办法允许基于源 IP 的写入操作,localhost
而不允许其他人进行bind
相同的访问。
我可以创建一个第三 redis
实例,在本地复制(因此是安全的),其唯一目的是提供可复制的审计实例,然后公开那实例到公共 IP 地址它是 bind
指令。然而,根据“只读副本”文档,但这还不够,因为有以下段落:
只读副本将拒绝所有写入命令,因此不可能因为错误而写入副本。这并不意味着该功能旨在将副本实例暴露给互联网或更广泛地说是存在不受信任的客户端的网络,因为管理命令喜欢[强调 JAB] DEBUG 或 CONFIG 仍处于启用状态。安全页面描述了如何保护 Redis 实例。
安全页面提供了一种有前途的方法来修补这些命令:
禁用特定命令 可以禁用 Redis 中的命令或将其重命名为不可猜测的名称,以便普通客户端仅限于一组指定的命令。
例如,虚拟化服务器提供商可能会提供托管 Redis 实例服务。在这种情况下,普通用户可能无法调用 Redis CONFIG 命令来更改实例的配置,但提供和删除实例的系统应该可以这样做。
在这种情况下,可以重命名或完全隐藏命令表中的命令。此功能可用作可在 redis.conf 配置文件中使用的语句。例如:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 在上面的例子中,CONFIG 命令被重命名为一个不可猜测的名称。也可以通过将其重命名为空字符串来完全禁用它(或任何其他命令),如下例所示:
重命名命令 CONFIG“”
然而前面强调的“喜欢“这让我想知道,这种做法还会给不受信任的客户留下什么第三 redis
实例。此外,由于此实例的唯一目的是向审计公众提供数据的实时复制,因此应禁用的命令集是所有对从源实例的本地复制和到审计实例的全局复制不重要的命令。