Redis被恶意清空大概率是FLUSHALL/FLUSHDB等危险命令遭远程执行,根源在于公网暴露、弱密码或定时任务后门;应立即禁用危险命令、限制监听地址、设置强密码,并清除crontab及ssh后门。

Redis 被恶意清空,大概率是 FLUSHALL 或 FLUSHDB 被远程执行了
这不是 Redis 本身的问题,而是暴露在公网、弱密码或被植入定时任务导致的典型入侵结果。你看到“每天清空但某个 key 还在”,恰恰说明不是自动过期或内存淘汰——那是人为或脚本反复执行清库命令留下的痕迹(比如那个残留的 ssh-rsa 公钥,就是攻击者留的后门凭证)。
关键动作不是事后恢复,而是掐断入口:
-
FLUSHALL、FLUSHDB、CONFIG、DEBUG、KEYS这些命令必须禁用,尤其前两个是清库主力 - Redis 默认监听
0.0.0.0:6379,只要开放 6379 端口且没密码,等于把数据库挂到黑产扫描器首页 - 宝塔默认不改配置,很多用户装完就开外网,连密码都懒得设——这是最常见失守原因
在宝塔面板里禁用危险命令:直接改 redis.conf
宝塔修改配置最稳妥的方式是进【软件商店】→ 找到 Redis → 【设置】→ 【配置文件】,不要手写启动脚本或绕过面板改系统级配置。
在配置文件中找到 # rename-command FLUSHALL "" 这类注释行,取消注释并改成:
rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "" rename-command DEBUG "" rename-command KEYS ""
注意:"" 表示彻底禁用,不是重命名;如果只想重命名(比如改成 FLUSHALL_BAK),就写成 rename-command FLUSHALL FLUSHALL_BAK,但禁用更安全。
改完点【保存】,再进【服务】→ 【重启】生效。验证是否成功:用 redis-cli 连上去执行 FLUSHALL,应返回 (error) ERR unknown command `FLUSHALL`。
强制 Redis 只监听内网:改 bind 和 protected-mode
宝塔默认不会限制 bind 地址,而 protected-mode yes 在有密码时才真正起作用——所以这两项必须一起配。
- 把
bind 127.0.0.1改成bind 127.0.0.1 172.16.0.0/12(如果你用的是阿里云/腾讯云内网,对应段一般是172.16.x.x或10.x.x.x;不确定就只留127.0.0.1) - 确保
protected-mode yes已开启(宝塔新版默认是 yes,老版本可能为 no) - 必须设置密码:
requirepass your_strong_password(别用123456或空密码) - 删掉或注释掉
# bind 0.0.0.0这种危险写法
改完重启 Redis,然后从服务器本地执行:redis-cli -h 127.0.0.1 -p 6379 ping 应返回 PONG;但从外网 telnet 你的服务器 IP 6379 应该直接超时或拒绝连接。
检查定时任务和可疑进程:清掉已存在的后门
光堵住入口不够,得确认机器是否已被控。攻击者常通过 crontab 每小时执行一次 redis-cli FLUSHALL,或用 wget 下载恶意脚本。
- 运行
crontab -l,重点看有没有含redis-cli、wget、curl、陌生域名或.sh的行 - 查进程:
ps aux | grep -E "(redis|wget|curl|sh)",特别留意非/usr/bin/redis-server路径的 redis 进程 - 检查登录日志:
lastb | head -20(看爆破记录)、grep "Failed password" /var/log/secure* - 那个残留的
ssh-rsa AAAAB3NzaC1yc2E...很可能是写入了~/.ssh/authorized_keys,要手动删掉
这一步容易被忽略:即使你改了 Redis 配置,只要定时任务还在跑,每天照样清库。必须先清后门,再加固配置。


















