原文网址:Redis--提高外网访问的安全性_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍如何提高Redis在公网可访问时的安全性。
Redis若暴露在公网(公网可访问),则容易受到攻击。一般情况下,尽量配置Redis只允许内网访问,但有时需要使Redis可公网访问,比如:应用部署在不同的服务器,都要用这个Redis。
Redis部署在公网的配置
见:Redis--设置外网可以访问_IT利刃出鞘的博客-CSDN博客
粉丝福利:有很多粉丝私信问我有没有Java的面试及PDF书籍等资料,我整理一下,包含:真实面试题汇总、简历模板、PDF书籍、PPT模板等。这些是我自己也在用的资料,面试题是面试官问到我的问题的整理,其他资料也是我自用的,真正实用、靠谱。资料可以从这里免费获取:资料地址
1.设置复杂的密码
Redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。
修改方法:(修改redis.conf)
requirepass yourPassword
Redis因查询效率高,auth这种命令每秒能处理10w次以上,简单的redis的密码极容易为攻击者暴破。所以要设置复杂的密码。
2.修改Redis的端口号
大部分对 Redis 的攻击都是针对默认端口(6379)进行的。
修改方法(修改redis.conf)
修改前
port 6379
修改后
port 9999
记得iptables对应的端口要修改
3.不要用root用户启动Redis
使用普通用户权限启动Redis,禁止使用 root 权限启动Redis 服务。这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限。(nginx和apache都是有独立的work用户,而redis没有)。
第1步:新建Redis相关用户和组
#新增用户组groupadd serverNologin#新建用户redis并加入serverNologin组中,并禁止登录 useradd -M redis -g serverNologin -s /sbin/nologin
第2步:以Redis用户启动Redis服务
sudo -u redis /usr/bin/redis-server /etc/redis/redis.conf
4.禁用或重命名重要命令
Redis 有一些非常危险的指令,这些指令会对 Redis 的稳定以及数据安全造成非常严重的影响。比如:keys 指令会导致 Redis 卡顿,flushdb 和 flushall 会让 Redis 的所有数据全部清空。
Redis没有权限分离之说,无管理员账号和普通账户之分,导致攻击者登陆后可执行任意操作,因此需要隐藏重要命令。
具体命令有:FLUSHDB, FLUSHALL, KEYS,PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME,DEBUG, EVAL等。
重命名命令的方法(以KEYS为例)
将命令rename 成其他名字,原命令就无法执行了,需要用新命令执行。
rename-command KEYS KEYS_abcd
如上设置之后,需要用KEYS_abcd来执行。
禁用命令的方法(以KEYS为例)
将命令rename 成空串,此命令就无法执行了。
rename-command KEYS ""
5.SSL代理
Redis 不支持 SSL 链接。着客户端和服务器之间交互的数据如果直接暴露在公网上传输,会有被窃听的风险。如果必须要用在公网上,可以考虑使用 SSL 代理。
SSL 代理比较常见的有 ssh,不过 Redis 官方推荐使用 spiped 工具,可能是因为 spiped 的功能相对比较单一,使用也比较简单,易于理解。同样 SSL 代理也可以用在主从复制上,如果 Redis 主从实例需要跨机房复制,spiped 也可以派上用场。下面这张图是使用 spiped 对 ssh 通道进行二次加密 (因为 ssh 通道也可能存在 bug)。