文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Redis数据库安全详解

2024-04-02 19:55

关注

前言

本篇文章基于的Redis 的环境为: redis_version:7.0.5

文档内容均为学习Redis 官方文档心得.

Redis相信大家都或多或少都听说过吧,作为内存数据库的代表, 但是近些年Redis 被攻击的典范也是越来越多,我们将如何防护Redis 安全呢? 跟着我们的脚本,来看看这篇文章吧.

对于Redis而言,我们设置的方法大概有以下几种

如之前所述,安全方面归根结底,总结一句话就是:最好的安全设置就是最小化权限。

那我们来看下,Redis 有哪些安全设置呢?

开放最小化很重要

作为Redis 服务器而言, 应该仅允许受信任的客户端访问,其他访问都应该拒绝,因此也善用防火墙相当重要,当然这个防火墙不是在Redis 是做不了的,应该在Redis 所属的机器进行设置。

若该Redis 是自建于本地实体机中,那么应该考虑防火墙软件,例如: iptablesfirewalld 等。若是存在于各云厂商实例中(ECS ),那么应该善用云厂商提供的防火墙。

那我们Redis 在这一步就什么也不能做了么? 不是的,在Redis 配置中,有一个配置参数为bind ,该参数选项是将Redis对相应的网卡监听,若配置如下:

bind 127.0.0.1

则监听在本地的回环地址上,若该值为空,则监听所有的网卡(3.2版本提供的功能)。

若想监听在多个网卡上的话,ip 地址直接可以使用空格分开即可,例如:

bind 127.0.0.1 10.0.2.15

则该配置则是监听到127.0.0.1 以及 10.0.2.15 网卡上。

在已经启动的Redis 中,想查看Redis 监听到哪些网卡上,除了查看所属机器的网路状态外,还可以通过CONFIG GET bind 来获取。

除此之外,Redis还为我们提供了"保护模式",即配置: protected-mode ,默认为yes 。请不要关闭它,因为它能够检测到启动后的Redis 是否安全,其检测策略为:当Redis 没有设置密码的时候,从外部进行访问,这就会触发它的保护模式,即向访问用户提示信息:

Redis is running in protected mode because protected mode is enabled and no password is set for the default user.

当然网上很多博客提供的最快解决如上问题的方法是关闭其保护模式,请不要这么做.

认证不可少

接上一段落,若Redis 想从外部进行访问,除了关闭保护模式以外,还可以设置Redis 密码. 在Redis 中,通过配置requirepass 来设置密码,不过设置密码应当注意一下,Redis 密码不应该设置为若密码,建议设置为复杂密码.

原因如下:

如上所属,客户端在校验身份的时候,发送的是auth 命令,该命令可以理解为Redis 的普通命令,是没有被加密的, 若请求报文被监听了,也有泄密的可能. 所以尽可能的使用加密进行通信,即: SSL/TLS.

防止管理员误操作也很重要

Redis中有一些非常危险的命令,例如: FLUSHALL ,FLUSHDB ,该命令前者是清空所有的数据,后则是清空当前库的数据, 在日常工作中,如果误操作了,那后果不堪设想. 还有一些命令,运行后可能会导致系统阻塞,非常不建议使用,例如:KEYS ,HGETALL等.

基于上述情况,禁用某些命令来保证系统安全是非常有必要的, 好在Redis给我们提供了方法. 若想禁用某些命令,可以在其服务器redis.conf 配置文件中,使用rename-command 指令,例如:

rename-command FLUSHALL ""
rename-command FLUSHDB ""

若设置为空的话,则是禁止使用命令.修改配置,启动服务器后,若再使用这些命令,即会报错: ERR unknown command .

若并非想禁用命令,而是想重命名命令,那么将空字符串修改为重命名后的命令即可,例如:

rename-command KEYS FINDALL

设置后,即可使用FINDALL 来代替KEYS , 案例如下:

127.0.0.1:6379> set juejinNmae pdudo
OK
127.0.0.1:6379> FINDALL *
1) "juejinNmae"
127.0.0.1:6379> 

担心网络被监听? 开启TLS之旅吧

开启ssl/tls 后势必会降低Redis 的吞吐量,所以是否采用该配置主要还是看业务情况,若业务想要避免被抓包等,适合开启该设置,若仅在某一内网使用,那就没必要的.

Redis 6.0 以后启用了SSL/TLS ,但是注意, 若想使用SSL/TLS 的话,在编译的时候需要指定make BUILD_TLS=yes , 这里需要注意的是, 客户端和服务器都需要编译才行.

这里简单举个例子如何启动Redis吧.

证书生成

openssl genrsa -out ca.key 2048
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

数据库启动

redis-server --tls-port 6379 --port 0  --tls-cert-file ca.crt --tls-key-file ca.key  --tls-ca-cert-file ca.crt

客户端连接

redis-cli --tls --cert ca.crt --key ca.key  --cacert ca.crt

在使用SSL/TLS 后,我们需要禁用非TLS 端口并且开启SSL/TLS 端口后,可以直接设置:

port 0
tls-port 6379

这样的话,通过6379 连接,默认情况下是走的SSL/TLS

总结

安全一直是大家比较关心的话题,在Redis 中,我们不仅仅要防外部入侵, 还要知道, 技术人员的误操作也许破坏的更为严重, 始终需要记住, 权限最小化.不仅对外,也需要对内.

以上就是Redis数据库安全详解的详细内容,更多关于Redis数据库安全的资料请关注我们其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