Redis常规安全加固
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天
1、背景说明
Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用。常见的就是进行挂马,挖矿,进而导致服务器沦陷,造成不可挽回的损失。
相关案例:
2、加固方案
2.1、使用非root用户启动
在特定条件下,如果Redis以root身份运行,黑客可以给root账号写入SSH公钥文件,直接通过 SSH 登录受害服务器
,从而获取服务器权限和数据。一旦入侵成功,攻击者可直接添加账号用于 SSH 远程登录控制服务器,给用户的Redis运行环境以及Linux主机带来安全风险,如删除、泄露或加密重要数据,引发勒索事件等。所以redis最好不要使用root用户进行启动,例如可以创建一个低权限用户账号。通过该账号进行安装和启动redis服务。
安装过程,请参考Centos 7下安装Redis最新稳定版。
2.2、禁止远程访问
我们可以通过修改redis.conf文件中的bind属性来限制访问redis服务的ip。如下:
- 仅限本机访问
修改redis.conf配置文件中的bind属性,默认就是,无需修改。
bind 127.0.0.1 -::1
- 指定IP可以访问
如果需要远程访问,可通过增加防火墙(iptables)放行对应ip访问redis服务端口,例如增加允许 192.168.3.1IP访问。如果是云厂商的服务器可以通过修改入站规则进行端口放行配置。
iptables -A INPUT -s 192.168.3.1 -p tcp --dport 6379 -j ACCEPT
2.3、增加访问认证密码
找到redis.conf文件中的 requirepass 属性,默认是注释掉的,放开并设置自己的密码即可, 密码最好搞的复杂度高点(字母、数字、特殊字符)。
示例:
requirepass xuexiaojianAa@20221025#@!...
2.4、修改默认端口
一般不建议使用默认端口,因为有些非法人员很容易进行常见端口扫描,发现你的端口开着,就知道你的服务器上部署了redis,进而进行下一步攻击操作。修改redis.conf配置文件中的port属性为非默认端口即可,注意端口冲突。加大或者减少都可以。
示例:
port 6370
2.5、限制配置文件访问权限
修改redis配置文件的访问权限,因为密码,端口都是明文存储在该文件中的,所以要禁止不相关的用户访问修改配置文件,切换到jianzhang用户进行授权。
- 切换用户
su jianzhang
- 修改配置文件权限
chmod 600 redis.conf
2.6、禁用或者重命名危险命令
Redis无权限分离,其管理员账号和普通账号无明显区分。攻击者登录后可执行任意操作,因此需要隐藏以下重要命令: FLUSHDB, FLUSHALL, KEYS,PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME,DEBUG, EVAL
另外,在Redis 2.8.1及Redis 3.x(低于 3.0.2)版本下存在EVAL 沙箱逃逸漏洞,攻击者可通过该漏洞执行任意Lua代码。
xiug修改配置将设置为空,即禁用该命令;也可设置为一些复杂的、难以猜测的名字。
- 禁用命令示例
在redis.conf文件中增加如下配置即可,如下仅是示例,根据实际情况进行设置
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
rename-command SHUTDOWN ""
rename-command EVAL ""
- 重命名关键命令示例
在redis.conf文件中增加如下配置即可
rename-command FLUSHALL 123XXXFLUSHALL
rename-command KEYS MyOwenKeys
2.7、开启保护模式
redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。
protected-mode yes
2.8、漏洞打补丁或升级版本
定期关注最新软件版本,并及时升级Redis到最新版,防止新漏洞被恶意利用。
3、注意事项
- 以上修改配置文件都需要重启redis服务。
- 以上都是单机版操作步骤,集群模式请自行调整。