• 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参数。

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

  • 相关阅读:
    太赞了!两个技巧帮你记住复杂 Linux 命令!
    Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)
    Spring Cloud 学习 之 Spring Cloud Eureka(架构)
    Spring Cloud 学习 之 Spring Cloud Eureka(搭建)
    Spring Cloud 学习 之 Spring Cloud Eureka(概述)
    Spring Boot学习 之 Spring Boot Actuator(一)
    java基础篇 之 final关键字
    spring学习笔记(九)事务学习(上)
    JAVA基础篇 之 类的初始化
    JAVA基础篇 之 finalize()方法的作用
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11303083.html
Copyright © 2020-2023  润新知