Redis未授权访问漏洞怎么防?安全加固与应急修复实战教程

Redis 是站长最常用的缓存数据库,但也是被入侵重灾区。近几年的挖矿木马、勒索事件里,有相当大一部分攻击入口就是 Redis 未授权访问——攻击者不需要任何密码就能连上你的 Redis,然后用一条 CONFIG SET dir 命令把 WebShell 写到网站目录,直接拿下服务器。为什么 Redis 这么容易中招?因为它默认只绑定本机,很多教程为了图省事改成 0.0.0.0 后又不开认证,等于把大门钥匙挂在了门口。这篇文章从漏洞原理讲到加固配置,再讲到被入侵后的应急处置,全程可落地。

一、漏洞原理与危害:一条命令就能打穿服务器

Redis 未授权访问的根源在于:Redis 在 bind 0.0.0.0protected-mode no 的配置下,会监听所有网卡;如果 requirepass 没有设置密码,任何能访问该端口(默认 6379)的人都可以直接执行 Redis 命令。高危利用方式主要有三种:

  1. 写 WebShell:通过 CONFIG SET dirCONFIG SET dbfilename 把恶意 PHP 代码写入网站根目录,配合 RDB 持久化机制落盘,直接获得网站控制权。
  2. 写 SSH 公钥:把攻击者的公钥写入 /root/.ssh/authorized_keys,实现免密登录服务器,彻底沦陷。
  3. 写计划任务:写入 crontab 下载执行挖矿木马,服务器变成肉鸡参与挖矿,CPU 飙高、电费飙升。

验证自己的 Redis 是否裸奔,一条命令就知道:

# 从任意一台机器尝试连接(无需密码)
redis-cli -h 你的服务器IP -p 6379 ping
# 如果返回 PONG,说明 Redis 未授权访问漏洞已存在,必须立即加固
# 如果提示 NOAUTH Authentication required,说明已有密码认证,相对安全

二、安全加固:绑定内网、开启认证、禁用危险命令

加固三步走,每一行配置都有明确作用。编辑 Redis 配置文件(宝塔面板默认路径 /www/server/redis/redis.conf,apt/yum 安装默认在 /etc/redis/redis.conf):

# 1. 只绑定本机或内网地址,绝不监听公网
bind 127.0.0.1
# 如果是独立缓存服务器,改为内网 IP:bind 10.0.0.6
# 2. 强制开启保护模式(默认建议保持 yes)
protected-mode yes
# 3. 设置强密码:至少 20 位,字母数字特殊符号混合
requirepass "Kx9#vP2mQw8!LzR4@TbN"
# 4. 重命名高危命令,防止利用 CONFIG 写文件
rename-command CONFIG ""
rename-command EVAL ""
# 5. 关闭持久化文件落到非预期目录的风险
dir /var/lib/redis

其中 rename-command CONFIG "" 是把 CONFIG 命令完全禁用。如果业务确实需要 CONFIG,可以改成只有运维知道的名字,例如 rename-command CONFIG "bt_redis_config_2026"。改完配置后重启并验证:

# 重启 Redis
systemctl restart redis-server    # Debian/Ubuntu
systemctl restart redis           # CentOS / 宝塔

# 验证:无密码连接应被拒绝
redis-cli ping                    # 期望输出 NOAUTH
# 带密码连接正常
redis-cli -a 'Kx9#vP2mQw8!LzR4@TbN' ping   # 期望输出 PONG

# 验证 6379 不再暴露公网(从其他机器执行)
nmap -p 6379 你的服务器IP         # 期望 closed/filtered

如果业务上 Redis 必须被其他服务器访问(例如多台应用服务器共享缓存),除了开启认证,还一定要用防火墙做来源白名单。宝塔面板操作路径:安全 → 防火墙 → 添加端口规则,放行 6379 并只填应用服务器的内网 IP;命令行方式:

# 只允许 10.0.0.8 访问 6379
iptables -A INPUT -p tcp -s 10.0.0.8 --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
iptables-save > /etc/sysconfig/iptables

三、应急修复:已经中招了怎么办?

如果你通过上面的验证发现 Redis 已经裸奔,或者服务器出现 CPU 异常飙高、crontab 里多出不认识的计划任务、网站目录出现陌生文件,说明可能已经被利用。请按以下顺序处置:

# 1. 立即断网隔离,防止木马继续外联挖矿
systemctl stop redis-server
iptables -I INPUT -p tcp --dport 6379 -j DROP

# 2. 排查计划任务(最常见的挖矿驻留点)
crontab -l
ls -la /etc/cron.d/ /var/spool/cron/
# 3. 排查 SSH 后门公钥
cat /root/.ssh/authorized_keys
# 4. 排查可疑进程与连接
ps aux | grep -iE "redis|minerd|xmrig|kdevtmpfsi"
netstat -antp | grep -vE "127.0.0.1|ESTABLISHED.*:443"
# 5. 清除恶意文件后,删除可疑 Redis 数据并重建
redis-cli -a '你的旧密码' FLUSHALL
# 6. 按第二部分的加固配置重新设置 bind、密码、禁用 CONFIG
# 7. 修改服务器 SSH 密码和所有数据库密码,防止横向扩散
# 8. 持续观察 24 小时,确认无异常外联后再恢复对外服务

应急处置的核心原则:先断网止损,再取证溯源,最后加固恢复。清理干净后,建议把 Redis 版本升级到官方最新稳定版,旧版本存在的 Lua 沙箱逃逸等漏洞也可能被利用。

总结

Redis 未授权访问是最典型、最容易修、也最容易被忽略的高危漏洞。三条底线记牢:绝不监听公网、绝不留空密码、绝不禁用保护模式,再加一条防火墙白名单,就能把 90% 的攻击挡在门外。如果你不熟悉 Redis 运维或者服务器已经被入侵需要专业清理,可以联系速度网络,我们提供 Redis 加固、服务器应急响应与入侵溯源服务,帮你快速止损、恢复业务。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo