• redis安全问题【原】


    前提

    假设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)

  • 相关阅读:
    548
    zookeeper的异常处理(Disconnected, SyncConnected, Expired)
    ZOJ 2588 Burning Bridges(求含重边的无向连通图的割边)
    SQL Server 中VARCHAR(MAX)变量赋值引起的性能问题。
    查看mysql数据库版本方法总结
    Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    Ignite用户配置管理介绍
    ORACLE动态采样分析
    SQL SERVER 2012链接到SQL SERVER 2000的问题解决案例
    SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id"
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/8330499.html
Copyright © 2020-2023  润新知