Redis怎样保证数据安全?

问题:Redis默认是没有设置密码

调研:Redis默认没有设置密码是因为它的设计目标是追求高性能和低延迟。

当Redis配置文件中启用密码后,客户端连接Redis时需要进行密码验证。这个验证过程会增加CPU的负载,并可能导致链接响应时间变长,从而影响整体系统性能。特别是在处理大量并发连接时,密码验证可能会成为系统的瓶颈。此外,如果Redis和客户端位于不同的机器上,并且两者之间的网络延迟较高,密码验证的时间也会增加,进一步影响连接速度。

在默认情况下,Redis假设运行在受信任的环境中,例如内部网络或受限制的访问环境中。因此,密码认证的额外开销可能会影响其性能表现。

子问题:那为什么Redis要支持设置密码呢?

调研:Redis的作者认为,对于需要访问Redis的人员应该具有足够的权限和访问控制,以保证系统的安全性。如果Redis服务器部署在没有合适保护措施的公共网络上,或者需要加强对未经授权访问的防范,建议使用密码进行身份验证。

测试:redis启动配置中增加requirepass,设置密码,测试性能和不设置基本没有区别。 

12c340cc21d9d82e817e929831c609e5.png

分析:通过测试可观察到在毫秒级的测试精度下,加密码和不加密码性能几乎没有区别。建议新建集群直接采用加密码的方式。对之前有业务的集群咱们后面再分析。

问题:Redis除了密码认证,还有哪些措施可以保证其安全性?

方案1:修改绑定地址:默认情况下,Redis只绑定到本地回环地址(127.0.0.1)。您可以更改bind指令,让Redis监听其他网络接口。例如,要将Redis绑定到所有可用接口,您可以将其更改为:

bind 0.0.0.0

要指定某些IP,也只需要绑定特定IP即可,可参考下面官方注释:

b8e3cd5701b3e8830957f1ebffca9676.png

但这样,应用要增加部署机器,扩容时,就要手动修改配置,很麻烦了。

方案2:使用防火墙:确保您的服务器防火墙规则只允许受信任的IP地址、者地址段、端口访问Redis端口。因为本身对于其他应用也需要设置严格的防火墙策略,各个大厂都在做防火墙策略收敛,强烈推荐此方式。

其他一些通用安全防御方案,可参考之前写的《红蓝攻防、红蓝对抗》。下面来说一下,如果redis老集群没有密码要改成需要密码,做平滑升级,需要哪些步骤:

1、新建集群B,设置连接需要密码,区别于原来的老集群A不需要密码

2、客户端做双写,老集群A和新集群B的数据同步更新

3、同步老集群A的历史数据到新集群B,并进行数据一致性校验

4、灰度发布客户端改成使用新集群B。

从上面步骤可以看出,成本还是蛮高的。必要性有多少呢?这样来看,咱们数据库连接都是要用户名密码的,因为一个数据库建议只有一个应用来连,知道密码的人是有限的。而且数据库密码一般都是加密的。

而redis密码是明文写在配置文件中的,如果内网被攻破了,黑客可以直接访问配置文件,密码意义还大吗?本身redis集群是公用基础设施,可能一个公司就一套集群,这意味着所有开发都需要知道用户名密码,范围这么大了,密码的意义还大吗?

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值