安全基线是什么
Redis 未授权访问是长期高危问题:早期版本默认没有密码,并且监听全部网卡,攻击者可以直接读数据、写键、甚至借持久化写文件。安全基线由五件事组成:绑定必要网卡、设置强密码、限制危险命令、用防火墙或安全组收窄来源、以专用低权限账号运行。它们互相不可替代,缺一件就等于没做。
基本信息
| 网络层 | bind 指定监听地址,安全组或防火墙只放行应用网段 |
|---|---|
| 认证 | requirepass 强密码;6.0 起可用 ACL 按账号授权 |
| 命令控制 | rename-command 改名或禁用 FLUSHALL、KEYS、CONFIG 等 |
| 运行身份 | 专用系统账号,文件与目录属主一致,不用 root |
| 默认端口 | 6379(TCP),集群总线默认在数据端口加 10000 |
典型使用场景
- 新实例上线前的安全检查,逐项核对基线
- 等保测评或安全扫描点名「Redis 未授权访问」后的整改
- 内网横向渗透演练后确认实例不可被当作跳板
- 云上实例被告警开放 6379 端口,需要收窄来源
- 运维交接时用同一份清单核对,避免配置漂移
基线配置片段
基线配置片段
bind 127.0.0.1 10.0.0.10 # 只监听必要网卡
protected-mode yes
requirepass 32位以上随机密码
# 6.0 之前可用改名规避危险命令(注意客户端兼容性):
# rename-command FLUSHALL ""
# rename-command KEYS ""
# rename-command CONFIG ""
appendonly yes # 开启持久化,避免重启丢数据核验命令
核验命令
redis-cli -h 10.0.0.10 -a "$REDIS_PASS" PING # 密码走环境变量,别写进命令历史
ss -tlnp | grep 6379 # 确认监听地址与进程用户
redis-cli -h 10.0.0.10 -a "$REDIS_PASS" ACL LIST # 6.0+ 看账号与权限
redis-cli -h 10.0.0.10 CONFIG GET protected-mode
redis-cli -h 10.0.0.10 INFO server | grep -E "redis_version|config_file"加固项与常见错法
| 加固项 | 作用 | 常见错法 |
|---|---|---|
| bind | 只监听业务需要的网卡 | 只设密码不改 bind,密码泄露即全网可达 |
| requirepass | 开启密码认证 | 用弱口令,或把密码写进代码仓库 |
| protected-mode | 无密码且未绑定时的基础兜底 | 依赖默认值却不确认是否被关掉 |
| rename-command | 禁用或改名危险命令 | 禁用 KEYS 后客户端库不兼容却没评估 |
| ACL | 按账号分配最小权限 | 所有业务共用同一个默认账号 |
| 运行用户 | 限制被利用后的破坏面 | 直接用 root 运行 redis-server |
上云不等于安全:安全组必须只对应用网段放行 6379。历史上大量挖矿与勒索事件都源于实例直接暴露在公网,且没有设置密码。
Redis 6.0 及以上的 ACL 比一刀切禁用命令更实用:给每个业务分配独立账号,只授予必要命令与键前缀权限,既缩小攻击面,也不会破坏其它客户端的兼容性。
不要把密码写在启动脚本、CI 日志或命令行参数里:命令行会进入 shell 历史与进程列表。使用环境变量、权限为 600 的配置文件,或集中式密钥管理。