redis未授权访问防护,设置密码
Redis未授权访问是服务器被入侵的高发原因之一。
默认配置下Redis不需要密码即可连接,如果6379端口直接暴露在公网,攻击者通过一条命令就能读写你的数据,甚至写入定时任务拿到服务器权限。
本文会从零开始,教你通过设置密码、绑定内网地址、关闭危险命令和防火墙规则四层防护,彻底解决这个问题。
整个过程不依赖图形界面,SSH登录服务器即可完成,适合所有Linux发行版。
加固前先确认现状
动手之前,先看看当前Redis是否处于裸奔状态。
登录服务器后执行下面两条命令:
ps -ef | grep redis
netstat -anp | grep 6379
第一条命令确认Redis进程存在,第二条命令查看6379端口监听情况。
如果第二行输出中有 0.0.0.0:6379 或 *:6379,说明Redis正在监听所有网卡,公网IP可以直接访问,这就是典型的未授权访问风险。
第一步:修改Redis配置文件设置密码
Redis的配置文件通常位于 /etc/redis/redis.conf,或 /etc/redis.conf。
使用 vim 打开:
vim /etc/redis/redis.conf
找到被注释掉的 # requirepass foobared 这一行,按 i 进入编辑模式,去掉 # 并把默认值改成一个强密码:
requirepass 这里改成你的强密码
密码建议使用字母、数字、特殊符号混合,长度超过16位。
改完后保存退出(Esc,输入 :wq)。
同时把监听地址改为只允许本机和内网访问,找到 bind 行,改成:
bind 127.0.0.1 内网IP
如果你不确定内网IP,可以先用 ip addr 命令查看。
如果只有一个网卡且不想有外网访问风险,直接写成 bind 127.0.0.1 最安全。
改完后重启Redis:
systemctl restart redis
重启后执行 systemctl status redis 确认启动正常。
第二步:用防火墙禁止外网访问6379端口
即使Redis配置了密码,也建议从网络层拦掉外网访问。
下面以 iptables 和 firewalld 为例。
CentOS / RHEL 使用 firewalld:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="内网IP" port port="6379" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="6379" protocol="tcp" reject'
firewall-cmd --reload
上面第一条放行你的内网IP,第二条拒绝其他所有来源访问6379。
注意两条规则有顺序,先放行后拒绝。
Ubuntu / Debian 使用 ufw:
ufw allow from 内网IP to any port 6379 proto tcp
ufw deny 6379/tcp
ufw reload
如果服务器使用云厂商安全组,还需要登录云控制台,在安全组规则里删除或拒绝 0.0.0.0/0 对6379端口的入方向放行,只保留内网来源IP。
第三步:禁用危险命令和重命名高危指令
即使有密码,也建议关闭或重命名 FLUSHALL、CONFIG、EVAL 这类高危命令,防止密码泄露后数据被一键清空或配置被篡改。
在配置文件末尾追加:
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command EVAL ""
如果业务确实需要这些命令,可以把空引号改成自定义的名字,例如 rename-command FLUSHALL "mkredisflush",这样只有你知道。
修改后再次重启Redis。
常见疑问:未授权访问是怎么发生的
很多人以为Redis装在服务器上就安全,实际漏洞往往出在两点:一是Redis默认绑定 0.0.0.0,公网IP能直达;
二是配置文件里没有设置密码,老版本Redis甚至没有默认认证。
攻击者用 redis-cli -h 你的IP -p 6379 ping 检测,返回 PONG 就直接进来了。
所以上面三步缺一不可:密码保证认证,绑定内网缩小暴露面,防火墙兜底网络层。
验证加固效果
设置完后必须实际验证,不能只看配置。
先在本机测试密码认证:
redis-cli -h 127.0.0.1 -p 6379 ping
如果输出 NOAUTH Authentication required.,说明密码已生效。
带密码连接:
redis-cli -h 127.0.0.1 -p 6379 -a 你设置的密码 ping
输出 PONG 就代表认证通过。
再检查端口监听状态:
netstat -anp | grep 6379
确认监听地址里没有 0.0.0.0:6379。
最后,拿着你的公网IP加上6379端口,用一个在线端口扫描工具或在自己的另一台电脑上执行 telnet 你的公网IP 6379,如果连接超时或提示拒绝,说明外网访问已被阻断。
最容易踩的几个坑
修改配置后忘记重启Redis。 配置不会自动生效,重启前先执行 redis-cli -a 密码 ping 确认当前状态,再 systemctl restart redis。
bind 127.0.0.1 后本机连接正常,但内网其他机器连不上。 这是正常现象,因为Redis只监听了本机地址。
如果业务方需要从内网其他服务器访问,必须把 bind 改成服务器内网IP,并且防火墙放行该IP地址。
宝塔面板用户修改配置后重启失败。 宝塔的Redis配置文件在 /www/server/redis/redis.conf,
并且面板有“是否启用密码保护”开关,
建议先用面板关闭保护再改配置文件,
避免权限冲突。
如果你正在处理Redis未授权访问防护、设置密码或禁止外网访问6379端口的问题,建议先完整执行本文前两步,再用第三步加固危险命令。
排查异常时优先检查配置文件和防火墙规则,Redis重启失败通常和 bind 或 rename-command 语法有关,回看一下这两处就能快速定位。