Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。近期,Redis被爆出存在通过主从复制从而Getshell的漏洞。
在Redis4.x以及以上版本中,因为新增了模块功能,攻击者可以通过构造恶意代码,使被攻击的服务器加载恶意.so文件,如果redis-server以root权限启动,使得恶意代码能够被执行,攻击者就可以在服务器上创建他想创建的任意文件,危害非常的大。
Redis作者的理念是“简洁为美”,所以并没有为Redis设计复杂的安全配置,那么要如何保证Redis的安全呢?
配置防火墙保护redis
通过配置防火墙防止外部用户访问它的redis端口。
不使用redis的默认端口
防止外部用户访问Redis,指定信任的Redis的IP,防止外部访问,仅有可信的用户IP才能访问Redis端口。如果不禁止的话,当受到来自外部攻击时很有可能所有的数据都将被删除。
设置访问redis时需要密码授权
Redis对于经典网络的实例强制开启密码鉴权,用户可以通过设置复杂的密码避免密码被攻破。需要注意的是,密码的强度要设置足够高,例如32位以上。redis的性能非常好,暴力破解密码的话,每秒钟可以达到15万次。
使用禁用命令
在 Redis 中可以禁用命令或者将它们重命名成难以推测的名称,这样只有内部用户能够这些重命名的名称,而一般的用户只能够使用一部分命令。
对一些危险命令进行重命名,能够防止恶意操作,相当于把命令名称变为密码,只有内部人员知道。
Redis 在优化高性能以及易用性上下功夫,对于安全方面并没有极力去优化。因此redis需要运行在安全的环境下,就要要做好redis外部的安全工作。