指令安全

Redis的一些指令会对Redis服务的稳定性及安全性各方面造成影响,例如keys指令在数据量大的情况下会导致Redis卡顿,flushdb和flushall会导致Redis的数据被清空。

Redis在配置文件中提供了 rename-command 指令用于将一些危险的指令修改成其他指令,例如:


  1. rename-command keys xxxnxxx
  2. 复制代码

将 keys 指令修改为 xxxnxxx 指令,这样需要执行 keys 指令的时候,输入 xxxnxxx 才是对的效果,以此可以禁止客户端使用keys。

如果想完全禁用某个指令,可以将其设置成空字符串,这条指令将无法通过任何字符串来执行:


  1. rename-command flushdb ''
  2. 复制代码

更为重要的一个指令是config,该指令不仅可以获取redis的配置信息,还可以直接在线修改密码,十分危险,可以通过rename的方式进行屏蔽禁用。

端口安全

redis默认监听 6379 端口,如果该端口对公网暴露,可能会被一些黑客扫描到,从而使用一些指令、lua脚本对服务器注入一些木马

可以通过redis的bind配置指定客户端的ip来限制可访问服务端的ip地址,


  1. bind 192.168.1.199
  2. 复制代码

但更建议对redis设置密码,这样即使端口暴露了,没有正确的密码也无法访问,


  1. requirepass you password
  2. 复制代码

密码也会影响到从节点的复制,从节点也需要在配置文件里配置相应的密码进行同步操作。


  1. masterauth you password
  2. 复制代码

Lua脚本安全

使用redis执行lua脚本时,切记不可使用用户输入的内容来动态生成lua脚本,这可能会导致恶意代码植入,影响服务器的稳定性,

同时Redis在服务单运行也应当使用普通用户的权限,这样即使有恶意代码,也无法使用root权限对服务器做攻击。

通信安全

Redis本身不支持SSL连接,如果客户端和服务端的通信是在公网上进行的,那么就有数据被窃听的风险,需要考虑使用SSL代理。

SSL代理常见的有SSH,Redis官方更推荐使用 spiped 工具,其功能单一,使用简单,便于理解,下图是使用 spiped 对ssh通道(ssh通道本身也可能存在风险)进行二次加密。

SSL代理也可以用在跨机房复制上,用来保证通信安全,例如公司有两个机房,突然有个需求需要从A机房访问B机房读取数据,如果使用普通tcp直接访问,就会导致传输的数据暴露在公网上,很不安全,可能会被窃听。

redis本身不支持SSL连接,不过使用spiped作为代理,就可以让数据得到加密。

spiped会在客户端和服务端各启动一个进程,客户端的spiped负责接收到客户端的请求数据,然后加密,在发送给服务端的spiped进程,其收到后进行解密,在传给redis server,反之也是,

每个 spiped 进程都会监听一个端口,用来接收数据,同时还会作为一个客户端将数据转发到目标地址。

spiped 使用

安装(mac):


  1. // 安装 spiped
  2. 1. brew install spiped
  3. // 生成随机密钥文件
  4. 2. dd if=/dev/urandom bs=32 count=1 of=spiped.key
  5. // 使用密钥文件启动spiped进程,-d 解密输入数据 -s 源地址监听 -t 转发目标地址
  6. 3. spiped -d -s '[192.168.31.141]:6479' -t '[127.0.0.1]:6379' -k spiped.key
  7. // 使用密钥文件启动spiped进程,-e 加密输入数据 -s 源地址监听 -t 转发目标地址
  8. 4. spiped -e -s '[127.0.0.1]:6579' -t '[192.168.31.141]:6479' -k spiped.key
  9. 复制代码

6579就是本机客户端的spiped进程,可以使用redis客户端对其进行连接然后向它发送指令,6579收到指令后进行加密,转发给 ip为141的6479端口上,

6479接收到数据后进行解密,解密后转发给redis 6379端口上,达到了加密传送的效果。

如下图,可以看到我们使用jedis连接spiped本地进程发送指令,效果与直接连接redis一样,说明spiped起到了代理的作用。

如果使用jedis直接连接服务端的spiped进程,收到了错误的提示,说明我们的数据没有加密直接发送过去,对方无法识别处理,必须走spiped本地进程加密发送过去才可以。

关闭spiped


  1. 1. ps -ef | grep spiped
  2. 501 42506     1   0 11:07下午 ??         0:00.08 spiped -d -s [192.168.31.141]:6479 -t [127.0.0.1]:6379 -k spiped.key
  3.   501 42616     1   0 11:07下午 ??         0:00.08 spiped -e -s [127.0.0.1]:6579 -t [192.168.31.141]:6479 -k spiped.key
  4. 2. kill 42506 42616
  5. 复制代码

注意

spiped客户端进程可以支持多个客户端连接的数据转发工作,还可以通过参数限定允许的最大客户端连接数。

