🔒 Redis 安全

构建安全可靠的 Redis 环境

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

安全事件处理步骤:

  1. 隔离:立即隔离受影响的系统
  2. 评估:评估安全事件的影响范围
  3. 遏制:阻止进一步的安全威胁
  4. 清除:清除恶意代码或数据
  5. 恢复:恢复正常业务运行
  6. 总结:分析事件原因并改进安全措施

💡 安全最佳实践

Redis 安全部署的最佳实践:

部署安全:

  • 使用专用的 Redis 用户运行服务
  • 设置适当的文件权限
  • 定期更新 Redis 版本
  • 使用配置管理工具
  • 实施网络分段
  • 定期安全扫描
重要提醒: 安全是一个持续的过程,需要定期评估和更新安全策略。