数据库
生产 Redis 安全加固:用认证、ACL…
部署或审计生产 Redis、配置应用凭据/TLS、处理公网暴露扫描告警时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
生产 Redis 安全加固:用认证、AC特定
解决思路
- 同时覆盖认证、ACL 最小权限和网络暴露三方面;不要只做其中一项,否则会留下可被利用的缺口。
- 生产 Redis 绝不能不设密码;为所有连接配置认证,并将认证与 TLS 配对,避免凭据和数据明文传输。
- 在 redis.conf 中设置 `requirepass your-strong-password`、`tls-port 6380`、`tls-cert-file /path/to/redis.crt`、`tls-key-file /path/to/redis.key`。
- 在 Python 客户端使用 `redis.Redis(host="localhost", port=6380, password="your-strong-password", ssl=True, ssl_cert_reqs="required")` 连接。
- 如果可以使用 ACL 用户,就不要只用单一 `requirepass`;`requirepass` 实质上只是旧的 default 用户快捷方式。
- 开发环境可以使用带共享密码的 `default` 用户;生产环境应为每个应用创建专用 ACL 用户,并只授予其实际需要的命令和 key 模式。
- 为只读缓存创建用户,例如:`ACL SETUSER app_readonly on >password ~cache:* +get +mget +scan`。
- 为写入应用创建不能执行危险操作的用户,例如:`ACL SETUSER app_writer on >password ~* +@all -@dangerous`。
- 创建管理员用户并尽量少用,绝不让应用流量使用它,例如:`ACL SETUSER admin on >strong-password ~* +@all`。
- 按需使用命令类别控制权限:`@read` 覆盖读命令(`GET`、`MGET`、`HGET` 等),`@write` 覆盖写命令(`SET`、`DEL`、`XADD` 等),`@dangerous` 覆盖 `FLUSHALL`、`DEBUG`、`KEYS` 等,`@admin` 覆盖管理命令。
- 用紧凑 ACL 限制应用凭据泄露后的影响范围,例如让缓存读取者凭据无法执行 `FLUSHALL`。
- 限制网络访问,使用三层防护:绑定具体接口并保持 protected-mode 开启、配置防火墙、必要时重命名/禁用危险命令。
- 在 redis.conf 中设置 `bind 127.0.0.1 192.168.1.100` 和 `protected-mode yes`。
- 用防火墙只允许应用子网访问 Redis 端口,例如:`iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.0/24 -j ACCEPT` 和 `iptables -A INPUT -p tcp --dport 6379 -j DROP`。
- 避免反模式:不要使用 `bind 0.0.0.0` + `protected-mode no`,否则会把 Redis 无保护地暴露给整个网络。
- 可选但推荐:重命名或禁用破坏性命令,例如 `rename-command FLUSHALL ""`、`rename-command DEBUG ""`、`rename-command CONFIG ""`,以免被攻陷的客户端破坏数据库。
适用边界 · 注意事项
- 开发环境可接受 default 用户共享密码,但生产环境不适用这种简化做法。
- 如果实例不承载生产数据且仅本地临时测试,完整生产加固流程不是必须的。
- 若无法使用 Redis ACL(版本过旧或托管服务不开放 ACL),则 ACL 最小权限做法不适用,应改用其他访问控制。