修复 Redis 未授权访问漏洞最推荐的做法是将 bind 地址限制为 127.0.0.1 并设置高强度 requirepass 密码。此方案适用于大多数单机或非集群直连场景,风险边界在于修改 bind 后外部业务客户端将无法连接,需同步更新客户端配置。
先说结论:修复核心在于网络隔离与身份认证双重加固,仅改密码或仅改 bind 都存在被绕过的风险。
- 先判断:确认 Redis 是否暴露在公网,使用 netstat 检查监听地址是否为 0.0.0.0
- 优先做:修改 redis.conf 配置文件,同时设置 bind 127.0.0.1 和 requirepass 强密码
- 再验证:重启服务后,使用 redis-cli 不带密码连接应失败,带密码连接应成功
命令速用版
以下是临时生效和永久生效的关键命令,生产环境建议直接修改配置文件以避免重启后失效。
# 查看当前 bind 配置
redis-cli CONFIG GET bind
# 查看当前密码配置
redis-cli CONFIG GET requirepass
# 临时设置密码(重启失效)
redis-cli CONFIG SET requirepass \"YourStrongPassword\"
# 临时绑定 IP(重启失效)
redis-cli CONFIG SET bind 127.0.0.1
为什么会这样
Redis 默认配置为了开发便利性,往往监听所有网卡且无密码,暴露在公网极易被扫描利用。官方安全建议明确指出,未授权的 Redis 实例允许攻击者直接读取数据、写入定时任务甚至获取服务器权限。
分步处理
- 备份配置文件:找到 redis.conf 路径,执行 cp redis.conf redis.conf.bak 防止配置错误无法启动。
- 修改 bind 配置:搜索 bind 项,改为 bind 127.0.0.1,若需局域网访问可绑定内网 IP。
- 设置密码:搜索 requirepass 项,取消注释并设置复杂字符串,建议包含大小写字母和符号。
- 重启服务:执行 systemctl restart redis 或 service redis restart 使配置永久生效。
怎么验证是否生效
验证分为连通性测试和鉴权测试,确保未授权无法访问且授权后可正常操作。
# 不带密码连接,应返回 DENIED 或连接被拒绝
redis-cli ping
# 带密码连接,应返回 PONG
redis-cli -a YourStrongPassword ping
# 检查监听端口
netstat -tlnp | grep 6379
常见坑
- 配置不持久:使用 CONFIG SET 修改的配置重启后会还原,必须修改 redis.conf 文件。
- Protected Mode:Redis 3.2+ 默认开启保护模式,若未设密码且绑定 0.0.0.0 会拒绝外部连接,但这不能替代密码加固。
- 容器环境:Docker 部署需通过 -bind 参数或配置文件挂载修改,仅改宿主机防火墙可能无效。
常见问题
只设置密码不修改 bind 可以吗?
不建议,弱密码可能被爆破,且网络层面未隔离仍暴露攻击面。
修改 bind 后业务连接失败怎么办?
检查业务服务器 IP 是否在 bind 允许列表中,需改为绑定内网 IP 或通过 SSH 隧道转发。
忘记密码如何重置?
若无法认证,需停止 Redis 服务,注释 requirepass 行后重启,重置后再重新设置。
参考来源
- Redis Official Documentation, Security, https://redis.io/docs/management/security/