mcpField
R
redis-security

redis-security

github.com/redis安全1712.5k 次安装7 周前更新
代码仓库

关于 redis-security

redis-security 是面向 Redis 运维与应用开发者的生产环境安全加固技能,涵盖身份验证、ACL 权限控制和网络暴露限制,帮助从多个层面降低风险。

主要功能

  1. 01配置密码认证与 TLS
  2. 02按最小权限设置 ACL 用户
  3. 03限制 Redis 网络访问
  4. 04禁用或重命名危险命令

适用场景

  1. 01加固准备上线的 Redis 实例
  2. 02为不同应用设置独立凭据
  3. 03审查 Redis 部署的安全配置
  4. 04处理扫描器报告的公网暴露

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/redis/agent-skills --skill redis-security

安装后在 Claude Code 中输入/redis-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acls.md
auth.md
network.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 实际上是旧式“默认用户”快捷方式。

参见 references/auth.md。

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 等)
@dangerousFLUSHALL、DEBUG、KEYS 等
@admin管理命令

如果应用凭据泄露,严格的 ACL 可以限制影响范围——攻击者不会仅仅因为窃取了缓存读取者的密码,就能对你的数据库执行 FLUSHALL。

参见 references/acls.md。

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 ""

参见 references/network.md。

参考资料

评论

支持 Markdown