Redis安全规范----check list

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

Redis安全规范—-check list.


1.信任的内网运行,尽量避免有公网访问

1
2
/etc/redis/redis .conf中配置如下:
bind 127.0.0.1


2.绑定redis监听的网络接口

如果服务器有多个IP,可限定redis server监听的IP,通过redis配置项bind,可同时绑定多个IP


3.设置防火墙

如果需要其他机器访问,或者设置了slave模式,那就记得加上相应的防火墙设置,命令如下:

1
iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT


4.禁止root用户启动redis

设置一个单独的redis账户很有必要,redis crackit就利用到了root用户的特性来重置authorized_keys。首先创建一个redis账户,然后通过该账户启动。

1
setsid  sudo  -u redis  /usr/bin/redis-server  /etc/redis/redis .conf

启动之后应该如下:

1
2
root@kali:~ # ps -elf|grep redis
1 S redis    14720     1  0  80   0 -  8979 -      08:40 ?        00:00:00  /usr/bin/redis-server  /etc/redis/redis .conf` `


5.限制redis文件目录访问权限

设置redis的主目录权限为700,如果redis配置文件独立于redis主目录,权限修过为600,因为redis密码明文存储在配置文件中.


6.避免使用熟知的端口,降低被初级扫描的风险

1
/etc/redis/redis .conf中配置如下
1
找到port 6379这行,把6379改为8888

7.开启redis密码认证,并设置高复杂度密码

redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。

redis因查询效率高,auth这种命令每秒能处理10w次以上,简单的redis的密码极容易为攻击者暴破。

1
2
3
4
5
root@kali:~ # redis-cli -h 192.168.10.2
redis 192.168.10.2:6379> keys *
(error) ERR operation not permitted
redis 192.168.10.2:6379> auth @nsF0cus!@ #
OK
1
2
root@kali:~ # echo -e "xxlegend"|sha256sum
b59869cac63a67e7ee97e6923a75811ff58bd4936ed3be3480b46145d43ae335`

8.禁用或者重命名危险命令

这个漏洞就利用config/save两个命令完成攻击 。 因redis无用户权限限制,建议危险的命令,使用rename配置项进行禁用或重命名,这样外部不了解重命名规则攻击者,就不能执行这类命令。涉及到的命令:

1
FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL`

以下示例:redis.config文件禁用FLUSHDB、FLUSHALL两个命令;重命名CONFIG、SHUTDOWN命令,添加一个特殊的后缀。 这样redis启动后,只能运行CONFIG_b9fc8327c4dee7命令,不能执行CONFIG命令。

1
2
3
4
rename- command  CONFIG CONFIG_b9fc8327c4dee7
rename- command  SHUTDOWN SHUTDOWN_b9fc8327c4dee7
rename- command  FLUSHDB “”
rename- command  FLUSHALL “”

上述配置将config,flushdb,flushall设置为了空,即禁用该命令,我们也可以命名为一些攻击者难以猜测,我们自己却容易记住的的名字。保存之后,执行/etc/init.d/redis-server restart 重启生效。


9.禁止redis中存储敏感的明文数据

Redis设计旨在提供高性能的KV服务,至少目前在权限访问控制和数据持久化方面比较弱化。所以禁止在Redis中存储或缓存敏感的明文数据


10.安全监控

建立蜜罐网络,有攻击尝试时,可及时发现

监控redis安全状态,cmdstat_auth cmdstat_flushdb/flushall监控报警


题外话:

redis cluster不支持密码问题

redis 原生cluster模式最新3.2版本都不支持开启密码认证,导致内网使用只能无密码,只能通过前面其他安全设置来保证内网redis cluster的安全性

针对之前redis版本,默认无bind和密码设置存在很大安全风险,redis 3.2版本提出新特性protected mode,如果redis在启动时,未开启bind和密码设置,只能通过本地回环地址本地访问,如果尝试远程访问redis,会提示一下信息:

DENIED Redis is running protected mode because protected mode is enabled,

no bind address was specified, no authentication password is requested to clients.

In this mode connections are only accepted from the loopback interface.

当然也可直接执行CONFIG SET protected mode no关闭保护模式




     本文转自Tar0 51CTO博客,原文链接:http://blog.51cto.com/tar0cissp/1939797 ,如需转载请自行联系原作者



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
11天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
15天前
|
NoSQL 安全 Redis
Redis 安全
10月更文挑战第20天
21 4
|
19天前
|
NoSQL 关系型数据库 MySQL
Redis 列表(List)
10月更文挑战第16天
15 2
|
21天前
|
消息中间件 存储 监控
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
36 2
|
2月前
|
消息中间件 存储 NoSQL
剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。
90 20
剖析 Redis List 消息队列的三种消费线程模型
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
24 3
|
2月前
|
消息中间件 存储 NoSQL
4)深度解密 Redis 的列表(List)
4)深度解密 Redis 的列表(List)
30 1
|
2月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
存储 NoSQL Redis
redis list底层数据结构
redis list数据结构  redis list数据结构底层采用压缩列表ziplist或linkedlist两种数据结构进行存储,首先以ziplist进行存储,在不满足ziplist的存储要求后转换为linkedlist列表。
3057 0
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
67 6