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

描述

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

检查提示

--

加固建议

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

2. 禁止监听在公网

描述

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

检查提示

--

加固建议

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

3. 禁止使用root用户启动

描述

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

检查提示

--

加固建议

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

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

描述

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

检查提示

--

加固建议

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

5. 修改默认6379端口

描述

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

检查提示

--

加固建议

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

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

描述

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

检查提示

--

加固建议

  1. 修改 redis.conf 文件,添加
  2. ```
  3. rename-command FLUSHALL ""
  4. rename-command FLUSHDB ""
  5. rename-command CONFIG ""
  6. rename-command KEYS ""
  7. rename-command SHUTDOWN ""
  8. rename-command DEL ""
  9. rename-command EVAL ""
  10. ​```
  11. 然后重启redis
  12. 重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如:
  13. `rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC`

7. 打开保护模式

描述

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

检查提示

--

加固建议

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

8. redis集群设置密码

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

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

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

  1. # redis-cli -c -p 7004
  2. 127.0.0.1:7004> config set masterauth frank
  3. OK
  4. 127.0.0.1:7004> config set requirepass frank
  5. OK
  6. 127.0.0.1:7004> CONFIG REWRITE
  7. (error) NOAUTH Authentication required.
  8. 127.0.0.1:7004> auth frank
  9. OK
  10. 127.0.0.1:7004> config rewrite
  11. OK
  12. 127.0.0.1:7004> exit
  13. [root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# redis-cli -c -p 7004 -a frank

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

如:

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

解决办法:

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

  1. # find / -name client.rb -print
  2. /tmp/frank/ruby/ruby-2.2.8/lib/xmlrpc/client.rb
  3. /usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb
  4. /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

然后修改该文件

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

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

  1. require_relative "errors"
  2. require "socket"
  3. require "cgi"
  4. class Redis
  5. class Client
  6. DEFAULTS = {
  7. :url => lambda { ENV["REDIS_URL"] },
  8. :scheme => "redis",
  9. :host => "127.0.0.1",
  10. :port => 6379,
  11. :path => nil,
  12. :timeout => 5.0,
  13. :password => "frank",
  14. :db => 0,
  15. :driver => nil,
  16. :id => nil,
  17. :tcp_keepalive => 0,
  18. :reconnect_attempts => 1,
  19. :inherit_socket => false
  20. }
  21. attr_reader :options

重新运行redis-trib.rb命令

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

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

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

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

Redis安全策略的更多相关文章

  1. Redis允许远程连接

    默认安装启动redis后,只能本地连接,无法远程连接上,原因是redis安全策略默认本机访问,所以远程访问的话需要将 配置文件redis.cof 中的 bind 127.0.0.1 前面的#注释掉, ...

  2. 配置远程访问阿里云服务器的Redis

    1.默认情况Redis不是在后台运行,我们需要修改把redis放在后台运行:daemonize yes 2.Redis安全策略默认本机访问,所以远程访问的话需要将 bind 127.0.0.1加#注释 ...

  3. SSRF——漏洞利用(二)

    0x01 概述 上篇讲述了SSRF的一般用法,用http协议来进行内网探测,攻击内网redis,接下来讨论的是SSRF的拓展用法,通过,file,gopher,dict协议对SSRF漏洞进行利用. 0 ...

  4. 在linux安装redis单机和集群后,如何在windows上使用redis客户端或者java代码访问错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。

    这几天在学习在linux上搭建服务器的工作,可谓历经艰辛.可喜最后收获也不少. 这次是在linux上搭建redis服务器后从windows上缺无法访问,连接不上. 仔细回忆以前搭建nginx和ftp的 ...

  5. NOSQL之【redis的安全策略】

    原文:http://redis.io/topics/security 1.Redis的安全模式 可信环境下的可信用户才可访问redis.这意味着,将redis服务器直接暴露在Internet或者不可信 ...

  6. redis教程(整理中)

    一.redis简介 1.Redis:键值对类型的内存数据库:应用于高并发和实时请求的场景: 2.Redis常用数据类型: (1) string(基本数据类型)     (2)hash 注:hash中的 ...

  7. redis 3.2.6 on ubuntu 14.04

    1. official site: https://github.com/antirez/redis/releases 2. compile and setup tar zxf redis-3.2.6 ...

  8. 配置redis外网可访问,并只允许指定的ip可访问redis

    开启redis 允许外网IP 访问 在 Linux 中安装了redis 服务,当在客户端通过远程连接的方式连接时,报could not connect错误. 错误的原因很简单,就是没有连接上redis ...

  9. Redis命令

    redis的常用命令主要分为两个方面.一个是键值相关命令.一个是服务器相关命令(redis-cli进入终端) 1.键值相关命令 keys * 取出当前所有的key exists name 查看n是否有 ...

随机推荐

  1. leetcode题目2.两数相加(中等)

    题目描述: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...

  2. VS下创建网站发布到IIS

    http://www.51zxw.net/show.aspx?id=27297&cid=410

  3. import 和 require 的 区别

    node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转 ...

  4. 二、Spring Boot 中maven中dependencies所有的jar包都报红,install报错(https://repo.maven.apache.org/maven2): Not authorized , ReasonPhrase:Authorizatio

    问题一:现象:打开SpringBoot项目后,所有依赖包都报红色波浪线 1.install报错(https://repo.maven.apache.org/maven2): Not authorize ...

  5. 使用Statement执行DML和DQL语句

    import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.DriverManager; impor ...

  6. linux 执行:pip3 install -r requirements.txt 报错

    错误内容: 解决办法:

  7. 4、kubernetes应用入门

    本随笔接前两两章,建立离master主节点和node01.node02.node03三个节点 kubectl子命令 master ~]# kubectl kubectl controls the Ku ...

  8. 进程,虚拟环境,Mysql主从

    进程 查看进程 ps(类似windows任务管理器) man 1 ps # 查看命令文档 ps[options] 1 UNIX options, which may be grouped and mu ...

  9. golang(10)interface应用和复习

    原文链接 http://www.limerence2017.com/2019/10/11/golang15/ interface 意义? golang 为什么要创造interface这种机制呢?我个人 ...

  10. 【.NET】由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。

    前言 上段时间做项目时,遇到如题之类问题,如今过去有一段时间了,具体出现的情形忘了,当时虽然找到了解决方法,但是依旧没有弄明白出现此种情况是何种原因,后来在微软的帮助支持中心找到了答案,特此记录,以防 ...