前提

假设redis安装在 IP 地址为 192.168.0.123 的linux服务器 .

我的本机Win10操作系统 IP地址为 192.168.0.45 , 有一套java客户端代码可调用linux 上的redis服务.

redis.conf 中 bind 的安全性

  • 首先对bind作下解释,bind 后跟的是本机自身可以识别的本地网卡IP地址,而不是说允许IP为XXX.XXX.XXX.XXX的客户端访问redis服务
  • 其次强调一点: 如果配置两行bind,不管前面几行的 IP 是否真实存在也不会报错,只以最后一行为标准
bind 192.168.0.123
bind 127.0.0.1
  • 另外强调一点: 如果单行配置关联多个 IP, 则这些 IP 必须是当前机器自身所在的网卡IP, 只要其中一个IP机器自身不能识别就会报错,所以可以写成
bind 192.168.0.123  127.0.0.1

奇葩的是,网上广为流传的是用bind 127.0.0.1 设置成只允许redis所在机器访问,然而在集群模式下,这个脑残设计有什么意义呢! 难道所有人都没有遇到A机器访问B机器redis的应用场景吗?

参考文章 http://blog.csdn.net/fxq8866/article/details/58238802 后,总结如下

方式一 bind IP列表 win10 java客户端问题 linux 上redis-cli客户端问题 是否推荐
1 bind 192.168.0.123 正常 Connection refused
2 bind 127.0.0.1 Connection refused 正常
3 bind 192.168.0.123 127.0.0.1 正常 正常
4 bind 0.0.0.0 正常 正常

所以尽量使用方式3或4来bind IP

用防火墙iptables配置指定IP才能访问redis服务

在网上四处摸索后觉得唯一合理的做法,就是使用防火墙iptables,针对6379端口做IP拦截策略,没有其它.

首先安利三波   iptables详解    iptables用法简介    关于iptables添加规则不生效的问题

于是配置以下三步:

  • 只允许IP为192.168.0.1到192.168.0.255的 IP 能访问redis服务,我的win10 所在IP为192.168.0.45
  • 其它所有IP禁止访问6379端口
  • 保存IP 策略,让重启以后也能生效
  • 查看iptables规则
[root@localhost bin]#iptables -I INPUT -s 192.168.0.1/192.168.0.255 -p tcp --dport 6379 -j ACCEPT
[root@localhost bin]#iptables -A INPUT -p tcp --dport 6379 -j REJECT
[root@localhost bin]#service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@localhost bin]#service iptables status

部分参数解释  -I : 添加到头部      -A: 添加到尾部

因为规则是按从头到尾匹配优先级执行的,所以 REJECT要追加到尾部,从而让ACCEPT先匹配,不然会导致Connection 问题

redis.conf 配置访问密码

redis设置访问密码有两种方式

  • 一种是redis.conf文件中指定密码(强列推荐)
requirepass mypassword
  • 一种是在redis-cli登录后使用命令(不推荐,千万别用)
127.0.0.1:6379> CONFIG set requirepass "mypassword"
127.0.0.1:6379> CONFIG get requirepass

如果设置了主从模式,则需要在从数据库的配置文件中通过masterauth参数设置主数据库的密码

另外因为redis的强大性能,黑客可以每秒十几万的密码批量交互redis服务端以验证真实密码,所以,我们的redis密码尽量设置得又臭又长点吧.

redis.conf 清除重要命令

禁用CONFIG, flushall ,flushdb 这三个重要命令

rename-command CONFIG ""
rename-command flushall ""
rename-command flushdb ""

nobody 最低权限启动redis (暂不会)

su -m nobody -c xxx

linux用户和用户配置文件(nobody)

