开放 Redis 端口以允许远程连接

168

我可以在服务器上Ping Pong Redis:

# redis-cli ping
PONG

但是远程工作时,我遇到了问题:

$ src/redis-cli -h REMOTE.IP ping
Could not connect to Redis at REMOTE.IP:6379: Connection refused

在配置中,我得到了标准端口:

# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

那么我是否应该在远程Ubuntu机器上打开端口6379呢?我该如何操作?


Redis没有在远程机器上监听? - Sergio Tulentsev
也许,如何检查它 - Maxim Yefremov
你已经禁用了ufw吗? - insign
10个回答

294

你是否在Redis服务器上设置了bind选项以允许远程访问?

修改前(文件 /etc/redis/redis.conf

bind 127.0.0.1

之后

bind 0.0.0.0

如果这不是问题的原因,您可能需要检查是否有任何防火墙阻止访问。然后运行sudo service redis-server restart以重新启动服务器。

重要提示:如果您没有使用防火墙(iptables、ufw等)来控制连接到正在使用的端口的人员,那么任何人都可以连接到此 Redis 实例。如果不使用Redis' AUTH,那么任何人都可以访问/更改/删除您的数据。请保持安全!


2
在配置文件中,我在字符串“bind 127.0.0.1”后添加了字符串“bind 0.0.0.0”。重新启动Redis。现在可以远程连接了。 - Maxim Yefremov
使用 bind 0.0.0.0bind 127.0.0.1 0.0.0.0,有什么区别吗? - Nyxynyx
1
@Nyxynyx 0.0.0.0绑定到所有适配器,所以这是不必要的。虽然不应该有影响。 - MildlySerious
1
打开 Redis 对任何 IP 调用是否安全?我们如何限制只能从特定的 IP 访问 Redis? - brsbilgic
@brsbilgic 这应该使用防火墙来完成。可以查看iptables或UFW。 - MildlySerious
1
@MildlySerious 非常感谢。我们浪费了将近两周的时间来确定是防火墙或网络还是其他问题。但这个更改像冠军一样奏效了。 - kinnu

29

2
我必须使用bind 0.0.0.0。"bind 127.0.0.1" 对我无效。我不需要将 "protected-mode" 设置为 "no"。警告:不要在 "bind" 前留空格,否则服务器将无法启动。注意:我正在使用 Redis 的 Windows 端口。 - Josh

20

Bind & protected-mode 都是必要的步骤。但如果已启用 ufw,则需要在 ufw 中允许 redis 端口。

  1. 检查 ufw 状态:ufw status,如果显示为 Status: active,那么请允许 redis 端口:ufw allow 6379
  2. vi /etc/redis/redis.conf
  3. bind 127.0.0.1 改为 bind 0.0.0.0
  4. protected-mode yes 改为 protected-mode no

ufw 对我很重要。 - Lucho
我错过了保护模式选项,这个回答应该获得更多的赞同,让其他人也不要错过这个选项 :) - Rutger
@Rutger 同意 :) - Ng Lok Chun

7

快速提示:在没有进一步保护 Redis 服务器的情况下进行此操作并不是一个好主意,因为它可能会使您面临攻击。请确保还实施了 AUTH 或其他安全措施。有关详细信息,请参见 http://redis.io/topics/security


5

1- 将绑定127.0.0.1的内容注释掉

2- 设置密码:yourpassword

然后检查防火墙是否阻止了您的端口

iptables -L -n

service iptables stop


4
打开位置为/etc/redis.conf的文件。 注释掉bind 127.0.0.1。 重新启动Redis服务:
sudo systemctl restart redis.service
禁用Firewalld:
systemctl disable firewalld
停止Firewalld:
systemctl stop firewalld

然后尝试:

redis-cli -h 192.168.0.2(ip) -a redis(username)

4
另一个可能有帮助的提示。
Redis可以绑定到多个IP地址-当您不想将其开放给整个世界(0.0.0.0),而只想在本地网络中访问时,这非常有用。
1. 使用命令sudo nano /etc/redis/redis.conf 2. 在bind设置的末尾添加您的本地网络IP。 3. 重新启动服务:sudo service redis-server restart 现在,您可以轻松地从同一网络中的其他计算机访问Redis,例如:redis-cli -h 10.0.0.1

谢谢!建议2非常有帮助,:-) 那正是我在寻找的解决方案。 - lorenzo
1
嗨,这应该是最被接受的答案。虽然绑定0.0.0.0可以工作,但它会使你的服务器面临安全威胁,即使你有防火墙。从技术上讲,你允许任何连接到你的局域网的服务器或电脑访问这个服务器。 - eladcm

3

请注意,如果您正在使用 AWS ec2 实例,则还需要执行一项额外步骤,我认为这也是必需的。我错过了第三步,花了整整一天时间才想出添加入站规则到安全组。

步骤1(与之前相同):在您的 redis.conf 中将 bind 127.0.0.1 更改为 bind 0.0.0.0

步骤2(与之前相同):在您的 redis.conf 中将 protected-mode yes 更改为 protected-mode no

对于 Amazon Ec2 实例非常重要:

步骤3:进入当前 ec2 机器的安全组。添加一个自定义 TCP 的入站规则,使用端口 6379 并选择“从任何地方使用”的选项。


不要允许从任何地方访问,只允许特定IP地址访问。这是一个很大的安全问题。 - Matoran

2
  1. 打开 $REDIS_HOME/redis.conf 文件,取消注释 requirepass -YOUR-PASSWORD-HERE- 并在指定行写下您的密码。

  2. 使用 redis-cli 登录 Redis,并使用 auth -YOUR-PASSWORD-HERE- 命令验证您在数据库中的密码。

  3. 通过将 $REDIS_HOME/redis.conf 中的字符串更改为 protected-mode no 来禁用保护模式。

  4. 搜索所有绑定端口值并对它们进行注释。只需将 bind 0.0.0.0 添加到 $REDIS_HOME/redis.conf 文件中。

  5. 禁用防火墙或打开 Redis 端口。

  6. 使用 ./redis-server $REDIS_HOME/redis.conf 启动 Redis。

  7. 通过 ./redis-cli -h -YOUR-IP- -a -YOUR-PASSWORD-HERE- 检查配置。

  8. 通过 ./redis-cli -h -YOUR-IP- ping 检查配置。


17
请不要提供禁用防火墙的建议。 - Samantha Atkins

2
在我的情况下,我正在使用redis-stable。
Go to redis-stable path 
 cd /home/ubuntu/software/redis-stable

打开redis.conf文件

vim redis.conf

bind 127.0.0.1 修改为 bind 0.0.0.0

protected-mode yes 修改为 protected-mode no

重新启动redis-server:

/etc/init.d/redis-server stop
 redis-server redis.conf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接