本文目录导读:

- 基础配置加固(最紧急、最重要)
- 网络与访问控制(隔离是关键)
- 运行权限与沙箱(防御RCE漏洞)
- 持久化与文件安全(避免写入攻击)
- 监控与攻击检测(事后应急)
- 漏洞生命周期管理
- 特殊情况防护:SSRF(服务端请求伪造)
- 最佳实践清单
Redis漏洞的防护是一项系统性工程,需要从配置加固、网络隔离、权限控制、持久化安全以及监控升级等多个维度入手,由于Redis通常部署在内网环境,且设计上追求高性能,默认配置的安全性较弱,以下是针对常见漏洞(如未授权访问、弱口令、SSRF导致的RCE、Lua沙箱逃逸等)的防护方案:
基础配置加固(最紧急、最重要)
这是防止未授权访问的直接屏障,需要立即执行:
- 禁止使用默认端口:将监听端口从默认的
6379改为其他不常用端口(如16379)。 - 设置强密码:
- 在
redis.conf中配置requirepass,密码必须复杂(建议16位以上,包含大小写字母、数字、特殊字符)。 - 使用
ACL(Redis 6.0+ 支持)对用户进行精细化权限控制,限制不同用户的命令执行范围,避免所有连接都使用default超级用户。
- 在
- 绑定监听地址:在
redis.conf中配置bind 127.0.0.1或内网私有IP。绝对禁止bind 0.0.0.0监听所有网络接口,特别是切勿直接暴露在公网。 - 禁用高危命令:通过
rename-command禁用或重命名高危命令,防止攻击者利用这些命令破坏数据或获取权限。- 建议重命名的命令:
FLUSHALL、FLUSHDB、CONFIG、KEYS、EVAL、EVALSHA、SCRIPT、SHUTDOWN、DEBUG、SLAVEOF、REPLICAOF、SUBSCRIBE、PSUBSCRIBE等。 - 示例:
rename-command FLUSHALL ""(设置为空字符串即禁用)。 - 注意:若业务确实需要某些命令,可重命名为一个隐蔽的字符串(如
rename-command CONFIG "C0NFIG_F0R_BACKUP")。
- 建议重命名的命令:
网络与访问控制(隔离是关键)
Redis漏洞通常被利用作横向移动或SSRF攻击的跳板。
- 防火墙策略:
- 使用iptables、ufw或云安全组,只允许受信任的客户端IP(如应用服务器)访问Redis端口。
- 生产环境建议使用反向代理(如 Nginx、HAProxy)暴露Redis服务,而不是直接暴露。
- 网络隔离:
- 将Redis部署在独立的VPC/子网或DMZ区域中,与公网隔离。
- 利用网络策略或微隔离技术,限制容器/虚拟机间的通信。
- 开启TLS/SSL加密:如果支持(Redis 6.0+默认推荐),启用
tls-port和tls-cert-file等配置,防止数据在传输中被窃听或篡改。
运行权限与沙箱(防御RCE漏洞)
防止攻击者利用EVAL、SCRIPT LOAD等命令执行Lua沙箱逃逸或写入恶意文件。
- 低权限运行:
- 不要以root用户运行Redis,创建一个专用系统用户(如
redis),并限制其Shell(/sbin/nologin)。 - 设置Redis数据目录(
dir)和日志文件的权限,确保只有Redis用户可读写。
- 不要以root用户运行Redis,创建一个专用系统用户(如
- 限制Lua沙箱:
- 确保
lua-time-limit和lua-log-arguments等配置合理。 - 在Redis 7.0+中,通过
ACL严格限制EVAL、EVALSHA等Lua脚本相关命令的权限。
- 确保
- 禁用危险模块:检查并确保未加载不需要的模块(
MODULE LOAD),攻击者可能利用模块加载实现RCE。
持久化与文件安全(避免写入攻击)
防止攻击者通过配置写入或修改RDB/AOF文件。
- 限制数据目录:在
redis.conf中明确设置dir和dbfilename,确保无法通过CONFIG SET dir /root/.ssh/等方式写入SSH公钥。 - 保护备份目录:对RDB和AOF文件所在目录设置严格的权限(如
700或750),防止非Redis用户读取。 - 定期备份并验证:备份不仅用于恢复,也可用于检测数据是否被篡改。
监控与攻击检测(事后应急)
- 日志记录:
- 设置
loglevel notice或warning。 - 记录所有失败连接和安全事件,将日志输出到集中式日志系统(如ELK、Splunk)。
- 设置
- 入侵检测:
- 配置安全设备(如IDS/IPS)或云厂商的WAF(Web应用防火墙),检测对Redis端口的扫描或异常命令。
- 监控日志中出现的大量
AUTH失败、CONFIG SET、FLUSHALL等异常操作。
- 使用Redis Sentinel/Cluster:在生产环境使用高可用架构,主从切换后立即更新应用配置,防止凭据泄露。
漏洞生命周期管理
- 及时升级:
- 密切关注Redis官方发布的安全公告(https://redis.io/docs/latest/operate/oss_and_stack/management/security/)。
- 打补丁或升级到最新稳定版(如Redis 7.2.x),旧版本(如2.x、3.x)通常存在已知漏洞。
- 使用企业版/商业解决方案:如果团队安全能力有限,可考虑使用Redis Enterprise、Amazon ElastiCache等托管服务,云厂商通常负责底层安全加固。
特殊情况防护:SSRF(服务端请求伪造)
这是利用Redis漏洞的攻击常触发的场景(攻击者利用Web应用发起对内网Redis的请求)。
- 限制Web应用访问目标:在Web应用层面,强制其只能访问白名单内的IP/端口。
- Redis侧响应:即使Web应用被攻破并请求到Redis,上述的密码、ACL、禁用高危命令等措施也能阻止攻击者成功执行命令。
最佳实践清单
- 立即:设置
requirepass、bind 127.0.0.1、禁用FLUSHALL、CONFIG等高危命令。 - 网络:使用防火墙限定源IP,部署在私有网络。
- 身份:使用ACL代替单一密码,最小权限原则。
- 运行:以非root用户运行,限制数据目录。
- 升级:保持Redis版本在安全更新周期内。
- 监控:开启日志,设置异常告警。
特别提醒:如果使用了云厂商提供的Redis实例(如阿里云Redis、腾讯云Redis、AWS ElastiCache),大部分底层安全配置(如直接访问公网、防火墙、TLS)由云厂商管理,但密码、ACL、禁用高危命令仍需要你自行配置。