zoukankan      html  css  js  c++  java
  • Redis安全策略

    1. 开启redis密码认证,并设置高复杂度密码

    描述

    redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。 redis因查询效率高,auth这种命令每秒能处理9w次以上,简单的redis的密码极容易为攻击者暴破。

    检查提示

    --

    加固建议

    打开redis.conf,找到requirepass所在的地方,修改为指定的密码,密码应符合复杂性要求:
    ​```
    1、长度8位以上
    2、包含以下四类字符中的三类字符:
    英文大写字母(A 到 Z)
    英文小写字母(a 到 z)
    10 个基本数字(0 到 9)
    非字母字符(例如 !、$、#、%、@、^、&)
    3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等
    ​```
    再去掉前面的#号注释符,然后重启redis
    

    2. 禁止监听在公网

    描述

    Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。

    检查提示

    --

    加固建议

    在redis的配置文件redis.conf中配置如下:
    bind 127.0.0.1或者内网IP,然后重启redis
    

    3. 禁止使用root用户启动

    描述

    使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的

    检查提示

    --

    加固建议

    使用root切换到redis用户启动服务:
    ​```
    useradd -s /sbin/nolog -M redis 
    sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf 
    ​```
    

    4. 限制redis 配置文件访问权限

    描述

    因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,

    检查提示

    --

    加固建议

    执行以下命令修改配置文件权限:
    ​```
    chmod 600 /<filepath>/redis.conf
    ​```
    

    5. 修改默认6379端口

    描述

    避免使用熟知的端口,降低被初级扫描的风险

    检查提示

    --

    加固建议

    编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis
    

    6. 禁用或者重命名危险命令

    描述

    Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。

    检查提示

    --

    加固建议

    修改 redis.conf 文件,添加
    ​```
    rename-command FLUSHALL ""
    rename-command FLUSHDB  ""
    rename-command CONFIG   ""
    rename-command KEYS     ""
    rename-command SHUTDOWN ""
    rename-command DEL ""
    rename-command EVAL ""
    ​```
    然后重启redis。
    重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如:
    `rename-command FLUSHALL  joYAPNXRPmcarcR4ZDgC`
    

    7. 打开保护模式

    描述

    redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。

    检查提示

    --

    加固建议

    redis.conf安全设置: # 打开保护模式 protected-mode yes
    

    8. redis集群设置密码

    1,如果是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码

    2,如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题,可以模拟并观察日志

    3,各个节点的密码都必须一致,否则Redirected就会失败

    # redis-cli -c -p 7004
    127.0.0.1:7004> config set masterauth frank
    OK
    127.0.0.1:7004> config set requirepass frank
    OK
    127.0.0.1:7004> CONFIG REWRITE
    (error) NOAUTH Authentication required.
    127.0.0.1:7004> auth frank
    OK
    127.0.0.1:7004> config rewrite
    OK
    127.0.0.1:7004> exit
    [root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# redis-cli -c -p 7004 -a frank
    

    4,设置密码之后如果需要使用redis-trib.rb的各种命令报错问题
    如:

    # redis-trib.rb check 47.52.41.245:7003
    [ERR] Sorry, can't connect to node 47.52.41.245:7003
    

    解决办法:

    找到建立集群时执行gem install redis命令生成的client.rb文件,如果不知道该文件在哪可以通过下面命令查找

    # find / -name client.rb -print
    /tmp/frank/ruby/ruby-2.2.8/lib/xmlrpc/client.rb
    /usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb
    /usr/local/lib/ruby/2.2.0/xmlrpc/client.rb
    

    我这边的那个文件是/usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb

    然后修改该文件

    # vim /usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb
    

    修改password对应的值然后保存,就可以了

    require_relative "errors"
    require "socket"
    require "cgi"
    
    class Redis
      class Client
    
        DEFAULTS = {
          :url => lambda { ENV["REDIS_URL"] },
          :scheme => "redis",
          :host => "127.0.0.1",
          :port => 6379,
          :path => nil,
          :timeout => 5.0,
          :password => "frank",
          :db => 0,
          :driver => nil,
          :id => nil,
          :tcp_keepalive => 0,
          :reconnect_attempts => 1,
          :inherit_socket => false
        }
    
        attr_reader :options
    

    重新运行redis-trib.rb命令

    redis-trib.rb check 47.52.41.245:7003
    >>> Performing Cluster Check (using node 47.52.41.245:7003)
    S: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
       slots: (0 slots) slave
       replicates 908430b2bf63669898e9eaef79dd6c1b33c8c57a
    M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001
    

    9. 使用Redis5.0版本创建的集群设置密码

    直接一步到位,在创建集群前,在配置文件中设置好密码(所有配置文件的密码保持一致),然后使用命令创建集群时在后面加上-a password参数。

    这样一来,生成的集群进行访问时已经包含访问密码了,不用再事后设置了。

  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11303083.html
Copyright © 2011-2022 走看看