如何在 Redis 3.2.6 Sentinel 中禁用保护模式?

How can you disable protected mode in Redis 3.2.6 Sentinel?

我已经尝试了以下错误消息建议的所有操作:

(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

我的/etc/redis/sentinel.conf:

daemonize yes
sentinel myid XXX
sentinel monitor master XXX 6379 2
sentinel down-after-milliseconds master 60000
sentinel config-epoch master 0
protected-mode no
bind 0.0.0.0
port 26379

编辑: 我的 /etc/redis/redis.conf

port 6379
bind 0.0.0.0
protected-mode no

我也试过添加 sentinel auth-pass master XXX.

我的整个后端都在私有子网上。我通过 VPN 连接到防火墙后面的数据中心,来自同一个专用网络,但我仍然只能在本地连接而不会收到令人沮丧的错误消息。

服务器环境:Debian 8、Redis 3.2.6
客户端环境: Ubuntu 16.10,redis-cli 3.2.1
Redis 实例: 3
哨兵实例: 3

我不仅完成了一个,而且完成了建议的 3/4(没有设置命令行标志)。有没有人有任何指导或想法?我显然遗漏了一些我无法从错误消息、文档、Whosebug、Google 和试错中找出的东西。在深入研究源代码之前,我想我会先 post 在这里提问。

感谢任何帮助。谢谢!

...而且,是的,我在配置更改后重新启动了守护进程。 :)

https://www.reddit.com/r/redis/comments/3zv85m/new_security_feature_redis_protected_mode/

如您所知,我们在暴露于互联网的未受保护的 Redis 实例中遇到了几个问题。我在我的博客 post 中介绍了为什么默认情况下限制绑定到 127.0.0.1 可能是一个可用性问题,更糟糕的是,可能无法解决问题(嘿,只需评论“绑定”语句并重新启动!) .

同一博客 post 介绍了一种被脚本小子大量使用的攻击来侵入 Redis 实例(我猜认真的安全研究人员已经能够做到这一点)。

所以我终于决定在Redis 3.2正式发布之前做点什么:保护模式是结果,将合并到3.2 RC2中。

此提交引入的不稳定分支中已提供此功能。这就是它的工作原理。

当且仅当: 保护模式已启用(这是配置文件和无配置默认值中的默认值)。

如果没有配置 AUTH 密码。

AND IF 没有使用“bind”指令来将 Redis 限制到某些接口。

那么Redis只接受来自环回IPv4和IPv6地址的连接。接受外部连接只是为了向客户端发送一个错误,让用户知道发生了什么:

> PING

(错误)DENIED Redis 运行 处于保护模式,因为保护模式已启用,未指定绑定地址,未向客户端请求身份验证密码。

在此模式下,仅接受来自回溯接口的连接。如果你想从外部计算机连接到Redis,你可以采用以下解决方案之一:

  1. 只需禁用保护模式,通过从服务器 运行 所在的同一主机连接到 Redis,从环回接口发送命令 'CONFIG SET protected-mode no',但请确保 Redis 不是公开的如果您这样做,可以从互联网访问。使用 CONFIG REWRITE 使此更改永久生效。

  2. 或者您可以通过编辑 Redis 配置文件来禁用保护模式,并将保护模式选项设置为 'no',然后重新启动服务器。

  3. 如果您手动启动服务器只是为了测试,请使用 --protected-mode no 选项重新启动它。

  4. 设置绑定地址或认证密码。注意:您只需执行上述操作之一,即可让服务器开始接受来自外部的连接。

这应该以合理的方式保护错误,同时为用户提供线索而不是拒绝连接。请分享您的反馈,以便我们可以根据需要对此功能进行更改,然后再将其合并到 Redis 3.2 RC2 中。谢谢