V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
gouchaoer
V2EX  ›  分享创造

restricted-redis-proxy:一个命令收到限制的 redis 代理

  •  
  •   gouchaoer · 2017-05-17 17:45:50 +08:00 · 2462 次点击
    这是一个创建于 2750 天前的主题,其中的信息可能已经有所发展或是发生改变。

    花了几天时间做了这么一个小玩意儿,动机是我平常用 redis 的场合挺多的,但是 redis 本身缺乏用户权限控制导致很多情况下没法用。我们知道 redis 作为一个缓存,只支持简单的密码验证,所有用户都在任意数据库执行任何命令。我总结了几个用 redis 比较困扰的场景:

    1、团队的很多服务都依赖同一个 redis,很多时候免不了误操作,比如队友不小心 flushall 了,或者 flushdb 了,或者你不想让别人用专门分配给你的某个数据库,或者你不想开放某些危险命令比如 CONFIG 给客户端。

    2、我们用一般 etcd/consul 来做配置服务器或者服务发现,但是很多时候觉得 etcd/consul 的分布式太复杂依赖太重,我只需要一个单节点的 redis (或者说类似阿里云双热备 redis )就够了,redis 做简单的配置服务器或者服务发现也没啥问题。

    3、爬虫工程师们做分布式爬虫任务的时候,很多时候需要用 redis 作为一个调度和状态中心,分布式的爬虫每个都需要知道 redis 密码才行,但是这样不太安全(你的爬虫跑在很多地方),于是只能在 redis 前面包装一层 api。我们知道 redis 可以保持 tcp 长连接很多时候很好用,包装成 api 又特别麻烦。

    4、and so on.

    针对这些场景下的困扰,我自己动手写了一个 tcp 层的 redis 代理,这个代理会解析从 redis 客户端发过来的 redis 命令,如果 redis 命令合法的话就放行,不合法的话就出错关闭连接。由于我对 php 比较熟悉所以就用 php 写的,基于 Workerman 这个异步的 tcp 事件库,逻辑非常简单直观。

    repo 地址: https://github.com/gouchaoer/restricted-redis-proxy 欢迎 star 和 PR

    有了这个代理的话,通过搭建一个限制命令的 redis 代理,然后只提供这个代理地址给别人,就可以解决上面的几个场景的困扰了。比如阿里云的热双备 redis 外网访问的话只能自己搭代理转发,如果用这个 restricted-redis-proxy 只允许某几个有限的命令或者数据库,就可以放心的用在很多场景了。

    5 条回复    2017-07-05 17:12:50 +08:00
    ixiaohei
        1
    ixiaohei  
       2017-05-17 23:55:20 +08:00
    然后你们运维没有把那些命令 rename 掉么?
    gouchaoer
        2
    gouchaoer  
    OP
       2017-05-18 10:13:59 +08:00
    @ixiaohei 这是 redis 内置的命令,不是 shell 的命令
    qieqie
        3
    qieqie  
       2017-05-18 15:00:48 +08:00   ❤️ 1
    gouchaoer
        4
    gouchaoer  
    OP
       2017-05-18 15:42:28 +08:00
    @qieqie https://help.aliyun.com/knowledge_detail/37447.html
    在配置文件里可以禁用这些命令,不过这样别的服务就没法用这些命令了
    vbem
        5
    vbem  
       2017-07-05 17:12:50 +08:00
    star 了,楼主的 idea 很赞。
    如果不是 php 的,肯定更火……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 02:43 · PVG 10:43 · LAX 18:43 · JFK 21:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.