当前位置:首页 > 问答 > 正文

红色不关远程连,redis那远程连接咋就给禁止了呢

主要基于Redis官方文档中关于安全配置的说明,以及常见的服务器运维安全实践经验。)

“红色不关远程连,redis那远程连接咋就给禁止了呢”这个说法,其实是在说一个非常常见且重要的服务器安全问题,这里的“红色”可能是一种比喻,象征着危险或警告,意思是,如果你在配置服务器时,没有处理好远程连接这个“红色”警报级别的问题,那么像Redis这样的服务,它的远程连接功能默认可能就是被禁止的,或者你应该主动去禁止它,否则会出大安全问题。

那为什么Redis的远程连接会成为一个需要被特别关注甚至禁止的事情呢?这得从头说起。

Redis本身是一个非常高效的数据库,它被设计为在内存中工作,所以速度极快,在它最早期的版本和默认配置里,为了追求极致的简单和性能,它默认只允许本机的程序来连接它,也就是只允许127.0.0.1这个地址来访问,你可以想象成,Redis出厂设置就是“自闭模式”,只跟自己所在的这台机器说话,不理会外面世界的任何请求,这么做在开发阶段或者服务都部署在同一台机器上时,是完全没有问题的,而且很安全。

当你的应用变大了,网站的业务和数据库需要分开部署在不同的服务器上时,问题就来了,你的应用程序跑在A服务器上,但Redis数据库在B服务器上,A服务器上的程序想要存取B服务器上Redis里的数据,这就需要进行“远程连接”了。

这时候,你就需要去修改Redis的配置文件,通常是那个叫redis.conf的文件,里面有一个非常关键的设置,叫做bind,默认情况下,这一行通常是bind 127.0.0.1 -::1,这就意味着只允许本机IPv4和IPv6地址连接,如果你想允许远程连接,很多人会想当然地把它改成bind 0.0.0.0,这个0.0.0的意思就是“监听所有网络接口”,不管是从哪个IP地址来的连接请求,Redis都会接受。

好了,危险就从这里开始了,你一旦把Redis暴露在了公网上(也就是允许0.0.0连接),而恰巧你的服务器防火墙又没有对Redis的端口(默认是6379)做任何限制,那么全世界任何能联网的电脑,只要知道你的服务器IP地址,都可以尝试来连接你的Redis服务。

这为什么可怕呢?因为早期Redis的另一个默认设置是“没有密码”,它默认是不需要任何密码就能直接连接的,就像一个房间没有门锁,任何一个能连上来的陌生人,都拥有Redis的最高权限,他可以随意查看、修改、删除你数据库里的所有数据;更可怕的是,他甚至可以借助Redis的权限,在你的服务器上执行任意命令,比如下载病毒、挖矿程序,或者把你的数据全部加密然后向你勒索比特币,这种安全事件在过去几年里真实发生过无数次,造成了很大的损失。

业界才形成了强烈的共识和严格的运维规范:除非有绝对的必要,否则不应该将Redis服务直接暴露在公网上。 这就是“redis那远程连接咋就给禁止了呢”这句话背后的核心原因——不是为了刁难谁,而是出于最基础的安全考虑。

在实际工作中,如果确实需要远程连接Redis,应该怎么做才是安全的呢?绝对不会是简单地修改一个bind配置就了事,通常会采用一种“曲线救国”的、更安全的方式:

第一种最推荐的方法是通过SSH隧道连接,你可以把SSH想象成一条加密的、需要钥匙(密码或密钥)才能通过的秘密隧道,你的本地程序不是直接去连接远端的Redis端口,而是先和服务器建立一个SSH安全连接,然后通过这个安全连接来传输对Redis的请求,对于Redis服务本身来说,它看到的连接请求还是来自本机(127.0.0.1),所以它觉得很安全,而对于公网来说,暴露的是SSH服务的端口(22号),SSH本身的安全性要远高于Redis,而且可以通过密钥登录等方式极大增强安全性,这是一种非常普遍且安全的做法。

第二种方法是,如果必须允许直接远程连接,那就必须设置强密码,在Redis配置文件中,通过requirepass指令设置一个非常复杂、难以破解的密码,这样,即使有人扫描到了你的Redis端口,他也需要先通过密码认证才能进行操作,大大增加了攻击难度。

第三种方法是结合防火墙规则,在服务器的防火墙上,设置严格的规则,只允许你指定的、可信的IP地址(比如你的应用程序所在的服务器IP)来访问Redis的6379端口,拒绝其他所有来源的连接,这叫白名单机制,非常有效。

回到最初的问题。“红色不关远程连”是在提醒我们,远程连接是一个高风险操作,必须用红色标记,高度重视。“redis那远程连接咋就给禁止了呢”其实是一种强调,告诉我们Redis的远程访问在默认或规范中就应该被严格限制或采用安全方式替代,这并不是Redis软件本身有什么缺陷,而是在于使用者如何正确地、安全地配置和部署它,在互联网这个世界里,安全永远是第一位的,一时的方便可能会带来灾难性的后果,对于Redis这类服务,采取一种“默认拒绝,按需开放,并施加多重保护”的策略,是每个运维人员和安全意识强的开发者都应该遵循的黄金法则。

红色不关远程连,redis那远程连接咋就给禁止了呢