redis安全问题【原】的更多相关文章

  1. TP5.0 Redis(单例模式)(原)

    看到好多面试都问设计模式,我就简单的了解了一下,顺便把之前封装好的Reis做了一次修改. 单例模式(Singleton Pattern 单件模式或单元素模式) 单例模式确保某个类只有一个实例,而且自行 ...

  2. java线程安全问题原理性分析

    1.什么是线程安全问题? 从某个线程开始访问到访问结束的整个过程,如果有一个访问对象被其他线程修改,那么对于当前线程而言就发生了线程安全问题:如果在整个访问过程中,无一对象被其他线程修改,就是线程安全 ...

  3. CentOS 6.6下Redis安装

    安装redis的过程非常的简单,具体参考教程官网:http://redis.io/download 1.下载并安装 下载的redis-3.2.5.tar.gz安装包默认在/usr/local/src/ ...

  4. 安装redis,搭建环境

    这里以redis-4.0.9为例   我自己为了好方便管理自己的软件包,就在/usr/local/目录下创建了一个software目录   mkdir  /usr/local/software cd  ...

  5. Nginx+Redis+Ehcache大型高并发高可用三层架构总结

    在生产环境中,对于高并发架构,我们知道缓存 是最重要的环节,对于大量的高并发.可以采用三层缓存架构来实现,也就是Nginx+Redis+Ehcache 对于中间件Nginx常来做流量分发,同事ngin ...

  6. 【Redis面试题】Redis的字符串是怎么实现的?

    年前本人在找工作面试时在Redis相关问题上可栽了跟头.在面试前按常规套路准备了一下,比如 Redis 的常用5种数据结构,Redis持久化策略,Redis实现分布式锁,简单发布订阅等等都准备了,当时 ...

  7. redis数据存储--C++连接redis

    一.下载的是Redis Windows版本:下载地址:https://github.com/microsoftarchive/redis:解压到:E:\Software\redis-3.0: 二.用V ...

  8. Android Logcat Security(转)

    讲解了在Android开发中logcat使用不当导致的安全问题 原帖地址:http://drops.wooyun.org/tips/3812 0x00 科普 development version : ...

  9. Java架构师必备技能:docker使用大全

    前言   java工程师成长为架构师是一个艰难且耗费心力的过程,不仅仅需要熟悉java体系内相关的技术,同时要掌握许多运维相关的操作技能,随着k8s逐渐成为微服务持续集成开发难以越过的基础设施之后,d ...

随机推荐

  1. 启发式合并&线段树合并/分裂&treap合并&splay合并

    启发式合并 有\(n\)个集合,每次让你合并两个集合,或询问一个集合中是否存在某个元素. ​ 我们可以用平衡树/set维护集合. ​ 对于合并两个\(A,B\),如果\(|A|<|B|\),那么 ...

  2. Android如何在一个TextView中实现多种文本风格?

     本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术,本文为大家讲解Android中,如何在一个 ...

  3. android TextView字体设置最少占多少行. 及其 Java String 字符串操作 . .

    ①  字体设置: 修改代码 :  GridViewActivity.java priceTv为 TextView priceTv.setMaxLines(3); //当多与7个字fu的时候 , 其余字 ...

  4. 【BZOJ5471】[FJOI2018]邮递员问题(动态规划)

    [BZOJ5471][FJOI2018]邮递员问题(动态规划) 题面 BZOJ 洛谷 给定平面上若干个点,保证这些点在两条平行线上,给定起点终点,求从起点出发,遍历所有点后到达终点的最短路径长度. 题 ...

  5. A.01.03-模块的输入—模拟量输入

    模拟量输入在使用过程中也十分常见,它在很多场合都应用到,但其用法又各有不同,下面列举一些常见的类型进行说明. 第一种为采用模拟口读取离散量的状态,如某开关可能有高.低.悬空三种状态均需能准确判断,这种 ...

  6. 外围功能电路控制 LET′S TRY“嵌入式编程”: 4 of 6

    外围功能电路控制 LET′S TRY“嵌入式编程”: 4 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的单片机的基础知识. 在<单片机入门(1)-(3)>中,我们一起学习了单片 ...

  7. 单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6

    单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 上期在&l ...

  8. 解决忘记mysql中的root用户密码问题

    如果忘了数据库中的root密码,无法登陆mysql. 解决步骤: 1. 使用“--skip-grant-tables”启动数据库 ~]#systemctl stop mysql ~]#mysqld_s ...

  9. nodejs的某些api~(一)node的流1

    根据心情整理一些node的api~ 今天第一篇,node的流:node的流比较重要,node的流存在于node的各个模块,包括输入输出流,stdin,stout.fs读取流,zlib流,crypto流 ...

  10. ocr智能图文识别 tess4j 图文,验证码识别

    最近写爬虫采集数据,遇到网站登录需要验证码校验,想了想有两种解决办法 1,利用htmlunit,将验证码输入到swing中,并弹出一个输入框,手动输入验证码,这种实现方式,如果网站需要登录一次可以使用 ...