关于 redis-security
redis-security 是面向 Redis 运维与应用开发者的生产环境安全加固技能,涵盖身份验证、ACL 权限控制和网络暴露限制,帮助从多个层面降低风险。
主要功能
- 01配置密码认证与 TLS
- 02按最小权限设置 ACL 用户
- 03限制 Redis 网络访问
- 04禁用或重命名危险命令
适用场景
- 01加固准备上线的 Redis 实例
- 02为不同应用设置独立凭据
- 03审查 Redis 部署的安全配置
- 04处理扫描器报告的公网暴露
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ redis/ agent-skills --skill redis-security安装后在 Claude Code 中输入/redis-security确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/acls.mdauth.mdnetwork.md详细介绍
Redis 安全
Redis 生产环境加固:身份验证、基于 ACL 的访问控制和网络暴露。三者应一并涵盖——单独采用其中任何一项都会留下可被利用的漏洞。
何时应用
- 部署或审查准备投入生产的 Redis 实例。
- 设置共享密码之外的应用凭据。
- 根据安全检查清单审计 Redis 部署。
- 收到扫描器报告的“Redis 暴露在互联网上”问题。
1. 始终进行身份验证(并使用 TLS)
生产环境中绝不要运行没有密码的 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
r = redis.Redis(
host="localhost",
port=6380,
password="your-strong-password",
ssl=True,
ssl_cert_reqs="required",
)
如果可以使用 ACL 用户(下一节)代替单个 requirepass,就应使用 ACL 用户——requirepass 实际上是旧式“默认用户”快捷方式。
2. 使用 ACL 实现最小权限访问
使用共享密码的 default 用户适用于开发环境。对于生产环境,应为每个应用分配专用 ACL 用户,并且只授予其实际需要的命令和键模式权限。
# Cache-only reader
ACL SETUSER app_readonly on >password ~cache:* +get +mget +scan
# Writer that can't run dangerous ops
ACL SETUSER app_writer on >password ~* +@all -@dangerous
# Admin (use sparingly, never for application traffic)
ACL SETUSER admin on >strong-password ~* +@all
常用命令类别:
| 类别 | 涵盖范围 |
|---|---|
@read | 读取命令(GET、MGET、HGET 等) |
@write | 写入命令(SET、DEL、XADD 等) |
@dangerous | FLUSHALL、DEBUG、KEYS 等 |
@admin | 管理命令 |
如果应用凭据泄露,严格的 ACL 可以限制影响范围——攻击者不会仅仅因为窃取了缓存读取者的密码,就能对你的数据库执行 FLUSHALL。
3. 限制网络访问
最常见的 Redis 安全漏洞,是没有身份验证、且可从公共互联网访问的 Redis。通过以下三个层面避免这种情况:
# redis.conf — bind to specific interfaces, keep protected-mode on
bind 127.0.0.1 192.168.1.100
protected-mode yes
# Firewall — allow only application subnets
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 ""
参考资料
评论
支持 Markdown