Redis安全
这篇文章从Redis的角度提供了一个关于安全的介绍,包括访问控制、恶意攻击等话题。
更多关于安全的话题请打开GitHub中的问题,或者当你严重程度的依赖安全,请使用文章最后介绍的GPG。
Redis通用的安全模式
Redis设计时允许被信任的客户端访问。这意味着将Redis暴露在互联网上,或者一个不被信任的客户端可以访问Redis TCP或者UNIX套接字的环境中是不好的。
举个例子,在通常的web应用环境中,Redis被用作数据库、缓存或者消息系统,web应用前端请求Redis的数据并生成页面或者执行用户的请求。在这种情况下,web应用成为不信任前端简介访问Redis的桥梁。这是个特殊的例子,但是不信任的对象对Redis大访问应该总是被实现了ACLs的应用层引导、验证用户的输入或者确定执行在Redis上的操作。一般而言,Redis的优化是针对的是性能而不是安全。
网络安全
Redis端口应该拒绝除了网络中信任的客户端的访问,所以Redis服务器应该只和基于Redis开发的应用部署服务器通信。通常而言,一台单独的服务器直接暴露在互联网,应该开启防火墙保护,而客户端通过回路接口访问。
在redis.conf中添加一行如下的配置,就可以将Redis绑定到单一的接口了。
bind 127.0.0.1
无法保护Redis端口的安全将会造成重大的影响,这是Redis性质所决定的。比如,一个flushall可以在外部被攻击者用来删除数据库中所有的数据。
保护模式
遗憾的是,大多数用户被没有做好保护措施,使得Redis可以在外部被访问。有太多的Redis被简单的暴露在互联网上。鉴于此,从3.2.0版本开始,当Redis使用缺省的配置并且没有密码保护的时,我们称之为保护模式。
在保护模式下,Redis只响应绑定ip客户端的请求,对于其他外部建立连接的的客户端都会响应错误,并且解释为什么以及引导客户正确地配置Redis。
我们期望可以使用安全模式减少由未保护的Redis实例执行没有管理员权限的操作造成的安全问题,但是系统管理员可以忽略这些错误提示,而是禁用安全模式或者手动修改配置绑定所有的访问ip。
验证的特点
Redis没有实现访问控制,它提供了一个小的验证层,可以供用户选择在redis.conf中配置。一旦开启了安全验证,Redis将拒绝任何未验证客户端的请求。客户端的安全验证使用auth命令,后面跟随密码。其中的密码是配置在redis.conf中的,它应该足够长以防止暴力破解,原因如下:
1)Redis响应请求速度非常快。大多数密码都可以在一秒钟被验证。
2)Redis密码是存储在redis.conf中或者可以使用客户端配置,不需要系统管理员记住,所以可以足够长。
密码验证提供了一个冗余的多重的验证,以应对防火墙或者保护措施失败后,Redis仍然可以被保护。auth命令是非加密传送的,所以并不能避免网络窃取。
数据加密支持
Redis是不支持加密的。为了实现信任客户端可以访问互联网或者其他的不信任的网络的设置,需要实现一个额外的保护层,如SSL协议。推荐使用spided。
禁用特殊命令
可以禁用Redis中的命令或者重命名它为不易被猜透的名称。举个例子,假设一个虚拟机供应商需要提供对Redis的管理服务。在这种情况下,普通用户应该不能使用config命令更改虚拟机上的Redis的相关配置。但是系统本身却可以使用特殊的名利实现这些功能。
既然这样,我们可以屏蔽掉命令表中的命令或者重命名它。这种特性可以在redis.conf文件中声明如下:
rename-command config b840fc02d524045429941cc15f59e41cb7be6c52
在上面的例子中,config命令被重命名为一个不太可能被猜到的值。如果想要屏蔽之,只需要将它重命名为空的字符串即可:
rename-command config ""
外部输入攻击
有一类攻击是这样的,攻击者不需要访问Redis而只是选择合适的输入就可以实现外部攻击。这些攻击可以插入数据到Redis中,修改Redis内部数据结构的复杂逻辑。
举个例子,攻击者可以以web的形式向Redis中的哈希表注入大量的数据,将其时间复杂度从O(1)增加到O(n),从而耗尽服务器的CPU,从而造成服务的假死。为了解决这个问题,Redis在每次执行前都生成一个随机的hash种子。
在Redis中,sort命令使用了快速排序的逻辑。目前为止,算法不是随机的,所以在最坏情况下通过选择合适的输入实现一个平方级别的性能。
字符串溢出Nosql注入
Redis protocol中没有字符串溢出的概念,所以在正常情况下,使用正常的客户端类库进行注入是不可能的,protocol是二进制安全的。
通过eval和evalsha命令执行的lua脚本遵循相同的规则,所以这些命令也同样是安全的。但是有一点是需要注意的,那就是lua脚本需要避免从不信任的来源获取的字符串生成脚本。
代码安全
在Redis的典型设置中,客户端允许访问所有的命令集,但是访问Redis不能控制Redis所在系统。
在内部,Redis众所周知的实践为了保证代码安全,以防止缓冲区溢出、格式错误或者其他内存问题。但是使用命令config可以使得客户端有能力改变工作目录和转储文件的名字,这是一个严重的安全问题,它可能随意更改文件转储的位置。
Redis不需要root权限运行。我们推荐使用普通权限的用户就是为了这个目的。Redis的作者正在研究使用一个新的配置参数保护config set/get dir和其他的运行时配置参数。
相关推荐
通过深入理解 Redis 分布式锁的工作原理,开发者可以有效地解决分布式系统中的并发控制问题,提高系统的稳定性和效率。结合提供的 "redis——分布式锁.iml"(可能是 IntelliJ IDEA 项目配置)、"pom.xml"(Maven ...
2. **安全性**:避免在生产环境中使用默认无密码的Redis实例,确保配置了适当的访问控制和密码保护。 3. **更新维护**:定期检查并更新Gul到最新版本,以获取最新的功能和安全修复。 总的来说,Gul作为一款Windows...
6. **ACL增强**:访问控制列表(ACL)功能得到了加强,提供了更细粒度的权限管理,允许管理员对不同用户设置不同的操作权限。 7. **客户端缓存(Cache)**:Redis 6.0引入了客户端侧的缓存机制,可以缓存某些特定命令的...
同时,使用requirepass设置密码以增加访问控制。 2. **监控与日志**:启用日志记录并定期查看,以便及时发现异常行为。同时,配置合适的监控指标,如内存使用、连接数等,以便于运维管理。 3. **备份与恢复**:制定...
同时,建议增加密码访问控制,要求客户端使用`auth`指令并提供正确的密码才能访问Redis。这样一来,即便Redis的地址被暴露,没有正确密码的黑客也无法执行任何指令。 针对Lua脚本的安全性,开发者需要特别注意禁止...
3. **安全考虑**: 由于Redis默认是不安全的,建议在生产环境中使用时配置密码认证和访问控制,避免未授权访问。 4. **监控和性能调优**: 使用工具定期检查Redis的性能指标,如内存使用情况、命令执行速率等,以便...
《Redis配置详解——基于redis.conf 7.0.8版》 Redis,一款高性能的内存数据存储系统,广泛应用于缓存、数据库、消息中间件等多个领域。其配置文件`redis.conf`是管理Redis实例的核心,它定义了Redis服务器的行为、...
1. **安全配置**:在生产环境中,确保Redis服务器配置了适当的访问控制,例如限制只接受来自特定IP的连接,使用SSL/TLS加密通信,以及设置强大的认证密码。 2. **数据持久化**:为了防止数据丢失,定期进行RDB或AOF...
6. **安全控制**:通常,Redismanager会根据Laravel的权限系统限制对Redis的访问,以保护敏感数据。 7. **导入导出**:允许用户将Redis中的数据导出为文件,或者从文件导入数据,这对于备份和迁移数据非常实用。 8...
Redis 5.0.4引入了一种新的数据结构——Stream,这是一种可持久化的消息队列,支持多播功能。与传统的列表和集合不同,Stream提供了更高级别的抽象和功能,非常适合用于构建消息系统或事件日志等应用场景。 ### ...
11. **安全增强**:增加了对过期键清理的控制,以及命令限制和访问控制,提升了系统的安全性。 综上所述,Redis 6.0.3 在保持其核心性能优势的同时,通过多线程、新的数据类型、安全增强等功能升级,进一步满足了...
此外,还强化了访问控制,比如通过ACL(Access Control Lists)进行细粒度的权限管理。 6. **复制改进**: Redis的复制机制在6.0版本中得到了增强,支持部分同步和PSYNC2协议,提高了主从同步的效率和可靠性。此外...
在安全方面,Redis 3.2.6 强化了认证和访问控制。默认情况下,服务器不再监听所有网络接口,而是只监听 127.0.0.1,以防止未授权的远程访问。同时,新增了 AUTH 命令来实现客户端认证,增强了服务器的安全性。 在...
标题中的“mac下的redis可视化客户端即rdm”指的是在苹果Mac操作系统上使用的Redis桌面管理工具——Redis Desktop Manager(简称RDM)。...同时,为了确保数据安全,建议定期备份Redis数据,并设置适当的访问控制策略。
无论用户位于何处,无论他们尝试访问的是内部还是外部资源,都需要进行身份验证、设备合规性检查、动态访问控制等一系列步骤。这种方法强化了身份和访问管理(IAM),并可能集成用户行为分析(UEBA)来识别异常活动...
11. **安全性**:虽然Redis默认不提供严格的权限控制,但可以通过配置文件启用认证和访问控制,防止未授权访问。 12. **监控与性能调优**:Redis提供了丰富的监控命令和INFO命令,帮助开发者了解系统运行状态,进行...
同时,它允许用户设置访问控制,防止未经授权的访问,保障了数据库的安全。 在Another-Redis-Desktop-Manager 1.3.9.exe这个文件中,包含了Windows版的安装程序。用户只需运行这个文件,按照提示步骤即可完成安装,...
"redis.zip"这个压缩包文件包含了对Redis进行配置的关键文件——"redis.conf"。 **Redis配置文件详解** "redis.conf"是Redis服务器的主配置文件,通过编辑这个文件,我们可以调整Redis的各项参数以满足不同的服务...
- **持久性**:Redis支持两种持久化机制——RDB和AOF,可以在系统崩溃后恢复数据。 - **性能**:由于Redis是基于内存的操作,因此具有非常高的读写速度。 - **高级功能**:除了基本的数据结构操作之外,Redis还...