Redis 未授权访问是互联网上最常见、危害最大的服务器入侵方式之一。攻击者扫到没设密码的 Redis(默认就是没密码),几分钟内就能拿到服务器 root 权限——写公钥、写定时任务、甚至直接反弹 shell。
这篇讲 Redis 未授权访问的原理、怎么自查、怎么彻底加固。现在、立刻、去检查你的 Redis。
需要云服务器可以看看财富云计算:NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,一键开服面板,主流游戏快速部署。
一、未授权访问是怎么被利用的
攻击链路通常是这样的:
- 全网扫描 6379 端口(Redis 默认端口)
- 发现能连上(没密码),执行
info确认版本和配置 - 利用 Redis 的写文件能力植入后门:
# 攻击者实际会执行的命令(在你服务器上)
redis-cli -h 目标IP
> config set dir /root/.ssh/
> config set dbfilename authorized_keys
> set x "\n\n公钥内容\n\n"
> save
# 完成:攻击者可以用私钥 SSH 登录你的服务器还有更直接的:写 crontab 反弹 shell、写 webshell(如果机器上有 Web 目录)、装挖矿程序。
整个过程不到 1 分钟,不需要任何漏洞,用的全是 Redis 的正常功能。
二、自查:你的 Redis 安全吗
现在就去服务器上跑:
# 1. 看 Redis 监听地址(如果是 0.0.0.0 或 ::,全网可达!)
ss -tlnp | grep 6379
# 2. 尝试无密码连接(能连上就是没设密码)
redis-cli -h 127.0.0.1 ping
# 返回 PONG = 本地能连(正常)
# 3. 尝试从「外部」连接(用另一台机器,或公网 IP 测)
redis-cli -h 你的公网IP 6379
# 如果返回 PONG = 危险!全网都能连你的 Redis再看配置文件:
# 查看关键配置
redis-cli config get requirepass # 密码(空=没设)
redis-cli config get bind # 绑定地址
redis-cli config get protected-mode # 保护模式危险信号:
requirepass为空bind是0.0.0.0或没配protected-mode是no- 防火墙没挡 6379 端口
三、加固:六步锁死 Redis
1. 设强密码
# 配置文件 /etc/redis/redis.conf
requirepass 你的超长随机密码
# 或命令行临时设(重启失效,要写进配置文件)
redis-cli config set requirepass 你的密码密码生成:
# 生成 32 位随机密码
openssl rand -base64 24设了密码后连接方式:
redis-cli -h 127.0.0.1 -a 你的密码
# 或在程序里: redis://:密码@127.0.0.1:63792. 只监听内网
# /etc/redis/redis.conf
bind 127.0.0.1 -::1
# 如果应用在别的机器上,绑内网 IP(如 192.168.1.10),绝不绑 0.0.0.03. 开启保护模式
protected-mode yes保护模式的作用:没设密码 + 没绑地址时,拒绝外部连接。双保险。
4. 禁用危险命令
# 重命名或禁用高危命令(防 RCE 利用)
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "随机字符串"
rename-command EVAL ""
rename-command DEBUG ""⚠️ 注意:rename-command CONFIG 后,config set 也用不了,config get 要用新名字。有些程序依赖 CONFIG 命令,改名前先测试。
5. 用普通用户跑,禁止 root
# 配置文件
user redis
# 或 systemd 单元里
User=redis
Group=redisRedis 进程被拿下后,拿的是 redis 用户权限而不是 root,损失可控。
6. 防火墙兜底
即使 Redis 只听 127.0.0.1,防火墙也加上:
# ufw
ufw deny 6379/tcp
ufw allow from 192.168.1.0/24 to any port 6379 # 只允许内网段
# firewalld
firewall-cmd --permanent --remove-port=6379/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP四、已经被入侵了:应急处理
怀疑 Redis 被利用过,按这个流程查:
1. 看有没有异常
# 看 Redis 日志有没有可疑的 config set
grep -i "config set" /var/log/redis/redis-server.log
# 看有没有异常连接记录
redis-cli -a 密码 client list
# 看 RDB 文件是否被动过(攻击者靠 save 写文件)
ls -la /var/lib/redis/
ls -la /root/.ssh/2. 检查常见后门位置
# SSH 公钥后门(最高频)
cat /root/.ssh/authorized_keys
# 看到不认识的公钥 = 被入侵
# crontab 后门
crontab -l
ls /etc/cron.d/ /var/spool/cron/
# 系统服务后门
systemctl list-units --type=service --state=running | grep -v known
# 异常进程(挖矿特征:CPU 占满、进程名随机)
top
ps aux | grep -E "kdevtmpfs|xmrig|minerd|\.\/"
# 异常端口
ss -tlnp3. 处置顺序
- 先断网:安全组/防火墙全关,只留自己的 IP
- 改密码:Redis 密码、系统 root 密码、所有可能泄露的密钥
- 清后门:authorized_keys 里删陌生公钥、crontab 清异常项
- 备份证据:把日志、可疑文件留着,分析入侵路径
- 重装系统:root 权限丢过的机器,最干净的做法是重装,只恢复数据不恢复配置
- 补上加固:按上面六步重新配
详细应急流程见服务器被入侵应急排查。
五、Redis 安全配置模板
一份可以直接抄的配置:
# /etc/redis/redis.conf 安全部分
# 网络
bind 127.0.0.1 -::1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0 # 客户端空闲不超时(按需调整)
tcp-keepalive 300
# 认证
requirepass 你的超长随机密码
# Redis 6+ 支持 ACL,更细粒度
# user default on >你的密码 ~* +@all
# 危险命令禁用
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "CONFIG_RANDOM_STRING"
rename-command KEYS ""
# 内存上限(防被打爆)
maxmemory 256mb
maxmemory-policy allkeys-lru
# 运行用户
# 在 systemd 单元里设 User=redis
# 日志
logfile /var/log/redis/redis-server.log
loglevel notice改完重启并验证:
systemctl restart redis
redis-cli -h 127.0.0.1 ping # 应该要求密码
redis-cli -h 127.0.0.1 -a 密码 ping # 返回 PONG
redis-cli -h 公网IP 6379 # 应该连不上六、云服务器上的额外注意
安全组
云厂商控制台的安全组,默认可能放通了所有端口。去检查:
- 6379 端口只对 127.0.0.1 或内网开放
- 不要图省事「放通全部端口」
NAT 型服务器的特殊性
NAT 型云服务器没有独立公网 IP,服务商在网关做端口映射。这意味着:
- 只有映射出来的端口才能从公网访问。如果映射列表里没有 6379,公网扫不到你的 Redis,天然安全一层
- 但别主动去映射 6379——没有任何正当理由把数据库端口暴露公网
- 在服务商控制台确认映射端口清单,把不需要的端口从映射里删掉
这也是 NAT 机型的一个隐性安全优势:端口默认不开放,攻击面小。
公网必须访问 Redis 的场景
如果应用和 Redis 不在同一台机器(比如 Web 在前端、Redis 在数据节点),不要直接开放 6379,用这两种方式:
- 内网互通:同 VPC 内网直接连,不走公网(首选)
- SSH 隧道:
ssh -L 6379:localhost:6379 user@redis机,加密走 SSH - stunnel/TLS:Redis 6+ 支持 TLS,配证书加密传输
七、常见问题
Q:设了密码,应用连不上了?
连接字符串要带密码:redis://:你的密码@127.0.0.1:6379。检查代码里的配置,密码别手滑带空格。
Q:rename-command CONFIG 后,程序报错?
程序用不了 CONFIG 命令了。要么改回,要么升级程序改用别的方式配置。生产环境谨慎用这个。
Q:Redis 6 的 ACL 和 requirepass 用哪个?
Redis 6+ 推荐用 ACL,可以给不同用户不同权限(比如只读用户、只能操作某些 key 前缀)。requirepass 简单粗暴,小场景够用。
Q:怎么监控 Redis 有没有被扫?
看 Redis 日志的连接来源 IP,异常的 IP 加防火墙黑名单:
# Redis 日志里连接记录
grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /var/log/redis/redis-server.log | sort | uniq -c | sort -rnQ:本地开发要方便,能不能关密码?
可以,但必须同时满足:只听 127.0.0.1 + protected-mode yes + 防火墙挡 6379。三个条件缺一不可,生产环境一律设密码。
小结
Redis 安全就三句话:设密码、只听本地、防火墙兜底。五分钟检查完,能防住互联网上最常见的入侵方式之一。已经怀疑被入侵的,别只删后门——root 丢过的机器请重装,这是唯一彻底的办法。
更多安全教程见财富云计算知识库:防火墙配置、fail2ban、数据库加固、被入侵应急全系列。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,网关层减少暴露面。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]安全组是云服务器的第一道门:配错了,要么玩家连不上、要么全网都能扫到你。这篇把安全组的原理、配法、排查讲透——从默认规则到最小化实践,从游戏服到网站,全部有现成规则表。需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,主流游戏都能快速部署,安全组模板已内置。一、安全组是什么安全组是云平台提供的虚拟防火墙,在流量到达你的服务器之前[...]
2026-10-15 回复
[...]# [ ] 预估 QPS,单 key 不超总 QPS 10%Redis 运维全景见Redis 安装与缓存应用实战,持久化配置见Redis 持久化 RDB 与 AOF,安全加固见Redis 未授权访问防护。七、延迟毛刺自检流程Redis 突然变慢[...]
2026-10-15 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复
[...]restart: unless-stopped具体部署步骤(含证书、合法域名配置)见小程序后端搭建实战。两个方案的详细对比见网站环境怎么选。五、安全与备份:上线前的最后一道关小程序后端是 7×24 对着公网的,基本功课不能省:防火墙只开 443 和 SSH 端口,MySQL/Redis 的 3306/6379 绝不对外,见服务器端口安全:最小化开放SSH 用密钥登录,关密码登录,见SSH 安全加固[...]
2026-10-18 回复
[...]})Redis 必须设密码——没密码的 Redis 是公网扫描器的自助提权通道,见Redis 未授权访问防护。缓存雪崩防护(随机过期时间)见Redis 大 Key 与热 Key 处理。六、备份:数据的最后防线小程序后台的数据库是纯增量资产,丢了不可再生。三层备份:# 1. 每日逻辑备份(crontab)[...]
2026-10-18 回复