Redis 安全概述
Redis 安全是生产环境部署的重要考虑因素。默认情况下,Redis 的安全配置相对宽松,需要管理员根据实际需求进行安全加固,包括认证、网络访问控制、命令限制等多个方面。
⚠️ 安全警告
Redis 默认配置存在安全风险,在生产环境中必须进行安全加固!未经保护的 Redis 实例可能被恶意利用。
🔐 认证配置
设置密码认证是 Redis 安全的第一步:
# 设置密码(运行时)
CONFIG SET requirepass your_strong_password
# 使用密码连接
redis-cli -a your_strong_password
# 连接后认证
redis-cli
127.0.0.1:6379> AUTH your_strong_password
OK
# 在配置文件中设置(推荐)
# redis.conf
requirepass your_strong_password
# 查看当前密码设置
CONFIG GET requirepass
密码安全建议:
- 使用强密码(至少16位,包含大小写字母、数字、特殊字符)
- 定期更换密码
- 避免在命令行中明文显示密码
- 使用环境变量或配置文件管理密码
🌐 网络安全
限制网络访问是保护 Redis 的重要措施:
# 绑定特定IP地址
bind 127.0.0.1 192.168.1.100
# 启用保护模式
protected-mode yes
# 修改默认端口
port 6380
# 禁用某些网络命令
rename-command SHUTDOWN ""
rename-command CONFIG "CONFIG_abc123"
rename-command EVAL ""
# 设置客户端连接超时
timeout 300
# 限制最大客户端连接数
maxclients 1000
配置项 | 说明 | 安全级别 |
---|---|---|
bind 127.0.0.1 | 只允许本地连接 | 高 |
protected-mode yes | 启用保护模式 | 高 |
port 非默认端口 | 修改默认端口 | 中 |
timeout 300 | 连接超时设置 | 中 |
🚫 命令重命名与禁用
重命名或禁用危险命令防止误操作:
# 在 redis.conf 中配置
# 禁用危险命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""
rename-command CONFIG ""
rename-command SHUTDOWN ""
rename-command DEBUG ""
rename-command EVAL ""
rename-command SCRIPT ""
# 重命名命令(增加安全性)
rename-command CONFIG "CONFIG_abc123def456"
rename-command SHUTDOWN "SHUTDOWN_xyz789"
rename-command FLUSHALL "FLUSHALL_secret123"
# 使用重命名后的命令
CONFIG_abc123def456 GET *
SHUTDOWN_xyz789
注意: 重命名命令后,需要更新应用程序代码和运维脚本中的命令调用。
👤 用户访问控制 (ACL)
Redis 6.0 引入了 ACL(Access Control List)功能:
# 查看当前用户
ACL LIST
# 创建新用户
ACL SETUSER alice on >password123 ~cached:* +get +set
# 用户权限说明:
# on/off: 启用/禁用用户
# >password: 设置密码
# ~pattern: 允许访问的key模式
# +command: 允许的命令
# -command: 禁止的命令
# @category: 命令分类
# 创建只读用户
ACL SETUSER readonly on >readonly123 ~* +@read -@write
# 创建管理员用户
ACL SETUSER admin on >admin123 ~* +@all
# 删除用户
ACL DELUSER alice
# 查看用户详情
ACL GETUSER alice
# 保存ACL配置
ACL SAVE
ACL 命令分类:
- @read:只读命令
- @write:写入命令
- @admin:管理命令
- @dangerous:危险命令
- @all:所有命令
🔍 安全监控
监控 Redis 的安全状态和异常行为:
# 查看客户端连接
CLIENT LIST
# 监控命令执行
MONITOR
# 查看慢查询日志
SLOWLOG GET 10
# 查看服务器信息
INFO server
INFO clients
INFO stats
# 检查配置安全性
CONFIG GET bind
CONFIG GET protected-mode
CONFIG GET requirepass
# 查看ACL日志(Redis 6.0+)
ACL LOG
ACL LOG RESET
🛡️ TLS/SSL 加密
启用 TLS 加密保护数据传输:
# 在 redis.conf 中配置 TLS
port 0
tls-port 6380
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
tls-ca-cert-file /path/to/ca.crt
# 客户端 TLS 配置
tls-protocols "TLSv1.2 TLSv1.3"
tls-ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
tls-ciphersuites "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256"
# 使用 TLS 连接
redis-cli --tls --cert /path/to/client.crt --key /path/to/client.key --cacert /path/to/ca.crt
注意: TLS 配置需要有效的证书文件,建议在生产环境中使用受信任的 CA 签发的证书。
📋 安全检查清单
Redis 安全配置检查清单:
基础安全配置:
- ✅ 设置强密码认证
- ✅ 启用保护模式
- ✅ 绑定特定IP地址
- ✅ 修改默认端口
- ✅ 禁用或重命名危险命令
- ✅ 设置连接超时
- ✅ 限制最大连接数
- ✅ 配置防火墙规则
高级安全配置:
- 配置 ACL 用户权限
- 启用 TLS 加密传输
- 设置日志监控
- 定期安全审计
- 备份加密存储
- 网络隔离部署
🚨 安全事件响应
发现安全问题时的应急响应:
# 紧急情况处理
# 1. 立即断开可疑连接
CLIENT KILL TYPE normal
CLIENT KILL ADDR 192.168.1.100:12345
# 2. 修改密码
CONFIG SET requirepass new_emergency_password
# 3. 查看访问日志
ACL LOG
SLOWLOG GET 100
# 4. 检查数据完整性
INFO keyspace
KEYS *
# 5. 备份当前数据
BGSAVE
# 6. 重启服务(如必要)
SHUTDOWN SAVE
安全事件处理步骤:
- 隔离:立即隔离受影响的系统
- 评估:评估安全事件的影响范围
- 遏制:阻止进一步的安全威胁
- 清除:清除恶意代码或数据
- 恢复:恢复正常业务运行
- 总结:分析事件原因并改进安全措施
💡 安全最佳实践
Redis 安全部署的最佳实践:
部署安全:
- 使用专用的 Redis 用户运行服务
- 设置适当的文件权限
- 定期更新 Redis 版本
- 使用配置管理工具
- 实施网络分段
- 定期安全扫描
重要提醒: 安全是一个持续的过程,需要定期评估和更新安全策略。