但是服务端spiped与redis server只能1对1工作,一个spiped无法转发到多个redis server上去,也就是说要为每个redis server准备一个spiped,这增加了运维成本。

觉得有帮助请帮忙点下,谢谢:https://developer.aliyun.com/article/852005

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树数据库组成39183 人正在系统学习中

[转帖]Redis之安全措施的更多相关文章

  1. [转帖]Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案

    Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案 https://www.cnblogs.com/xlecho/p/11834011.html echo编辑整理,欢迎转载,转 ...

  2. [转帖]Redis、Memcache和MongoDB的区别

    Redis.Memcache和MongoDB的区别 https://www.cnblogs.com/tuyile006/p/6382062.html >>Memcached Memcach ...

  3. [转帖]Redis性能解析--Redis为什么那么快?

    Redis性能解析--Redis为什么那么快? https://www.cnblogs.com/xlecho/p/11832118.html echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加e ...

  4. [转帖]Redis未授权访问漏洞复现

    Redis未授权访问漏洞复现 https://www.cnblogs.com/yuzly/p/11663822.html config set dirconfig set dbfile xxxx 一. ...

  5. [转帖]redis知识点总结

    redis面试常问知识点总结 https://www.toutiao.com/i6740199554127233543/ 原创 波波说运维 2019-10-02 00:01:00 概述 今天主要分享一 ...

  6. [转帖]redis监控工具汇总

    redis监控工具汇总 https://www.cnblogs.com/felixzh/p/11170143.html redis-stat redis-stat是一个比较有名的redis指标可视化的 ...

  7. 开始跟踪Redis啦,开帖

    随着NoSql的流行,对这方面的产品开始关注起来,之前一直只是看看.从昨天开始决定把Redis的实现机制啃下来,毕竟代码量也就2W行. 每天花时间看看,记录下成果. here we go.

  8. 【转帖】 redis 命令 From https://www.cnblogs.com/zhouweidong/p/7550717.html

    redis命令详解   redis中添加key value元素:set key value;       获取元素:get key ;   redis中添加集合:lpush key value1 va ...

  9. Python celery和Redis入门安装使用(排难帖)

    1.redis安装 下载地址 https://github.com/MicrosoftArchive/redis/releases,选择Redis-x64-3.2.100.msi5.8 MB下载就好了 ...

  10. [转帖]美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题

    美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题 博客分类: redis 运维 redis clustercluster-node-timeoutfailover  转载请 ...

随机推荐

  1. GaussDB(DWS)条件表达式函数返回错误结果集排查

    摘要:条件表达式函数中出现结果集不一致问题,我们首先要考虑是否入参数据类型不一致导致出参不一致. 本文分享自华为云社区<GaussDB(DWS)条件表达式函数返回错误结果集排查>,作者:y ...

  2. 云图说丨应用宕机怎么办?MAS帮您实现业务无缝切换

    摘要: 多云高可用服务(Multi-cloud high Availability Service,简称MAS)源自华为消费者多云应用高可用方案,提供从流量入口.数据到应用层的端到端的业务故障切换及容 ...

  3. 使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)

    使用 Kubeadm 部署 Kubernetes(K8S) 安装 使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix Volume 是 Pod 中能够被 ...

  4. Python上下文管理器的高级使用

    在文件处理和网络编程时,对于打开的文件不管最后内容处理是否符合预期都要在结束时关闭文件.这时常见的处理方法是try catch finally 的方法 f = open("demo.txt& ...

  5. COGI控制删除按钮增强

    1.业务需求 COGI在SAP中主要用于解决生产订单异常的问题.通常发生在生产订单执行过程中,当出现了特定的异常情况时,需要进行处理.这些异常情况可能包括物料缺失.数量不匹配.质量问题等等. 当这些异 ...

  6. AtCoder Beginner Contest 163 (6/6)

    比赛链接:Here AB水题, C - management 题意:给一棵 \(N(2\le N\le2e5)\)​ 个节点的有根树,求每个节点的儿子数. 思路:由于输入直接给的是每个节点的父节点,直 ...

  7. 关于 uintptr_t和intptr_t 类型

    简介 最近在看代码时,发现了两个之前没见过的数据类型:intptr_t,uintptr_t.这两个数据类型是ISO C99定义的,具体代码在linux平台的/usr/include/stdint.h头 ...

  8. Vue第四篇 Vue路由系统

    01-路由注册 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. Ribbon 负载均衡源码解读

    转载请注明出处: 1.什么是Ribbon 是 Netflix 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为.在 SpringCloud 中, nacos一般配合Ribbon进行使用 ...

  10. @Conditional注解使用及@ConditionalOnXXX各注解的作用

    本文为博主原创,转载请注明 出处: 一.@Conditional注解作用: 必须是 @Conditional 注解指定的条件成立,才会在容器中添加组件,配置类里面的所有配置才会生效 二.@Condit ...