美文网首页mongoDB程序员
Mongo安全 之 拾遗

Mongo安全 之 拾遗

作者: 诺之林 | 来源:发表于2017-06-01 15:45 被阅读42次

    目录

    本文的软件和命令基于Ubuntu 1604 LTS系统 Mongo版本使用最新版本 安装方法参考Mongo安全 之 SSL

    引言

    在上两篇文章Mongo安全 之 鉴权Mongo安全 之 SSL

    我们详细讨论Mongo安全的两个主要方面: 鉴权和SSL

    本文将汇总Mongo安全的其他细节 让大家对Mongo安全有一个完整的认识

    防火墙

    其实防火墙并不属于Mongo 而是系统范畴 但是为了Mongo安全的考虑 我们有必要了解下系统常见防火墙的设置

    Ubuntu系统默认已经安装了防火墙软件 只是默认没有打开

    $ which ufw
    /usr/sbin/ufw
    
    $ sudo ufw status
    状态:不活动
    

    配置ssh

    在打开ufw防火墙之前 我们首先先更新下配置 允许ssh访问

    sudo ufw allow ssh
    

    接着 就可以打开ufw防火墙了

    sudo ufw enable
    

    此时 再次查看ufw的状态

    sudo ufw status
    

    打印结果如下

    状态: 激活
    
    至                          动作          来自
    -                          --          --
    22                         ALLOW       Anywhere
    22 (v6)                    ALLOW       Anywhere (v6)
    

    配置端口

    接着 我们测试本地与Ubuntu机器Mongo服务的连通性

    nc -z 192.168.56.101 27017
    

    没有返回成功的信息 说明Ubuntu系统的该端口不能访问

    nc的详细使用可以参考nc命令用法举例

    于是 我们修改ufw的防火墙设置 允许访问27017端口

    $ sudo ufw allow 27017
    
    $ sudo ufw status
    状态: 激活
    
    至                          动作          来自
    -                          --          --
    22                         ALLOW       Anywhere
    27017                      ALLOW       Anywhere
    22 (v6)                    ALLOW       Anywhere (v6)
    27017 (v6)                 ALLOW       Anywhere (v6)
    

    此时 我们再次测试本地与Ubuntu机器的连通性

    $ nc -z 192.168.56.101 27017
    Connection to 192.168.56.101 port 27017 [tcp/*] succeeded!
    

    返回成功的信息 说明Ubuntu系统的该端口已经能够正常访问

    配置地址

    上述端口会开放给所有的机器访问 因此 我们为了进一步限制访问范围 还可以配置允许访问的ip地址

    sudo ufw delete allow 27017
    
    sudo ufw allow from 192.168.0.0/16 to any port 27017
    

    通过上述配置 只允许192.168..范围的ip 访问27017端口

    bindIp

    除了系统防火墙这一道"安全保障"之外 Mongo也有类似防火墙的白名单机制: bindIp

    打开/etc/mongod.conf文件 我们发现bindIp的值是这样的

    bindIp: [127.0.0.1, 192.168.*.*]
    

    上述并不是默认配置 而是笔者修改后的结果

    bindIp设置了Mongo服务允许访问的ip地址和范围

    我们修改bindIp配置如下

    bindIp: 127.0.0.1
    

    然后 重启Mongo服务

    sudo service mongod restart
    

    此时 我们再次测试本地与Ubuntu机器的连通性

    nc -z 192.168.56.101 27017
    

    没有返回成功的信息 说明Ubuntu系统的Mongo服务27017端口又不能访问了

    所以 通常情况下 防火墙和bindIp都需要配置以提高安全性

    安全配置

    除了配置文件中的bindIp选项外 还有许多其他的安全配置

    net.http.enabled 设置成false以关闭http访问
    
    net.http.JSONPEnabled 设置成false以关闭JSONP访问
    
    net.http.RESTInterfaceEnabled 设置成false以关闭RESTful访问
    

    通常情况下 上述访问权限 都是默认false的 所以在没有需求的情况下不要添加这些访问配置或设置成false

    除了上述这些安全配置外 Mongo服务的配置选项还有很多 详细的可以参考Configuration File Options

    其他

    当然 除了上述详细讨论的一些方法外 还有一些细节供参考

    • 为Mongo服务创建单独的用户和组 并限制Mongo用户和组的访问权限

    • 对重要数据进行加密处理 (这个是官网建议的方法 是否采用看实际情况 毕竟数据库都要加密 说明系统和服务已经被攻破了 这已经不是一般情况了)

    • 购买付费版本的Mongo服务 (企业级的用户喜欢花钱买个心安 可以理解)

    小结

    本文作为Mongo安全三篇的最后一篇 从鉴权和SSL以外的角度 再次审视了Mongo的安全机制

    希望能够让大家对Mongo安全有一个完整的认识 当然 碍于笔者的能力有限 希望有经验的读者分享你的�认识 大家一起讨论进步

    参考

    更多文章, 请支持我的个人博客

    相关文章

      网友评论

        本文标题:Mongo安全 之 拾遗

        本文链接:https://www.haomeiwen.com/subject/zddefxtx.html