Redis密码设置,禁止外网无密码访问
Redis 默认安装后监听所有网卡且没有密码,一旦服务器安全组或防火墙放行 6379 端口,任何人都可能直接读写你的数据。
本文面向零基础用户,讲清 Redis 密码设置和禁止外网无密码访问的完整操作,完成后你可以通过本机连接、远程拒绝和密码校验三个结果来确认配置真正生效。
先确认当前 Redis 是否裸奔
操作前先看清现状,避免改错文件或漏掉监听地址。
- 查看 Redis 进程和配置文件路径:
ps -ef | grep redis
redis-cli CONFIG GET bind
redis-cli CONFIG GET requirepass
如果 bind 返回 0.0.0.0 或 *,说明监听了所有网卡;requirepass 返回空,说明没有密码。
- 检查端口暴露情况:
ss -tlnp | grep 6379
若显示 0.0.0.0:6379 或 *:6379,同时云服务器安全组放行了 6379,外网就可能直接访问。
- 确认配置文件位置,常见路径为
/etc/redis/redis.conf或/etc/redis/6379.conf,以ps -ef输出中的实际路径为准。
设置密码并限制监听地址
核心思路是两步:加密码、只允许本机或内网访问。
修改 redis.conf
用编辑器打开配置文件:
sudo vi /etc/redis/redis.conf
找到并修改以下参数,没有就手动添加:
bind 127.0.0.1
protected-mode yes
requirepass 你的高强度密码
说明:
bind 127.0.0.1表示只允许本机连接,这是禁止外网访问最直接的方式。protected-mode yes在未设置密码且未绑定地址时提供保护,建议保持开启。requirepass后面跟密码,建议使用大小写字母、数字和符号组合,不要用123456这类弱口令。
如果应用服务器和 Redis 不在同一台机器,不能只绑 127.0.0.1,应改成内网 IP,例如:
bind 127.0.0.1 10.0.0.5
然后通过防火墙只放行内网网段,不要直接暴露公网。
重启 Redis 并测试
sudo systemctl restart redis
redis-cli ping
未带密码时预期返回 NOAUTH Authentication required,说明密码已生效。
带密码连接:
redis-cli -a 你的高强度密码 ping
预期返回 PONG。
防火墙和安全组也要一起收紧
只改 Redis 配置还不够,云服务器安全组和系统防火墙是第二道门。
- 云服务器控制台:检查安全组入方向规则,删除或禁用
6379对0.0.0.0/0的放行。如果必须远程访问,来源限制为指定内网 IP 或办公 IP。 - 系统防火墙(以 firewalld 为例):
sudo firewall-cmd --permanent --remove-port=6379/tcp
sudo firewall-cmd --reload
- 使用 ufw 的系统:
sudo ufw deny 6379/tcp
sudo ufw reload
判断条件:如果 Redis 只被本机应用使用,监听地址和防火墙都应禁止外部 6379 访问;
如果确实需要跨机访问,优先走内网并配合密码,不要图省事直接对公网开放。
修改配置时容易踩的坑
- 改错配置文件:服务器上可能存在多个 redis.conf,以进程实际加载的路径为准。
- 忘记重启:修改
requirepass后不重启或不用CONFIG SET生效,密码不会起作用。 - 只加密码不限制来源:密码能挡住一部分扫描,但把 6379 暴露在公网仍会持续被尝试爆破,绑定地址和防火墙更关键。
- 密码写在命令行历史:
redis-cli -a可能被记录,生产环境可改用REDISCLI_AUTH环境变量或交互式AUTH。 - 主从或集群场景:主从之间需要同步密码时,要在配置中正确设置
masterauth,否则同步会失败。
验证是否真的禁止了外网无密码访问
在本机执行:
redis-cli ping
预期返回 NOAUTH Authentication required。
带密码执行:
redis-cli -a 你的高强度密码 ping
预期返回 PONG。
从另一台外网机器尝试连接:
telnet 你的服务器公网IP 6379
预期连接失败或超时。
如果仍能连通,说明安全组、防火墙或 bind 还有一处没改到位。
只要本机需要密码、外网无法直连、带密码能正常读写,就说明 Redis 密码设置和禁止外网无密码访问已经生效。
常见疑问
设置了 requirepass 后,原来的应用连不上怎么办?
需要在应用连接配置中补上密码,例如 PHP 的 auth 参数、Java 连接池的 password 字段,改完重启应用。
能不能只用密码,不绑定 127.0.0.1?
可以,但不推荐。密码是认证手段,绑定地址和防火墙才是访问控制,两者叠加更稳妥。
Redis 6 及以上还需要额外注意什么?
Redis 6 引入了 ACL 用户体系,可以用 ACL SETUSER 创建权限更细的用户。是否启用建议以你实际版本和官方文档为准,基础密码和网络限制仍然要做。
如果你正在处理 Redis 密码设置和禁止外网无密码访问,建议先按本文顺序改配置、重启、查安全组,再用本机和外网各验证一次,确认无误后再做其他优化。