本文目录导读:

针对Redis漏洞的防护,核心原则是最小化暴露面、强化认证授权和及时更新版本。
以下是分层次的防护策略,从紧急修复到长期加固都有覆盖:
紧急止血(最关键的几项)
这些措施可以立即阻止大多数已知的Redis攻击(如未授权访问、挖矿病毒)。
-
设置强密码(必做)
- 在Redis配置文件(
redis.conf或redis.windows.conf)中,找到requirepass项,取消注释并设置一个非常复杂、随机的密码(如32位以上)。 - 示例:
requirepass q?Kp3!vZ9mN8xR2wY5tB7jH4$F1cL6 - 密码不要与服务器登录密码、其他数据库密码相同。
- 在Redis配置文件(
-
绑定监听地址(必做)
- 修改
bind配置,只允许内网或本机访问。绝对不要绑定0.0.0。 - 示例(仅本机访问):
bind 127.0.0.1 - 示例(内网专用):
bind 192.168.1.100(你的内网IP) - 修改后重启Redis服务生效。
- 修改
-
禁用危险命令(关键)
- 高危命令(如
FLUSHALL、CONFIG、EVAL等)常被攻击者用于破坏或控制服务。 - 在
redis.conf中通过rename-command重命名或禁用它们。 - 示例(禁用或改成复杂名):
rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "MY_RANDOM_CONFIG_CMD_123" rename-command EVAL "" rename-command KEYS "" - 注意:生产环境建议禁用
FLUSHALL、CONFIG、SCRIPT KILL,但需要根据业务需求调整。
- 高危命令(如
-
禁用保护模式(如果已启用,需确认安全性)
- Redis默认开启
protected-mode yes,如果绑定了公网IP,这个模式会阻止意外连接。 - 最佳实践:
protected-mode yes+bind 127.0.0.1是安全的组合。 - 如果必须公网访问(强烈不建议),必须开启
protected-mode yes并设置requirepass。
- Redis默认开启
网络与系统层面加固
-
使用防火墙/安全组拦截端口
- 默认端口是6379。
- 在云服务器安全组或服务器系统防火墙中,只允许需要访问Redis的IP地址(如应用服务器IP)通过该端口。
- 不要将6379端口开放给
0.0.0/0。
-
使用非默认端口
- 修改
port配置(如改为16379、26379等),避免被自动化扫描工具直接命中默认端口。
- 修改
-
部署在最小权限用户下
- 使用单独的非root用户运行Redis进程。
- 示例:
useradd -r -s /sbin/nologin redis_user chown -R redis_user:redis_user /etc/redis /var/log/redis /data/redis su -s /bin/bash redis_user -c "redis-server /etc/redis/redis.conf"
-
操作系统内核参数优化
- 设置合理的
vm.overcommit_memory(避免OOM)和net.core.somaxconn(连接队列),但不要设置net.ipv4.tcp_syncookies为0(防SYN洪水)。
- 设置合理的
访问控制与高级防护
-
启用AUTH命令与ACL(Redis 6.0+)
- 使用ACL(访问控制列表):Redis 6.0及以上版本支持,可以为不同用户设置不同的权限(读、写、命令、键空间)。
- 示例:
# 创建只读用户 ACL SETUSER app_readonly on >password_xyz ~* +@read # 创建管理员用户(可执行所有命令) ACL SETUSER admin on >admin_pass_123 ~* +@all
-
开启TLS/SSL加密(推荐)
- 如果Redis通过公网传输敏感数据,必须启用TLS加密,防止中间人攻击。
- Redis 6.0+原生支持TLS,配置
tls-port 6380、tls-cert-file、tls-key-file等。
-
定期审计与监控
- 日志监控:开启Redis慢查询日志(
SLOWLOG)和普通日志(loglevel notice),监控异常操作(如大量KEYS *、CONFIG SET)。 - 安全扫描:使用工具(如
redis-cli、nmap、商业漏洞扫描器)定期检查Redis是否存在未授权访问。 - 入侵检测:监控是否被植入挖矿病毒(如
crontab -l查看定时任务,检查/tmp、/var/spool下的异常文件)。
- 日志监控:开启Redis慢查询日志(
版本与补丁管理
-
及时升级Redis版本
- 关注Redis官方GitHub仓库、CVE数据库(如CVE-2023-22458、CVE-2024-31449等),定期更新到最新稳定版(如7.x系列),修复已知漏洞。
- 注意:避免使用过旧版本(如1.x、2.x、3.x),它们缺乏现代安全特性(如ACL、TLS)。
-
使用Docker/容器时的注意事项
- 不要暴露容器端口到公网。
- 使用非root用户运行容器(
--user参数)。 - 定期重建容器镜像以包含安全更新。
使用替代方案(极端情况)
如果业务对Redis依赖极深且无法进行上述加固(如遗留系统、无法修改配置),考虑:
- 使用Redis Sentinel/Cluster:在集群模式下,内部通信默认使用
requirepass,但外部访问仍需加固。 - 禁用持久化(临时方案):攻击者通过
SAVE命令写入文件的风险会降低,但非根本解决。 - 迁移到云服务:使用云厂商的Redis托管服务(如阿里云Redis、AWS ElastiCache),它们默认处于VPC内、带有防火墙、自动更新和备份,大幅降低手动配置风险。
最核心的三步
- 防火墙:只允许可信IP访问6379端口。
- 密码:设置强
requirepass。 - 绑定:
bind 127.0.0.1或内网IP。
完成这三步,你就挡住了90%以上的Redis自动化攻击,如果需要更高安全性,再逐步加上ACL、TLS、禁用危险命令和版本更新。